packages feed

deriving-trans-0.5.0.0: src/Control/Monad/Trans/Compose/Infix.hs

module Control.Monad.Trans.Compose.Infix where

import Control.Monad.Trans.Compose
import Control.Monad.Trans.Control

-- | A flipped type-level infix operator for 'ComposeT'.
type (.|>) t2 t1 = ComposeT t1 t2

infixl 1 .|>

-- | A 'flip'ped infix operator for 'runComposeT'.
(./>) :: (forall a. t2 m a -> m (StT t2 a)) -- ^ run @t2@
      -> (forall a. t1 (t2 m) a -> t2 m (StT t1 a)) -- ^ run @t1@
      -> (forall a. (t2 .|> t1) m a -> m (StT t2 (StT t1 a)))
(./>) runT2 runT1 = runComposeT runT1 runT2

infixl 1 ./>

-- | A 'flip'ped infix operator for 'runComposeT''.
(..>) :: (t2 m a -> m a) -- ^ run @t2@
      -> (t1 (t2 m) a -> t2 m a) -- ^ run @t1@
      -> ((t2 .|> t1) m a -> m a)
(..>) runT2 runT1 = runComposeT' runT1 runT2

infixl 1 ..>