Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.HSet.Get
- class i ~ IndexOf e els => HGet els e i | els i -> e where
- type HGettable els e = HGet els e (IndexOf e els)
- type family AllHGettable (els :: [k]) (subels :: [k]) :: Constraint where ...
- hgetTagged :: forall proxy label e els. HGettable els (Tagged label e) => proxy label -> HSet els -> e
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
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