newtype ArrowMonad a b { } #
ArrowMonad (a () b)
The monad induced by ArrowApply.
newtype Kleisli m a b { } #
Kleisli { runKleisli :: a -> m b }
Kleisli arrows of a monad.
class Category a => Arrow a { } #

Methods

arr :: (b -> c) -> a b c
first :: (a b c) -> a (b, d) (c, d)
second :: (a b c) -> a (d, b) (d, c)
*** :: (a b c) -> (a b' c') -> a (b, b') (c, c')
&&& :: (a b c) -> (a b c') -> a b (c, c')
class Arrow a => ArrowZero a { } #

Methods

zeroArrow :: a b c
Arrows with a zero (identity for '<+>').
class Arrow a => ArrowPlus a { } #

Methods

<+> :: (a b c) -> (a b c) -> a b c
Arrows with a plus operation (choice between arrows).
class Arrow a => ArrowChoice a { } #

Methods

left :: (a b c) -> a (Either b d) (Either c d)
right :: (a b c) -> a (Either d b) (Either d c)
+++ :: (a b c) -> (a b' c') -> a (Either b b') (Either c c')
||| :: (a b d) -> (a c d) -> a (Either b c) d
Arrows that support choice (branching on Either).
class Arrow a => ArrowApply a { } #

Methods

app :: a (a b c, b) c
class Arrow a => ArrowLoop a { } #

Methods

loop :: (a (b, d) (c, d)) -> a b c
Arrows with a feedback loop (fixed-point combinator).
x :: { } #
returnA :: (Arrow a) => a b b { } #
O(1). The identity arrow. Equivalent to @arr id@.
^>> :: (Arrow a) => (b -> c) -> (a c d) -> a b d { } #
O(1). Precomposition with a pure function (left to right).
>>^ :: (Arrow a) => (a b c) -> (c -> d) -> a b d { } #
O(1). Postcomposition with a pure function (left to right).
<<^ :: (Arrow a) => (a c d) -> (b -> c) -> a b d { } #
O(1). Precomposition with a pure function (right to left).
^<< :: (Arrow a) => (c -> d) -> (a b c) -> a b d { } #
O(1). Postcomposition with a pure function (right to left).
<*> :: { } #
h :: { } #
leftApp :: (ArrowApply a) => (a b c) -> a (Either b d) (Either c d) { } #
g :: { } #
<+> :: { } #
instance ArrowApply -> { }
instance Arrow a => Functor (ArrowMonad a) { }
instance ArrowLoop -> { }
instance Monad m => Arrow (Kleisli m) { }
instance Monad m => ArrowChoice (Kleisli m) { }
instance Monad m => ArrowApply (Kleisli m) { }
instance MonadPlus m => ArrowZero (Kleisli m) { }