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 6 Source #
Bifunctor1 m m m ((:&:) m) Source # | |
Traversable1 l l ((:&:) l f) Source # | |
Foldable1 l l ((:&:) l f) Source # | |
Functor1 l l ((:&:) l f) 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 Source # | |
type WitnessC (p, s) (q, t) ((:&:) k f g a) Source # | |
uncurryFan :: (f a -> g a -> r) -> (f :&: g) a -> r Source #
data f :*: g :: (k, l) -> * where infixr 6 Source #
IxFunctor1 k (m, k) (IxSecond m k k ((:~:) k)) ((:*:) k m f) Source # | |
Bifunctor1 (k, l) l k ((:*:) l k) Source # | |
Traversable1 (k1, k) k ((:*:) k k1 f) Source # | |
Foldable1 (k1, k) k ((:*:) k k1 f) Source # | |
Functor1 (k1, k) k ((:*:) k k1 f) Source # | |
(Witness p q (f a), Witness s t (g b), (~) (k, l) x ((#) k l a b)) => Witness (p, s) (q, t) ((:*:) l k f g x) Source # | |
(DecEquality k f, DecEquality l g) => DecEquality (k, l) ((:*:) l k f g) Source # | |
(Show1 k f, Show1 l g) => Show1 (k, l) ((:*:) l k f g) Source # | |
(Ord1 k f, Ord1 l g) => Ord1 (k, l) ((:*:) l k f g) Source # | |
(Eq1 k f, Eq1 l g) => Eq1 (k, l) ((:*:) l k f g) Source # | |
((~) (k, l) p ((#) k l a b), Known k f a, Known l g b) => Known (k, l) ((:*:) l k f g) p Source # | |
(Eq (f (Fst k l p)), Eq (g (Snd k l p))) => Eq ((:*:) l k f g p) Source # | |
(Ord (f (Fst k l p)), Ord (g (Snd k l p))) => Ord ((:*:) l k f g p) Source # | |
((~) (k, l) p ((#) k l a b), Read (f a), Read (g b)) => Read ((:*:) l k f g p) Source # | |
(Show (f (Fst k l p)), Show (g (Snd k l p))) => Show ((:*:) l k f g p) Source # | |
type WitnessC (p, s) (q, t) ((:*:) l k f g x) Source # | |
type KnownC (k, l) ((:*:) l k f g) p Source # | |
uncurryPar :: (forall a b. p ~ (a # b) => f a -> g b -> r) -> (f :*: g) p -> r Source #
exConjEq :: (TestEquality f, TestEquality g) => (f :&&: g) -> (f :&&: g) -> Maybe (f :&&: f, g :&&: g) Source #