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

Description

Sum is a type combinators for representing disjoint sums of indices (as :: [k]) of a single functor @(f :: k -> *). Contrast to the many-functors-one-index FSum

Synopsis

Documentation

data Sum f :: [k] -> * where Source

Constructors

InL :: !(f a) -> Sum f (a :< as) 
InR :: !(Sum f as) -> Sum f (a :< as) 

Instances

(Witness p q (f a), Witness p q (Sum k f ((:<) k b as))) => Witness p q (Sum k f ((:<) k a ((:<) k b as))) Source 
Witness p q (f a) => Witness p q (Sum k f ((:) k a ([] k))) Source 
Traversable1 k [k] (Sum k) Source 
Foldable1 k [k] (Sum k) Source 
Functor1 k [k] (Sum k) Source 
IxTraversable1 [k] k (Index k) (Sum k) Source 
IxFoldable1 [k] k (Index k) (Sum k) Source 
IxFunctor1 [k] k (Index k) (Sum k) Source 
Read1 k f => Read1 [k] (Sum k f) Source 
Show1 k f => Show1 [k] (Sum k f) Source 
Ord1 k f => Ord1 [k] (Sum k f) Source 
Eq1 k f => Eq1 [k] (Sum k f) Source 
ListC ((<$>) Constraint * Eq ((<$>) * k f as)) => Eq (Sum k f as) Source 
(ListC ((<$>) Constraint * Eq ((<$>) * k f as)), ListC ((<$>) Constraint * Ord ((<$>) * k f as))) => Ord (Sum k f as) Source 
ListC ((<$>) Constraint * Show ((<$>) * k f as)) => Show (Sum k f as) Source 
type WitnessC p q (Sum k f ((:<) k a ((:<) k b as))) = (Witness p q (f a), Witness p q (Sum k f ((:<) k b as))) Source 
type WitnessC p q (Sum k f ((:) k a ([] k))) = Witness p q (f a) Source 

nilSum :: Sum f Ø -> Void Source

There are no possible values of the type Sum f Ø.

decomp :: Sum f (a :< as) -> Either (f a) (Sum f as) Source

injectSum :: Index as a -> f a -> Sum f as Source

inj :: a as => f a -> Sum f as Source

prj :: a as => Sum f as -> Maybe (f a) Source

index :: Index as a -> Sum f as -> Maybe (f a) Source

elimSum :: (forall x xs. f x -> p (x :< xs)) -> (forall x xs. Index as x -> p xs -> p (x :< xs)) -> Sum f as -> p as Source