union-map-0.0: Heterogeneous map by open unions.

Safe HaskellNone
LanguageHaskell2010

Data.OpenUnion.Internal

Synopsis

Documentation

data Union as where Source

Constructors

Single :: a -> Union (a : as) 
Union :: Union as -> Union (a : as) 
Exhausted :: Union [] -> Union [] 

Instances

All Show r => Show (Union r) 

exhaust :: Union [] -> a Source

type family All ca as :: Constraint Source

Instances

type All ca ([] *) = () 
type All ca ((:) * a as) = (ca a, All ca as) 

(||>) :: (a -> r) -> (Union as -> r) -> Union (a : as) -> r infixr 2 Source

data Position a as where Source

Constructors

Zero :: Position a (a : as) 
Succ :: Position a as -> Position a (b : as) 

class Member a as | as -> a where Source

Methods

position :: Position a as Source

Instances

Member a as => Member a ((:) * b as) 
Member a ((:) * a as) 

liftU :: forall a as. Member a as => a -> Union as Source

Lift a value into a Union.

picked :: forall a as f. (Applicative f, Member a as) => (a -> f a) -> Union as -> f (Union as) Source

Traversal for a specific element.

retractU :: Member a as => Union as -> Maybe a Source

Retrieve the value from a Union.

hoistU :: Member a as => (a -> a) -> Union as -> Union as Source

Lift a function into Union.

newtype Id a Source

Instead of Identity.

Constructors

Id 

Fields

getId :: a
 

Instances

class Include as bs where Source

Methods

reunion :: Union as -> Union bs Source

Instances

Include ([] *) bs 
(Member a bs, Include as bs) => Include ((:) * a as) bs 

type (∈) a as = Member a as infix 4 Source

type (⊆) as bs = Include as bs infix 4 Source

type (=) as bs = (Include as bs, Include bs as) infix 4 Source