| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Control.Algebra.Handler
Documentation
type Handler ctx m n = forall x. ctx (m x) -> n (ctx x) Source #
Handlers take an action in m bundled up with some state in some context functor ctx, and return an action in n producing a derived state in ctx.
These are expected to be well-behaved distributive laws, and are required to adhere to the following laws:
handler.fmappure=pure
handler.fmap(k=<<) = handler.fmapk<=<handler
respectively expressing that the handler does not alter the context of pure computations, and that the handler distributes over monadic composition.
Handlers compose with handlers, using e.g. Data.Functor.Compose. to ensure that the result is itself well-typed as a ComposeHandler:
fmapCompose.handler1.fmaphandler2.getCompose
and with monad homomorphisms on the left and right:
hom . handler
handler.fmaphom
Since: 1.1.0.0