Copyright | (C) 2012-2015 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <[email protected]> |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Bound.Class
Description
This module provides the Bound
class, for performing substitution into
things that are not necessarily full monad transformers.
Documentation
class Bound (t :: (Type -> Type) -> Type -> Type) where Source #
Instances of Bound
generate left modules over monads.
This means they should satisfy the following laws:
m>>>=
return
≡ m m>>>=
(λ x → k x>>=
h) ≡ (m>>>=
k)>>>=
h
This guarantees that a typical Monad instance for an expression type where Bound instances appear will satisfy the Monad laws (see doc/BoundLaws.hs).
If instances of Bound
are monad transformers, then m
implies the above laws, and is in fact the default definition.>>>=
f ≡ m >>=
lift
.
f
This is useful for types like expression lists, case alternatives, schemas, etc. that may not be expressions in their own right, but often contain expressions.
Note: Free
isn't "really" a monad transformer, even if
the kind matches. Therefore there isn't
instance.Bound
Free
Minimal complete definition
Nothing
Methods
(>>>=) :: Monad f => t f a -> (a -> f c) -> t f c infixl 1 Source #