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 ==.<<