{-# LANGUAGE NoImplicitPrelude, UnicodeSyntax #-}

module Control.Monad.Unicode ( (≫=), (≫), (=≪), (↣), (↢) ) where

-------------------------------------------------------------------------------
-- Imports
-------------------------------------------------------------------------------

-- from base:
import Control.Monad ( Monad, (>>=), (>>), (=<<), (>=>), (<=<) )


-------------------------------------------------------------------------------
-- Fixities
-------------------------------------------------------------------------------

infixl 1 ≫=
infixl 1 ≫
infixr 1 =≪
infixl 1 ↣
infixr 1 ↢



-------------------------------------------------------------------------------
-- Symbols
-------------------------------------------------------------------------------

{-|
(&#x226B;=) = ('>>=')

(U+226B, MUCH GREATER-THAN) + (U+3D, EQUALS SIGN)
-}
(≫=) ∷ Monad m ⇒ m α → (α → m β) → m β
≫= :: m α -> (α -> m β) -> m β
(≫=) = m α -> (α -> m β) -> m β
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
(>>=)
{-# INLINE (≫=) #-}

{-|
(&#x226B;) = ('>>')

U+226B, MUCH GREATER-THAN
-}
(≫) ∷ Monad m ⇒ m α → m β → m β
≫ :: m α -> m β -> m β
(≫) = m α -> m β -> m β
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>)
{-# INLINE (≫) #-}

{-|
(=&#x226A;) = ('=<<')

(U+3D, EQUALS SIGN) + (U+226A, MUCH LESS-THAN)
-}
(=≪) ∷ Monad m ⇒ (α → m β) → m α → m β
=≪ :: (α -> m β) -> m α -> m β
(=≪) = (α -> m β) -> m α -> m β
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
(=<<)
{-# INLINE (=≪) #-}

{-|
(&#x21a3;) = ('>=>')

(U+21A3, RIGHTWARDS ARROW WITH TAIL)
-}
(↣) ∷ Monad μ ⇒ (α → μ β) → (β → μ γ) → α → μ γ
↣ :: (α -> μ β) -> (β -> μ γ) -> α -> μ γ
(↣) = (α -> μ β) -> (β -> μ γ) -> α -> μ γ
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
(>=>)
{-# INLINE (↣) #-}

{-|
(&#x21a2;) = ('<=<')

(U+21A2, LEFTWARDS ARROW WITH TAIL)
-}
(↢) ∷ Monad μ ⇒ (β → μ γ) → (α → μ β) → α → μ γ
↢ :: (β -> μ γ) -> (α -> μ β) -> α -> μ γ
(↢) = (β -> μ γ) -> (α -> μ β) -> α -> μ γ
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
(<=<)
{-# INLINE (↢) #-}