-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Primitive heterogenous read-only set -- -- Primitive heterogenous read-only set @package hset @version 0.1.0 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 forall (k :: BOX) (label :: k) typ. GHC.Classes.Ord typ => GHC.Classes.Ord (Data.HSet.Labeled.Labeled label typ) instance forall (k :: BOX) (label :: k) typ. GHC.Classes.Eq typ => GHC.Classes.Eq (Data.HSet.Labeled.Labeled label typ) instance forall (k :: BOX) (label :: k) typ. GHC.Show.Show typ => GHC.Show.Show (Data.HSet.Labeled.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 -- | Get any data from HSet for you 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) => proxy label -> m e instance GHC.Show.Show (Data.HSet.HSet '[]) instance (GHC.Show.Show e, GHC.Show.Show (Data.HSet.HSet els)) => GHC.Show.Show (Data.HSet.HSet (e : els)) instance GHC.Classes.Eq (Data.HSet.HSet '[]) instance (GHC.Classes.Eq e, GHC.Classes.Eq (Data.HSet.HSet els)) => GHC.Classes.Eq (Data.HSet.HSet (e : els)) instance GHC.Classes.Ord (Data.HSet.HSet '[]) instance (GHC.Classes.Ord e, GHC.Classes.Ord (Data.HSet.HSet els)) => GHC.Classes.Ord (Data.HSet.HSet (e : els)) instance Data.HSet.HGet (e : els) e 'Data.HSet.TypeLevel.Z instance (i ~ Data.HSet.TypeLevel.Index e els, 'Data.HSet.TypeLevel.S i ~ Data.HSet.TypeLevel.Index e (e1 : els), Data.HSet.HGet els e i) => Data.HSet.HGet (e1 : els) e ('Data.HSet.TypeLevel.S i)