module Control.Monad.Syntax.Two where

(==<<) :: Monad m =>
          (a -> b -> m c)
       -> m a
       -> b -> m c
==<< :: forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> b -> m c
(==<<) a -> b -> m c
mf m a
x b
b = m a
x forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (a -> b -> m c
`mf` b
b)

infixl 1 ==<<

(=.<<) :: Monad m =>
          (a -> b -> m c)
       -> m b
       -> a -> m c
=.<< :: forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m b -> a -> m c
(=.<<) a -> b -> m c
mf m b
x a
a = a -> b -> m c
mf a
a forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< m b
x

infixl 1 =.<<