type-combinators-0.1.0.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