class ADT:
    class _MatchFail(Exception):
        pass

    _T = TTypeVar("_T")
    _U = TTypeVar("_U")

    def __iter__(self) -> TIter[TAny]:
        yield from [getattr(self, field.name) for field in _dc.fields(self)]

    def __repr__(self) -> str:
        string = f"{self.__class__.__name__}("
        keys = [field.name for field in _dc.fields(self)]
        for i, k in enumerate(keys):
            value = getattr(self, k)
            if isinstance(value, str):
                string += f"'{value}'"
            else:
                string += f"{value}"
            if i < len(keys) - 1:
                string += ","
        string += ")"
        return string

    def __enter__(self: _T) -> _T:
        return self

    def __exit__(self, type, value, traceback):  # type: ignore
        pass

    def __rshift__(self: _T, cls: TType[_U]) -> _U:
        if not isinstance(self, cls):
            raise ADT._MatchFail
        return self
class Infix(object):
    T = TTypeVar("T")
    U = TTypeVar("U")
    R = TTypeVar("R")
    def __init__(self, func : TUnion[TLam[[U],R], TLam[[T,U],R]]):
        self.func = func
    def __or__(self, other : U) -> R:
        return ty.cast(TLam[[Infix.U],Infix.R],self.func)(other)
    def __ror__(self, other : T) -> Infix:
        return Infix(partial(self.func, other)) #type: ignore
class Unpack:
    _T = TTypeVar("_T")
    def __iter__(self) -> TIter[TAny]:
        yield from [getattr(self, field.name) for field in _dc.fields(self)]

    def __repr__(self) -> str:
        string = f"{self.__class__.__name__}("
        keys = [field.name for field in _dc.fields(self)]
        for i, k in enumerate(keys):
            value = getattr(self, k)
            if isinstance(value, str):
                string += f"'{value}'"
            else:
                string += f"{value}"
            if i < len(keys) - 1:
                string += ","
        string += ")"
        return string

    def __ror__(self, cls: TType[_T]) -> _match_context[_T]:
        return _match_context(self, cls)
class ADT:
    _T = TTypeVar("_T")

    def __iter__(self) -> TIter[TAny]:
        yield from [getattr(self, field.name) for field in _dc.fields(self)]

    def __repr__(self) -> str:
        string = f"{self.__class__.__name__}("
        keys = [field.name for field in _dc.fields(self)]
        for i, k in enumerate(keys):
            value = getattr(self, k)
            if isinstance(value, str):
                string += f"'{value}'"
            else:
                string += f"{value}"
            if i < len(keys) - 1:
                string += ","
        string += ")"
        return string

    def __rshift__(self, cls: TType[_T]) -> _T:
        if not isinstance(self, cls):
            raise MatchContext._skip
        return self
)
import sys
from dataclasses import dataclass
import dataclasses as _dc
import typeguard
import functools
from functools import reduce as fold

foldl: TLam[[TAny, TAny, TAny], TAny] = lambda func, acc, xs: functools.reduce(
    func, xs, acc
)

_dc_attrs = {"frozen": True, "repr": False}


_match_contextT = TTypeVar("_match_contextT")
class _match_context(TGeneric[_match_contextT]):
    class _skip(Exception):
        pass

    def __init__(self, obj: TAny, cls: TAny):
        self.skip = not isinstance(obj, cls)
        self.obj = obj

    def __enter__(self) -> _match_contextT:
        if self.skip:
            import sys

            sys.settrace(lambda *args, **keys: None)
            frame = sys._getframe(1)
            frame.f_trace = self.trace  # type: ignore
Exemple #6
0
)
import sys
from dataclasses import dataclass
import dataclasses as _dc
import typeguard
import functools
from functools import reduce as fold

foldl: TLam[[TAny, TAny, TAny], TAny] = lambda func, acc, xs: functools.reduce(
    func, xs, acc
)

_dc_attrs = {"frozen": True, "repr": False}


MatchContextT = TTypeVar("MatchContextT")


class _1match_context(TGeneric[MatchContextT]):
    class _skip(Exception):
        pass

    def __init__(self, obj: TAny, cls: TAny):
        self.skip = not isinstance(obj, cls)
        self.obj = obj

    def __enter__(self) -> MatchContextT:
        if self.skip:
            import sys

            sys.settrace(lambda *args, **keys: None)
        return isinstance(self, cls)

    def match(self, cls: TAny) -> TAny:
        return _match_context(self, cls)


check_types = True
check_types = False
check_argument_types: TLam[[], bool]
if check_types:
    check_argument_types = typeguard.check_argument_types
else:
    check_argument_types = lambda: True

# --WAR-beg--  mypy issue: https://github.com/python/mypy/issues/5485
_BoxT = TTypeVar("_BoxT")


@dataclass
class Box(TGeneric[_BoxT]):
    inner: _BoxT  # pytype: disable=not-supported-yet

    @property
    def __call__(self) -> _BoxT:
        return self.inner


# --WAR-end--

abstract = dataclass(frozen=True)