module Control.Monad.Syntax.Four where


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

infixr 1 ====<<

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

infixr 1 =.==<<

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

infixr 1 ==.=<<

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

infixr 1 ===.<<