type-combinators-0.2.0.0: 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.Combinator

Description

A collection of simple type combinators, such as Identity I, Constant C, Compose '(:.:)', Currying/Uncurrying, etc.

Documentation

newtype (f :.: g) a Source

Constructors

Comp 

Fields

getComp :: f (g a)
 

Instances

Witness p q (f (g a)) => Witness p q ((:.:) k k f g a) Source 
TestEquality k1 f => TestEquality k ((:.:) k k f g) Source 
Show1 k1 f => Show1 k ((:.:) k k f g) Source 
Ord1 k1 f => Ord1 k ((:.:) k k f g) Source 
Eq1 k1 f => Eq1 k ((:.:) k k f g) Source 
TestEquality k1 f => TestEquality1 (k -> k) k ((:.:) k k f) Source 
Eq (f (g a)) => Eq ((:.:) l k f g a) Source 
Ord (f (g a)) => Ord ((:.:) l k f g a) Source 
Read (f (g a)) => Read ((:.:) l k f g a) Source 
Show (f (g a)) => Show ((:.:) l k f g a) Source 
type WitnessC p q ((:.:) k k1 f g a) = Witness p q (f (g a)) Source 

newtype I a Source

Constructors

I 

Fields

getI :: a
 

Instances

Monad I Source 
Functor I Source 
Applicative I Source 
Foldable I Source 
Traversable I Source 
Witness p q a => Witness p q (I a) Source 
Eq a => Eq (I a) Source 
Num a => Num (I a) Source 
Ord a => Ord (I a) Source 
Show a => Show (I a) Source 
type WitnessC p q (I a) = Witness p q a Source 

newtype C r a Source

Constructors

C 

Fields

getC :: r
 

Instances

Witness p q r => Witness p q (C k r a) Source 
Read r => Read1 k (C k r) Source 
Show r => Show1 k (C k r) Source 
Ord r => Ord1 k (C k r) Source 
Eq r => Eq1 k (C k r) Source 
Functor (C * r) Source 
Foldable (C * r) Source 
Traversable (C * r) Source 
Eq r => Eq (C k r a) Source 
Num r => Num (C k r a) Source 
Ord r => Ord (C k r a) Source 
Read r => Read (C k r a) Source 
Show r => Show (C k r a) Source 
type WitnessC p q (C k r a) = Witness p q r Source 

mapC :: (r -> s) -> C r a -> C s b Source

newtype Flip p b a Source

Constructors

Flip 

Fields

getFlip :: p a b
 

Instances

Witness p q (f a b) => Witness p q (Flip k k f b a) Source 
TestEquality1 k k1 p => TestEquality k (Flip k k p b) Source 
Known k1 (p a) b => Known k (Flip k k p b) a Source 
Eq (p a b) => Eq (Flip k k p b a) Source 
Ord (p a b) => Ord (Flip k k p b a) Source 
Read (p a b) => Read (Flip k k p b a) Source 
Show (p a b) => Show (Flip k k p b a) Source 
type WitnessC p q (Flip k k1 f b a) = Witness p q (f a b) Source 
type KnownC k (Flip k k1 p b) a = Known k1 (p a) b Source 

flipTestEquality1 :: TestEquality (p c) => Flip p a c -> Flip p b c -> Maybe (a :~: b) Source

mapFlip :: (f a b -> g c d) -> Flip f b a -> Flip g d c Source

newtype Cur p a b Source

Constructors

Cur 

Fields

