| Copyright | Copyright (C) 2015 Kyle Carter |
|---|---|
| License | BSD3 |
| Maintainer | Kyle Carter <kylcarte@indiana.edu> |
| Stability | experimental |
| Portability | RankNTypes |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Type.Conjunction
Description
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
Instances
| 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
Instances
| 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