invertible-0.1.2: bidirectional arrows, bijective functions, and invariant functors

Safe HaskellSafe
LanguageHaskell2010

Control.Invertible.MonadArrow

Description

A symmetric version of the Kleisli monad transformer arrow. BiKleisli provides this Kleisli-like arrow over bijections.

The Alimarine paper just calls it "MoT" for Monad Transformer.

Synopsis

Documentation

newtype MonadArrow a m b c Source #

Bidirectional Kleisli-like monad arrow transformer.

Constructors

MonadArrow 

Fields

Instances

Category * a => Category * (MonadArrow a m) Source # 

Methods

id :: cat a a #

(.) :: cat b c -> cat a b -> cat a c #

Groupoid * a => Groupoid * (MonadArrow a m) Source # 

Methods

inv :: k1 a b -> k1 b a #

Semigroupoid * a => Semigroupoid * (MonadArrow a m) Source # 

Methods

o :: c j k1 -> c i j -> c i k1 #

Monad m => Arrow (MonadArrow (->) m) Source # 

Methods

arr :: (b -> c) -> MonadArrow (->) m b c #

first :: MonadArrow (->) m b c -> MonadArrow (->) m (b, d) (c, d) #

second :: MonadArrow (->) m b c -> MonadArrow (->) m (d, b) (d, c) #

(***) :: MonadArrow (->) m b c -> MonadArrow (->) m b' c' -> MonadArrow (->) m (b, b') (c, c') #

(&&&) :: MonadArrow (->) m b c -> MonadArrow (->) m b c' -> MonadArrow (->) m b (c, c') #

Monad m => Arrow (MonadArrow (<->) m) Source # 

Methods

arr :: (b -> c) -> MonadArrow (<->) m b c #

first :: MonadArrow (<->) m b c -> MonadArrow (<->) m (b, d) (c, d) #

second :: MonadArrow (<->) m b c -> MonadArrow (<->) m (d, b) (d, c) #

(***) :: MonadArrow (<->) m b c -> MonadArrow (<->) m b' c' -> MonadArrow (<->) m (b, b') (c, c') #

(&&&) :: MonadArrow (<->) m b c -> MonadArrow (<->) m b c' -> MonadArrow (<->) m b (c, c') #

Monad m => ArrowChoice (MonadArrow (->) m) Source # 

Methods

left :: MonadArrow (->) m b c -> MonadArrow (->) m (Either b d) (Either c d) #

right :: MonadArrow (->) m b c -> MonadArrow (->) m (Either d b) (Either d c) #

(+++) :: MonadArrow (->) m b c -> MonadArrow (->) m b' c' -> MonadArrow (->) m (Either b b') (Either c c') #

(|||) :: MonadArrow (->) m b d -> MonadArrow (->) m c d -> MonadArrow (->) m (Either b c) d #

Monad m => ArrowChoice (MonadArrow (<->) m) Source # 

Methods

left :: MonadArrow (<->) m b c -> MonadArrow (<->) m (Either b d) (Either c d) #

right :: MonadArrow (<->) m b c -> MonadArrow (<->) m (Either d b) (Either d c) #

(+++) :: MonadArrow (<->) m b c -> MonadArrow (<->) m b' c' -> MonadArrow (<->) m (Either b b') (Either c c') #

(|||) :: MonadArrow (<->) m b d -> MonadArrow (<->) m c d -> MonadArrow (<->) m (Either b c) d #

MonadPlus m => ArrowZero (MonadArrow (->) m) Source # 

Methods

zeroArrow :: MonadArrow (->) m b c #

MonadPlus m => ArrowZero (MonadArrow (<->) m) Source # 

Methods

zeroArrow :: MonadArrow (<->) m b c #

MonadPlus m => ArrowPlus (MonadArrow (->) m) Source # 

Methods

(<+>) :: MonadArrow (->) m b c -> MonadArrow (->) m b c -> MonadArrow (->) m b c #

MonadPlus m => ArrowPlus (MonadArrow (<->) m) Source # 

Methods

(<+>) :: MonadArrow (<->) m b c -> MonadArrow (<->) m b c -> MonadArrow (<->) m b c #

Monad m => BiArrow' (MonadArrow (<->) m) Source # 
(BiArrow a, Monad m) => BiArrow (MonadArrow a m) Source # 

Methods

(<->) :: (b -> c) -> (c -> b) -> MonadArrow a m b c Source #

invert :: MonadArrow a m b c -> MonadArrow a m c b Source #

type BiKleisli m a b = MonadArrow (<->) m a b Source #

A MonadArrow over bijections.