getCur :: p (a # b)
 

Instances

Witness q r (p ((#) k k1 a b)) => Witness q r (Cur k k p a b) Source 
Known ((,) k1 k) p ((#) k1 k a b) => Known k (Cur k k p a) b Source 
Eq (p ((#) k k1 a b)) => Eq (Cur k k p a b) Source 
Ord (p ((#) k k1 a b)) => Ord (Cur k k p a b) Source 
Read (p ((#) k k1 a b)) => Read (Cur k k p a b) Source 
Show (p ((#) k k1 a b)) => Show (Cur k k p a b) Source 
type WitnessC q r (Cur k k1 p a b) = Witness q r (p ((#) k k1 a b)) Source 
type KnownC k (Cur k1 k p a) b = Known ((,) k1 k) p ((#) k1 k a b) Source 

mapCur :: (p `(a, b)` -> q `(c, d)`) -> Cur p a b -> Cur q c d Source

data Uncur p :: (k, l) -> * where Source

Constructors

Uncur :: p a b -> Uncur p (a # b) 

Fields

getUncur :: p a b
 

Instances

(Witness r s (p a b), (~) ((,) k k1) q ((#) k k1 a b)) => Witness r s (Uncur k k p q) Source 
Read2 k k1 p => Read1 ((,) k k) (Uncur k k p) Source 
(Known k1 (p a) b, (~) ((,) k k1) q ((#) k k1 a b)) => Known ((,) k k) (Uncur k k p) q Source 
Eq (p (Fst k k1 x) (Snd k1 k x)) => Eq (Uncur k k p x) Source 
Ord (p (Fst k k1 x) (Snd k1 k x)) => Ord (Uncur k k p x) Source 
((~) ((,) k k1) x ((#) k k1 a b), Read (p a b)) => Read (Uncur k k p x) Source 
Show (p (Fst k k1 x) (Snd k1 k x)) => Show (Uncur k k p x) Source 
type WitnessC r s (Uncur k k1 p q) = Witness r s (p (Fst k k1 q) (Snd k1 k q)) Source 
type KnownC ((,) k k1) (Uncur k k1 p) q = Known k1 (p (Fst k k1 q)) (Snd k1 k q) Source 

mapUncur :: (p (Fst a) (Snd a) -> q b c) -> Uncur p a -> Uncur q `(b, c)` Source

newtype Cur3 p a b c Source

Constructors

Cur3 

Fields

getCur3 :: p `(a, b, c)`
 

Instances

Witness q r (p ((,,) k k1 k2 a b c)) => Witness q r (Cur3 k k k p a b c) Source 
Known ((,,) k1 k2 k) p ((,,) k1 k2 k a b c) => Known k (Cur3 k k k p a b) c Source 
Eq (p ((,,) k k1 k2 a b c)) => Eq (Cur3 k k k p a b c) Source 
Ord (p ((,,) k k1 k2 a b c)) => Ord (Cur3 k k k p a b c) Source 
Read (p ((,,) k k1 k2 a b c)) => Read (Cur3 k k k p a b c) Source 
Show (p ((,,) k k1 k2 a b c)) => Show (Cur3 k k k p a b c) Source 
type WitnessC q r (Cur3 k k1 k2 p a b c) = Witness q r (p ((,,) k k1 k2 a b c)) Source 
type KnownC k (Cur3 k1 k2 k p a b) c = Known ((,,) k1 k2 k) p ((,,) k1 k2 k a b c) Source 

mapCur3 :: (p `(a, b, c)` -> q `(d, e, f)`) -> Cur3 p a b c -> Cur3 q d e f Source

data Uncur3 p :: (k, l, m) -> * where Source

Constructors

Uncur3 :: p a b c -> Uncur3 p `(a, b, c)` 

Fields

getUncur3 :: p a b c
 

Instances

(Witness r s (p a b c), (~) ((,,) k k1 k2) q ((,,) k k1 k2 a b c)) => Witness r s (Uncur3 k k k p q) Source 
Read3 k k1 k2 p => Read1 ((,,) k k k) (Uncur3 k k k p) Source 
(Known k2 (p a b) c, (~) ((,,) k k1 k2) q ((,,) k k1 k2 a b c)) => Known ((,,) k k k) (Uncur3 k k k p) q Source 
Eq (p (Fst3 k k1 k2 x) (Snd3 k1 k k2 x) (Thd3 k2 k k1 x)) => Eq (Uncur3 k k k p x) Source 
Ord (p (Fst3 k k1 k2 x) (Snd3 k1 k k2 x) (Thd3 k2 k k1 x)) => Ord (Uncur3 k k k p x) Source 
((~) ((,,) k k1 k2) x ((,,) k k1 k2 a b c), Read (p a b c)) => Read (Uncur3 k k k p x) Source 
Show (p (Fst3 k k1 k2 x) (Snd3 k1 k k2 x) (Thd3 k2 k k1 x)) => Show (Uncur3 k k k p x) Source 
type WitnessC r s (Uncur3 k k1 k2 p q) = Witness r s (p (Fst3 k k1 k2 q) (Snd3 k1 k k2 q) (Thd3 k2 k k1 q)) Source 
type KnownC ((,,) k k1 k2) (Uncur3 k k1 k2 p) q = Known k2 (p (Fst3 k k1 k2 q) (Snd3 k1 k k2 q)) (Thd3 k2 k k1 q) Source 

mapUncur3 :: (p (Fst3 x) (Snd3 x) (Thd3 x) -> q d e f) -> Uncur3 p x -> Uncur3 q `(d, e, f)` Source

newtype Join f a Source

Constructors

Join 

Fields

getJoin :: f a a
 

Instances

Witness p q (f a a) => Witness p q (Join k f a) Source 
Show2 k k f => Show1 k (Join k f) Source 
Ord2 k k f => Ord1 k (Join k f) Source 
Eq2 k k f => Eq1 k (Join k f) Source 
Known k (f a) a => Known k (Join k f) a Source 
Eq (f a a) => Eq (Join k f a) Source 
Ord (f a a) => Ord (Join k f a) Source 
Read (f a a) => Read (Join k f a) Source 
Show (f a a) => Show (Join k f a) Source 
type WitnessC p q (Join k f a) = Witness p q (f a a) Source 
type KnownC k (Join k f) a = Known k (f a) a Source 

mapJoin :: (f a a -> g b b) -> Join f a -> Join g b Source