module Control.Monad.Syntax.Three where


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

infixl 1 ===<<

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

infixl 1 =.=<<

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

infixl 1 ==.<<