Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
- data HSet elems where
- class (i ~ Index e els) => HGet els e i where
- type Contains els e = HGet els e (Index e els)
- hask :: (MonadReader (HSet els) m, Contains els e) => m e
- hgetLabeled :: forall proxy label e els. Contains els (Labeled label e) => proxy label -> HSet els -> e
- haskLabeled :: forall proxy label e els m. (Contains els (Labeled label e), MonadReader (HSet els) m, Applicative m) => proxy label -> m e
- module Data.HSet.Labeled
Documentation
Heterogeneous set (list) of elements with unique types. Usefull with MonadReader.
>>>
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 how hget
just takes specific element from list of uniqly typed
elements depending on what type is required to be returned.
type Contains els e = HGet els e (Index e els) Source
Helper typefamily to derive that second argument contained in
list of first argument and we can perform hget
from set.
hask :: (MonadReader (HSet els) m, Contains els e) => m e Source
Work with Labeled
elements
hgetLabeled :: forall proxy label e els. Contains els (Labeled label e) => proxy label -> HSet els -> e Source
>>>
let y = HSCons (Labeled 10 :: Labeled "x" Int) $ HSCons (Labeled 20 :: Labeled "y" Int) HSNil
>>>
y
HSCons (Labeled {unLabeled = 10}) (HSCons (Labeled {unLabeled = 20}) (HSNil))
>>>
hgetLabeled (Proxy :: Proxy "x") y :: Int
10
>>>
hgetLabeled (Proxy :: Proxy "y") y :: Int
20
haskLabeled :: forall proxy label e els m. (Contains els (Labeled label e), MonadReader (HSet els) m, Applicative m) => proxy label -> m e Source
Reexports
module Data.HSet.Labeled