Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Data.HSet.Get
Synopsis
- 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 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)
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