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.Combinator

Description

A collection of simple type combinators, such as Identity I, Constant C, Compose '(:.:)', left unnest LL, right unnest RR, the S Combinator SS, etc.

Documentation

data f :.: g :: k -> * where infixr 6 Source

Constructors

Comp :: f (g a) -> (f :.: g) a 

Fields

getComp :: f (g a)
 

Instances

Witness p q (f (g a)) => Witness p q ((:.:) k k f g a) Source 
Eq (f (g a)) => Eq ((:.:) k k f g a) Source 
Ord (f (g a)) => Ord ((:.:) k k f g a) Source 
Show (f (g a)) => Show ((:.:) k k f g a) Source 
type WitnessC p q ((:.:) k k1 f g a) = Witness p q (f (g a)) Source 

data f :..: g :: k -> l -> * where infixr 6 Source

Constructors

Comp2 :: f (g a b) -> (f :..: g) a b 

Instances

Witness p q (f (g a b)) => Witness p q ((:..:) k k k f g a b) Source 
Eq (f (g a b)) => Eq ((:..:) k k k f g a b) Source 
Ord (f (g a b)) => Ord ((:..:) k k k f g a b) Source 
Show (f (g a b)) => Show ((:..:) k k k f g a b) Source 
type WitnessC p q ((:..:) k k1 k2 f g a b) = Witness p q (f (g a b)) Source 

data IT :: (k -> *) -> k -> * where Source

Constructors

IT :: f a -> IT f a 

Fields

getIT :: f a
 

Instances

HTraversable k k (IT k) Source 
HFoldable k k (IT k) Source 
HFunctor k k (IT k) Source 
Witness p q (f a) => Witness p q (IT k f a) Source 
Eq (f a) => Eq (IT k f a) Source 
Num (f a) => Num (IT k f a) Source 
Ord (f a) => Ord (IT k f a) Source 
Show (f a) => Show (IT k f a) Source 
type WitnessC p q (IT k f a) = Witness p q (f a) Source 

data I :: * -> * where Source

Constructors

I :: a -> I a 

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 LL a f g Source

Constructors

LL 

Fields

getLL :: f (g a)
 

Instances

Witness p q (f (g a)) => Witness p q (LL k k a f g) Source 
HTraversable k (k -> k) (LL k k a) Source 
HFoldable k (k -> k) (LL k k a) Source 
HFunctor k (k -> k) (LL k k a) Source 
Eq (f (g a)) => Eq (LL k k a f g) Source 
Ord (f (g a)) => Ord (LL k k a f g) Source 
Show (f (g a)) => Show (LL k k a f g) Source 
type WitnessC p q (LL k k1 a f g) = Witness p q (f (g a)) Source 

newtype RR g f a Source

Constructors

RR 

Fields

getRR :: f (g a)
 

Instances

HTraversable k k (RR k k g) Source 
HFoldable k k (RR k k g) Source 
HFunctor k k (RR k k g) Source 
Witness p q (f (g a)) => Witness p q (RR k k g f a) Source 
Eq (f (g a)) => Eq (RR k k g f a) Source 
Ord (f (g a)) => Ord (RR k k g f a) Source 
Show (f (g a)) => Show (RR k k g f a) Source 
type WitnessC p q (RR k k1 g f a) = Witness p q (f (g a)) Source 

newtype SS f g :: k -> * where Source

Constructors

SS :: f a (g a) -> SS f g a 

Fields

getSS :: f a (g a)
 

Instances

Witness p q (f a (g a)) => Witness p q (SS k k f g a) Source 
Eq (f a (g a)) => Eq (SS k k f g a) Source 
Ord (f a (g a)) => Ord (SS k k f g a) Source 
Show (f a (g a)) => Show (SS k k f g a) Source 
type WitnessC p q (SS k k1 f g a) = Witness p q (f a (g a)) Source 

data CT :: * -> (k -> *) -> l -> * where Source

Constructors

CT :: r -> CT r f a 

Fields

getCT :: r
 

Instances

HTraversable k k (CT k k r) Source 
HFoldable k k (CT k k r) Source 
HFunctor k k (CT k k r) Source 
Witness p q r => Witness p q (CT k k r f a) Source 
Eq r => Eq (CT k k r f a) Source 
Num r => Num (CT k k r f a) Source 
Ord r => Ord (CT k k r f a) Source 
Show r => Show (CT k k r f a) Source 
type WitnessC p q (CT k k1 r f a) = Witness p q r Source 

data C :: * -> k -> * where Source

Constructors

C :: r -> C r a 

Fields

getC :: r
 

Instances

Witness p q r => Witness p q (C k r a) 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 
Show r => Show (C k r a) Source 
type WitnessC p q (C k r a) = Witness p q r 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 
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 
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 

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 
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 
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 

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

newtype Cur p :: k -> l -> * where Source

Constructors

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

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 
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 

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 
(Known k1 (p a) b, (~) ((,) k k1) q ((#) k k1 a b)) => Known ((,) k k) (Uncur k k p) q 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 

newtype Cur3 p :: k -> l -> m -> * where Source

Constructors

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

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 
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 

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 
(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 
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