hset-2.2.0: Primitive list with elements of unique types.

Safe HaskellNone
LanguageHaskell2010

Data.HSet.Get

Synopsis

Documentation

class i ~ IndexOf e els => HGet els e i | els i -> e where #

Heterogeneous read arbitrarily element from hset

>>> let x = HSCons (10 :: Int) $ HSCons (20 :: Double) HSNil
>>> x
HSCons (10) (HSCons (20.0) (HSNil))
>>> hget x :: Int
10
>>> hget x :: Double
20.0

Note that hget takes specific element from list of uniquely typed elements depending on what type is required to be returned (return type polymorphism)

Minimal complete definition

hget

Methods

hget :: HSet els -> e #

Gets any data from HSet for you

Instances

HGet ((:) * e els) e Z # 

Methods

hget :: HSet ((* ': e) els) -> e #

((~) N (S i) (IndexOf * e ((:) * e1 els)), HGet els e i) => HGet ((:) * e1 els) e (S i) # 

Methods

hget :: HSet ((* ': e1) els) -> e #

type HGettable els e = HGet els e (IndexOf e els) #

Enables deriving of the fact that e is contained within els and it's safe to say that hget can be performed on this particular pair.

type family AllHGettable (els :: [k]) (subels :: [k]) :: Constraint where ... #

Reduces to (HGettable els e1, HGettable els e2, ..)

Equations

AllHGettable els '[] = () 
AllHGettable els (e ': subels) = (HGettable els e, AllHGettable els subels) 

hgetTagged :: forall proxy label e els. HGettable els (Tagged label e) => proxy label -> HSet els -> e #

>>> let y = HSCons (Tagged 10 :: Tagged "x" Int) $ HSCons (Tagged 20 :: Tagged "y" Int) HSNil
>>> y
HSCons (Tagged 10) (HSCons (Tagged 20) (HSNil))
>>> hgetTagged (Proxy :: Proxy "x") y :: Int
10
>>> hgetTagged (Proxy :: Proxy "y") y :: Int
20