Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Eff r a
- class KnownNat (FindElem t r) => Member t r
- class Member t r => MemberU2 tag t r | tag r -> t
- type Handler t r w = forall v. t v -> Arr r v w -> Eff r w
- type HandlerS s t r w = forall v. s -> t v -> (s -> Arr r v w) -> Eff r w
- handleRelay :: (a -> Eff r w) -> Handler t r w -> Eff (t ': r) a -> Eff r w
- handleRelayS :: s -> (s -> a -> Eff r w) -> HandlerS s t r w -> Eff (t ': r) a -> Eff r w
- send :: Member t r => t v -> Eff r v
- interpose :: Member t r => (a -> Eff r w) -> (forall v. t v -> Arr r v w -> Eff r w) -> Eff r a -> Eff r w
- run :: Eff '[] w -> w
Documentation
The Eff monad (not a transformer!) It is a fairly standard coroutine monad It is NOT a Free monad! There are no Functor constraints Status of a coroutine (client): done with the value of type w, or sending a request of type Union r with the continuation Arrs r b a. Potentially, inline Union into Impure
type HandlerS s t r w = forall v. s -> t v -> (s -> Arr r v w) -> Eff r w Source #
Parameterized Handler type
handleRelay :: (a -> Eff r w) -> Handler t r w -> Eff (t ': r) a -> Eff r w Source #
A convenient pattern: given a request (open union), either handle it or relay it.
handleRelayS :: s -> (s -> a -> Eff r w) -> HandlerS s t r w -> Eff (t ': r) a -> Eff r w Source #
Parameterized handleRelay