-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Primitive heterogenous read-only set -- @package hset @version 0.1.2 module Data.HSet.TypeLevel data Nat Z :: Nat S :: Nat -> Nat -- | Calculates to 'True if first type argument contained in second list -- element -- | Calculates to Nat kinded type describing the index of first argument -- in second argument module Data.HSet.Labeled newtype Labeled (label :: k) (typ :: *) Labeled :: typ -> Labeled unLabeled :: Labeled -> typ mkLabel :: proxy label -> e -> Labeled label e instance Typeable Labeled instance Show typ => Show (Labeled label typ) instance Eq typ => Eq (Labeled label typ) instance Ord typ => Ord (Labeled label typ) module Data.HSet -- | 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. data HSet (elems :: [*]) HSNil :: HSet [] HSCons :: !elem -> !(HSet elems) -> HSet (elem : elems) -- | Typeclass for sets and elements. class i ~ (Index e els) => HGet els e i hget :: HGet els e i => HSet els -> e -- | Helper typefamily to derive that second argument contained in list of -- first argument and we can perform hget from set. type Contains els e = HGet els e (Index e els) hask :: (MonadReader (HSet els) m, Contains els e) => m e -- |
--   >>> 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
--   
hgetLabeled :: Contains els (Labeled label e) => proxy label -> HSet els -> e haskLabeled :: (Contains els (Labeled label e), MonadReader (HSet els) m, Applicative m) => proxy label -> m e instance Typeable HSet instance (i ~ Index e els, 'S i ~ Index e (e1 : els), HGet els e i) => HGet (e1 : els) e ('S i) instance HGet (e : els) e 'Z instance (Ord e, Ord (HSet els)) => Ord (HSet (e : els)) instance Ord (HSet '[]) instance (Eq e, Eq (HSet els)) => Eq (HSet (e : els)) instance Eq (HSet '[]) instance (Show e, Show (HSet els)) => Show (HSet (e : els)) instance Show (HSet '[])