packages feed

exference-1.6.0.0: environment/Arrow.hs

module Control.Arrow where



class Category a => Arrow a where
  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')

instance Control.Monad m => Arrow (Kleisli m)

newtype Kleisli m a b = Kleisli (a -> m b)

class Arrow a => ArrowZero a where
  zeroArrow :: a b c

class ArrowZero a => ArrowPlus a where
  (<+>) :: a b c -> a b c -> a b c

-- TODO: there is more stuff in base:Control.Arrow