Give Curried its own __repr__ implementation

Because a curried function annotation will be based on the original
function signature (won't match Env -> T), I'd rather differentiate
its representation. Otherwise, it looks like something messed up
building a Reader.
This commit is contained in:
Correl Roush 2019-01-08 15:24:32 -05:00
parent 375e5a47e1
commit 3d312c1c90

View file

@ -13,11 +13,19 @@ E = TypeVar("E")
Result = TypeVar("Result")
class CurriedUnary(Reader[A, Result]):
class Curried(Reader[A, Result]):
def __repr__(self): # pragma: no cover
module = self.function.__module__
name = self.function.__name__
signature = inspect.signature(self)
return f"<Curried {module}.{name}{signature}>"
class CurriedUnary(Curried[A, Result]):
...
class CurriedBinary(Reader[A, CurriedUnary[B, Result]]):
class CurriedBinary(Curried[A, CurriedUnary[B, Result]]):
@overload
def __call__(self, environment: A) -> CurriedUnary[B, Result]:
...
@ -30,7 +38,7 @@ class CurriedBinary(Reader[A, CurriedUnary[B, Result]]):
return reduce(lambda f, x: f(x), args, self.function)
class CurriedTernary(Reader[A, CurriedBinary[B, C, Result]]):
class CurriedTernary(Curried[A, CurriedBinary[B, C, Result]]):
@overload
def __call__(self, environment: A) -> CurriedBinary[B, C, Result]:
...
@ -47,7 +55,7 @@ class CurriedTernary(Reader[A, CurriedBinary[B, C, Result]]):
return reduce(lambda f, x: f(x), args, self.function)
class CurriedQuaternary(Reader[A, CurriedTernary[B, C, D, Result]]):
class CurriedQuaternary(Curried[A, CurriedTernary[B, C, D, Result]]):
@overload
def __call__(self, environment: A) -> CurriedTernary[B, C, D, Result]:
...
@ -68,7 +76,7 @@ class CurriedQuaternary(Reader[A, CurriedTernary[B, C, D, Result]]):
return reduce(lambda f, x: f(x), args, self.function)
class CurriedQuinary(Reader[A, CurriedQuaternary[B, C, D, E, Result]]):
class CurriedQuinary(Curried[A, CurriedQuaternary[B, C, D, E, Result]]):
@overload
def __call__(self, environment: A) -> CurriedQuaternary[B, C, D, E, Result]:
...