hset-2.2.0: Primitive list with elements of unique types.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.HSet.Get

Synopsis

Documentation

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

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)

Methods

hget :: HSet els -> e Source #

Gets any data from HSet for you

Instances

Instances details
HGet (e ': els) e 'Z Source # 
Instance details

Defined in Data.HSet.Get

Methods

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

('S i ~ IndexOf e (e1 ': els), HGet els e i) => HGet (e1 ': els) e ('S i) Source # 
Instance details

Defined in Data.HSet.Get

Methods

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

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

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 ... Source #

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 Source #

>>> 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