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

Safe HaskellNone
LanguageHaskell2010

Control.Invertible.MonadArrow

Description

A symmetric version of the Kleisli monad transformer arrow. This admits three isomorphic MonadBijection types:

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 ((->) LiftedRep LiftedRep) m) Source # 

Methods

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

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

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

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

(&&&) :: MonadArrow (LiftedRep -> LiftedRep) m b c -> MonadArrow (LiftedRep -> LiftedRep) m b c' -> MonadArrow (LiftedRep -> LiftedRep) 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') #

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

Methods

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

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

Methods

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

Monad m => ArrowChoice (MonadArrow ((->) LiftedRep LiftedRep) m) Source # 
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 => 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 MonadFunction = MonadArrow (->) Source #

Specialization of MonadArrow to function arrows.

type MonadBijection'' m a b = m a <-> m b Source #

monadBijection :: MonadBijection' m a b <-> MonadBijection m a b Source #

Convert between isomorphic representations of MonadBijections.

monadBijection' :: MonadBijection'' m a b <-> MonadBijection' m a b Source #

Convert between isomorphic representations of MonadBijections.