0 | module Control.Monad.Indexed
2 | import Control.Functor.Indexed
3 | import Control.Applicative.Indexed
6 | infixl 1 >>>=
, =<<<
, >>>
, >>=>
, <=<<
9 | interface IndexedApplicative z m => IndexedMonad z m | m where
11 | bind : {0 i,j,k : z} -> m a i j -> (a -> m b j k) -> m b i k
14 | join : {0 i,j,k : z} -> m (m a j k) i j -> m a i k
17 | bind x f = join (map f x)
21 | (>>>=) : IndexedMonad z m => m a i j -> (a -> m b j k) -> m b i k
26 | (=<<<) : IndexedMonad z m => (a -> m b j k) -> m a i j -> m b i k
27 | (=<<<) = flip (>>>=)
31 | (>>>) : IndexedMonad z m => m () i j -> Lazy (m b j k) -> m b i k
32 | (>>>) x y = x >>>= \_ => y
36 | (>>=>) : IndexedMonad z m => (a -> m b i j) -> (b -> m c j k) -> (a -> m c i k)
37 | (>>=>) f g x = f x >>>= g
41 | (<=<<) : IndexedMonad z m => (b -> m c j k) -> (a -> m b i j) -> (a -> m c i k)
42 | (<=<<) = flip (>>=>)