lisa.monad.Async#
- class lisa.monad.Async(coro)[source]#
Bases:
MonadTransMonad transformer allowing the decorated coroutine function to await on non-monadic values. This is useful to mix any monad transformer defined in this module with other async APIs, such as
asyncio.Attributes
Properties
Coroutine that will only yield non-monadic values. All the monadic values will be processed by the monad transformer stack as expected and will stay hidden.
Run the coroutine to completion in its event loop.
Methods
Takes a monadic value Monad[A], a function that takes an A and returns Monad[B], and returns a Monad[B].
Lift a monadic value
mby one level in the stack, i.e.: Given a stack for 3 transformersT1(T2(T3(Identity))), a valuem = T2(Identity).pure(42). we haveT2.hoist(m, T3.pure) == T2(T3(Identity)).pure(42).Lift a monadic value
mby one level in the stack, i.e.: Given a stack for 3 transformersT1(T2(T3(Identity))), a valuem = T3(Identity).pure(42). we haveT2.lift(m) == T2(T3(Identity)).pure(42).__await__()inheriteddo()inheritedDecorate a coroutine function so that
awaitsgains the powers of the monad.join()inheritedTakes a monadic value Monad[Monad[A]], and returns a Monad[A].
map()inheritedTakes a monadic value Monad[A], a function that takes an A and returns B, and returns a Monad[B].
pure()inheritedTurn a regular value of type
Ainto a monadic value of typeMonad[A].
Attributes#
- Async.__slots__ = ('_coro',)#
Properties#
Methods#
- Async.bind(continuation)[source]#
Takes a monadic value Monad[A], a function that takes an A and returns Monad[B], and returns a Monad[B].
Note
It is allowed to return a
_TailCallinstance.
- Async.hoist(self, nat)[source]#
Lift a monadic value
mby one level in the stack, i.e.: Given a stack for 3 transformersT1(T2(T3(Identity))), a valuem = T2(Identity).pure(42). we haveT2.hoist(m, T3.pure) == T2(T3(Identity)).pure(42).In other words, it allows adding a level “from below”, whereas
liftadds a level “from above”. It’s similar tomap, except that instead of traversing all the nested functor layers, it stops at the first one.- Parameters:
self (lisa.monad.Monad) – Monadic value to hoist.
nat (collections.abc.Callable) – Natural transform. i.e. a morphism from
Monad1[A]toMonad2[A]that obeys certain laws.
See also
hoistas defined in https://hackage.haskell.org/package/mmorphNote
Note for implementers: A monad transformers
t m a(tis the transformer HKT,mis the base monad andais the “contained type) usually ends up containing an “m (f a)” (fbeing some kind of functor). For example,MaybeTin Haskell (Optionhere) is more or less defined asdata MaybeT m a = MaybeT (m (Maybe a)). What thehoistimplementation must do is to “rebuild” a value with a call tonat()around them (...)part. ForMaybeT, this giveshoist nat (MaybeT (m (Maybe a))) = MaybeT(nat(m (Maybe a))).
- classmethod Async.lift(x)[source]#
Lift a monadic value
mby one level in the stack, i.e.: Given a stack for 3 transformersT1(T2(T3(Identity))), a valuem = T3(Identity).pure(42). we haveT2.lift(m) == T2(T3(Identity)).pure(42).See also
liftas defined in https://hackage.haskell.org/package/transformers
- Async.__await__()#
Inherited method, see
lisa.monad.Monad.__await__()
- classmethod Async.do(f)#
Inherited method, see
lisa.monad.MonadTrans.do()Decorate a coroutine function so that
awaitsgains the powers of the monad.
- classmethod Async.join(self)#
Inherited method, see
lisa.monad.Monad.join()Takes a monadic value Monad[Monad[A]], and returns a Monad[A].
- classmethod Async.map(self, f)#
Inherited method, see
lisa.monad.Monad.map()Takes a monadic value Monad[A], a function that takes an A and returns B, and returns a Monad[B].
- classmethod Async.pure(x)#
Inherited method, see
lisa.monad.MonadTrans.pure()Turn a regular value of type
Ainto a monadic value of typeMonad[A].