Copyright | Copyright (C) 2015 Kyle Carter |
---|---|
License | BSD3 |
Maintainer | Kyle Carter <kylcarte@indiana.edu> |
Stability | experimental |
Portability | RankNTypes |
Safe Haskell | None |
Language | Haskell2010 |
Two type combinators for working with conjunctions: A fanout combinator '(:&:)', and a par combinator '(:*:)'.
These are analogous to '(&&&)' and '(***)' from Arrow
,
respectively.
Documentation
data f :&: g :: k -> * where infixr 5 Source
Bifunctor1 k k k ((:&:) k) Source | |
Traversable1 k k ((:&:) k f) Source | |
Foldable1 k k ((:&:) k f) Source | |
Functor1 k k ((:&:) k f) Source | |
DecEquality k f => DecEquality k ((:&:) k f g) Source | |
(Show1 k f, Show1 k g) => Show1 k ((:&:) k f g) Source | |
(Ord1 k f, Ord1 k g) => Ord1 k ((:&:) k f g) Source | |
(Eq1 k f, Eq1 k g) => Eq1 k ((:&:) k f g) Source | |
(Known k f a, Known k g a) => Known k ((:&:) k f g) a Source | |
(Witness p q (f a), Witness s t (g a)) => Witness (p, s) (q, t) ((:&:) k f g a) Source | |
(Eq (f a), Eq (g a)) => Eq ((:&:) k f g a) Source | |
(Ord (f a), Ord (g a)) => Ord ((:&:) k f g a) Source | |
(Read (f a), Read (g a)) => Read ((:&:) k f g a) Source | |
(Show (f a), Show (g a)) => Show ((:&:) k f g a) Source | |
type KnownC k ((:&:) k f g) a = ØC | |
type WitnessC (p, s) (q, t) ((:&:) k f g a) = (Witness p q (f a), Witness s t (g a)) Source |
uncurryFan :: (f a -> g a -> r) -> (f :&: g) a -> r Source
data f :*: g :: (k, l) -> * where infixr 5 Source
Bifunctor1 k k ((,) k k) ((:*:) k k) Source | |
Traversable1 k ((,) k k) ((:*:) k k f) Source | |
Foldable1 k ((,) k k) ((:*:) k k f) Source | |
Functor1 k ((,) k k) ((:*:) k k f) Source | |
(Witness p q (f a), Witness s t (g b), (~) ((,) k k1) x ((#) k k1 a b)) => Witness (p, s) (q, t) ((:*:) k k f g x) Source | |
(DecEquality k f, DecEquality k1 g) => DecEquality ((,) k k) ((:*:) k k f g) Source | |
(Show1 k f, Show1 k1 g) => Show1 ((,) k k) ((:*:) k k f g) Source | |
(Ord1 k f, Ord1 k1 g) => Ord1 ((,) k k) ((:*:) k k f g) Source | |
(Eq1 k f, Eq1 k1 g) => Eq1 ((,) k k) ((:*:) k k f g) Source | |
((~) ((,) k k1) p ((#) k k1 a b), Known k f a, Known k1 g b) => Known ((,) k k) ((:*:) k k f g) p Source | |
(Eq (f (Fst k k1 p)), Eq (g (Snd k1 k p))) => Eq ((:*:) k k f g p) Source | |
(Ord (f (Fst k k1 p)), Ord (g (Snd k1 k p))) => Ord ((:*:) k k f g p) Source | |
((~) ((,) k k1) p ((#) k k1 a b), Read (f a), Read (g b)) => Read ((:*:) k k f g p) Source | |
(Show (f (Fst k k1 p)), Show (g (Snd k1 k p))) => Show ((:*:) k k f g p) Source | |
type WitnessC (p, s) (q, t) ((:*:) k k1 f g x) = (Witness p q (f (Fst k k1 x)), Witness s t (g (Snd k1 k x))) Source | |
type KnownC ((,) k k1) ((:*:) k k1 f g) p = ØC |
uncurryPar :: (forall a b. (p ~ (a # b)) => f a -> g b -> r) -> (f :*: g) p -> r Source