type-combinators-0.1.2.1: A collection of data types for type-level programming

CopyrightCopyright (C) 2015 Kyle Carter
LicenseBSD3
MaintainerKyle Carter <kylcarte@indiana.edu>
Stabilityexperimental
PortabilityRankNTypes
Safe HaskellNone
LanguageHaskell2010

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

Constructors

(:&:) :: !(f a) -> !(g a) -> (f :&: g) a infixr 5 

Instances

HBifunctor k k k ((:&:) k) Source 
HTraversable k k ((:&:) k f) Source 
HFoldable k k ((:&:) k f) Source 
HFunctor k k ((:&:) k f) Source 
DecEquality k f => DecEquality 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 
(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 

fanFst :: (f :&: g) a -> f a Source

fanSnd :: (f :&: g) a -> g a Source

uncurryFan :: (f a -> g a -> r) -> (f :&: g) a -> r Source

curryFan :: ((f :&: g) a -> r) -> f a -> g a -> r Source

data f :*: g :: (k, l) -> * where infixr 5 Source

Constructors

(:*:) :: !(f a) -> !(g b) -> (f :*: g) (a # b) infixr 5 

Instances

HBifunctor k k ((,) k k) ((:*:) k k) Source 
HTraversable k ((,) k k) ((:*:) k k f) Source 
HFoldable k ((,) k k) ((:*:) k k f) Source 
HFunctor 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 
((~) ((,) 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 
(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 

parFst :: (f :*: g) p -> f (Fst p) Source

parSnd :: (f :*: g) p -> g (Snd p) Source

uncurryPar :: (forall a b. (p ~ (a # b)) => f a -> g b -> r) -> (f :*: g) p -> r Source

curryPar :: ((f :*: g) (a # b) -> r) -> f a -> g b -> r Source

_fst :: ((a # b) :~: (c # d)) -> a :~: c Source

_snd :: ((a # b) :~: (c # d)) -> b :~: d Source