packages feed

idris-1.2.0: libs/contrib/Data/Combinators/Arrow.idr

||| Combinators from Control.Arrow

first : (a -> b) -> (a, c) -> (b, c)
first f (a, c) = (f a, c)

second : (a -> b) -> ((c, a) -> (c, b))
second f (c, a) = (c, f a)

infixr 3 ***
(***) : (a -> b) -> (a' -> b') -> ((a, a') -> (b, b'))
(***) f g (a, a') = (f a, g a')

infixr 3 &&&
(&&&) : (a -> b) -> (a -> b') -> (a -> (b, b'))
(&&&) f g x = (f x, g x)