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.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 
HTraversable k [k] (Sum k) Source 
HFoldable k [k] (Sum k) Source 
HFunctor k [k] (Sum k) Source 
HIxTraversable [k] k (Index k) (Sum k) Source 
HIxFoldable [k] k (Index k) (Sum k) Source 
HIxFunctor [k] k (Index k) (Sum k) 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