module Control.Monad.Trans.Indexed.Do
( (>>=)
, (>>)
, return
, fail
) where
import qualified Control.Monad as M
import qualified Control.Monad.Trans as T
import qualified Control.Monad.Trans.Indexed as Ix
import Prelude hiding ((>>=), (>>), fail)
(>>=)
:: (Ix.IxMonadTrans t, M.Monad m)
=> t i j m x
-> (x -> t j k m y)
-> t i k m y
>>= :: forall {k} (t :: k -> k -> (* -> *) -> * -> *) (m :: * -> *)
(i :: k) (j :: k) x (k :: k) y.
(IxMonadTrans t, Monad m) =>
t i j m x -> (x -> t j k m y) -> t i k m y
(>>=) = ((x -> t j k m y) -> t i j m x -> t i k m y)
-> t i j m x -> (x -> t j k m y) -> t i k m y
forall a b c. (a -> b -> c) -> b -> a -> c
flip (x -> t j k m y) -> t i j m x -> t i k m y
forall k (t :: k -> k -> (* -> *) -> * -> *) (m :: * -> *) x
(j :: k) (k1 :: k) y (i :: k).
(IxMonadTrans t, Monad m) =>
(x -> t j k1 m y) -> t i j m x -> t i k1 m y
forall (m :: * -> *) x (j :: k) (k1 :: k) y (i :: k).
Monad m =>
(x -> t j k1 m y) -> t i j m x -> t i k1 m y
Ix.bindIx
(>>)
:: (Ix.IxMonadTrans t, M.Monad m)
=> t i j m x
-> t j k m y
-> t i k m y
>> :: forall {k} (t :: k -> k -> (* -> *) -> * -> *) (m :: * -> *)
(i :: k) (j :: k) x (k :: k) y.
(IxMonadTrans t, Monad m) =>
t i j m x -> t j k m y -> t i k m y
(>>) = (t j k m y -> t i j m x -> t i k m y)
-> t i j m x -> t j k m y -> t i k m y
forall a b c. (a -> b -> c) -> b -> a -> c
flip t j k m y -> t i j m x -> t i k m y
forall k (t :: k -> k -> (* -> *) -> * -> *) (m :: * -> *) (j :: k)
(k1 :: k) y (i :: k) x.
(IxMonadTrans t, Monad m) =>
t j k1 m y -> t i j m x -> t i k1 m y
forall (m :: * -> *) (j :: k) (k1 :: k) y (i :: k) x.
Monad m =>
t j k1 m y -> t i j m x -> t i k1 m y
Ix.thenIx
fail
:: (Ix.IxMonadTrans t, M.MonadFail m, i ~ j)
=> String
-> t i j m x
fail :: forall {k} (t :: k -> k -> (* -> *) -> * -> *) (m :: * -> *)
(i :: k) (j :: k) x.
(IxMonadTrans t, MonadFail m, i ~ j) =>
String -> t i j m x
fail = m x -> t i j m x
forall (m :: * -> *) a. Monad m => m a -> t i j m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
T.lift (m x -> t i j m x) -> (String -> m x) -> String -> t i j m x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> m x
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
M.fail