union-0.1.1.0: Extensible type-safe unions

Safe HaskellNone
LanguageHaskell2010

Data.Union

Description

Extensible type-safe unions.

Synopsis

Documentation

data Union f as where Source

A union is parameterized by a universe u, an interpretation f and a list of labels as. The labels of the union are given by inhabitants of the kind u; the type of values at any label a :: u is given by its interpretation f a :: *.

Constructors

This :: !(f a) -> Union f (a : as) 
That :: !(Union f as) -> Union f (a : as) 

Instances

(Eq (f a), Eq (Union k f as)) => Eq (Union k f ((:) k a as)) Source 
Eq (Union k f ([] k)) Source 
(Ord (f a), Ord (Union k f as)) => Ord (Union k f ((:) k a as)) Source 
Ord (Union k f ([] k)) Source 
(Show (f a), Show (Union k f as)) => Show (Union k f ((:) k a as)) Source 
Show (Union k f ([] k)) Source 
((~) (* -> *) f Identity, Exception a, Typeable [*] as, Exception (Union * f as)) => Exception (Union * f ((:) * a as)) Source 
(~) (* -> *) f Identity => Exception (Union * f ([] *)) Source 
(NFData (f a), NFData (Union k f as)) => NFData (Union k f ((:) k a as)) Source 
NFData (Union k f ([] k)) Source 

union :: (Union f as -> c) -> (f a -> c) -> Union f (a : as) -> c Source

Case analysis for unions.

absurdUnion :: Union f `[]` -> a Source

Since a union with an empty list of labels is uninhabited, we can recover any type from it.

umap :: (forall a. f a -> g a) -> Union f as -> Union g as Source

_This :: Prism (Union f (a : as)) (Union f (b : as)) (f a) (f b) Source

_That :: Prism (Union f (a : as)) (Union f (a : bs)) (Union f as) (Union f bs) Source

class (i ~ RIndex a as) => UElem a as i where Source

Minimal complete definition

uprism | ulift, umatch

Methods

uprism :: Prism' (Union f as) (f a) Source

ulift :: f a -> Union f as Source

umatch :: Union f as -> Maybe (f a) Source

Instances

UElem k a ((:) k a as) Z Source 
((~) Nat (RIndex k a ((:) k b as)) (S i), UElem k a as i) => UElem k a ((:) k b as) (S i) Source 

class (is ~ RImage as bs) => USubset as bs is where Source

Minimal complete definition

usubset | urelax, urestrict

Methods

usubset :: Prism' (Union f bs) (Union f as) Source

urelax :: Union f as -> Union f bs Source

urestrict :: Union f bs -> Maybe (Union f as) Source

Instances

USubset k ([] k) bs ([] Nat) Source 
(UElem k a bs i, USubset k as bs is) => USubset k ((:) k a as) bs ((:) Nat i is) Source 

openUnion :: forall a as. UElem a as (RIndex a as) => Prism' (OpenUnion as) a Source