module Control.Monad.Syntax
  ( module X
  , (>>==)
  , (>>===)
  , (>>====)
  , (>>=====)
  , (>>======)
  ) where

import Control.Monad.Syntax.Two as X
import Control.Monad.Syntax.Three as X
import Control.Monad.Syntax.Four as X
import Control.Monad.Syntax.Five as X
import Control.Monad.Syntax.Six as X



(>>==) :: Monad m =>
          m b
       -> (a -> b -> m c)
       -> a -> m c
>>== :: forall (m :: * -> *) b a c.
Monad m =>
m b -> (a -> b -> m c) -> a -> m c
(>>==) m b
mb a -> b -> m c
f a
a = a -> b -> m c
f a
a forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< m b
mb

infixr 2 >>==

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

infixr 2 >>===

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

infixr 2 >>====

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

infixr 2 >>=====

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

infixr 2 >>======