hvect-0.1.0.0: Simple heterogeneous lists

Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.HVect

Synopsis

Documentation

data HVect ts where Source

Heterogeneous vector

Constructors

HNil :: HVect [] 
(:&:) :: t -> HVect ts -> HVect (t : ts) infixr 5 

Instances

(Eq (HVect ts), Eq t) => Eq (HVect ((:) * t ts)) 
Eq (HVect ([] *)) 
(Ord (HVect ts), Ord t) => Ord (HVect ((:) * t ts)) 
Ord (HVect ([] *)) 
(Show (HVect ts), Show t) => Show (HVect ((:) * t ts)) 
Show (HVect ([] *)) 

head :: HVect (t : ts) -> t Source

singleton :: a -> HVect `[a]` Source

type family HVectElim ts a :: * Source

Instances

type HVectElim ([] *) a = a 
type HVectElim ((:) * t ts) a = t -> HVectElim ts a 

type family Append as bs :: [*] Source

Instances

type Append ([] *) bs = bs 
type Append ((:) * a as) bs = (:) * a (Append as bs) 

(<++>) :: HVect as -> HVect bs -> HVect (Append as bs) infixr 5 Source

type family ReverseLoop as bs :: [*] Source

Instances

type ReverseLoop ([] *) bs = bs 
type ReverseLoop ((:) * a as) bs = ReverseLoop as ((:) * a bs) 

type Reverse as = ReverseLoop as [] Source

uncurry :: HVectElim ts a -> HVect ts -> a Source

data Rep ts where Source

Constructors

RNil :: Rep [] 
RCons :: Rep ts -> Rep (t : ts) 

class HasRep ts where Source

Methods

hasRep :: Rep ts Source

Instances

HasRep ([] *) 
HasRep ts => HasRep ((:) * t ts) 

curryExpl :: Rep ts -> (HVect ts -> a) -> HVectElim ts a Source

curry :: HasRep ts => (HVect ts -> a) -> HVectElim ts a Source

packExpl :: Rep ts -> (forall a. HVectElim ts a -> a) -> HVect ts Source

pack :: HasRep ts => (forall a. HVectElim ts a -> a) -> HVect ts Source