packages feed

hset 0.0.1 → 0.0.2

raw patch · 4 files changed

+39/−12 lines, 4 filesdep +mtldep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: mtl

Dependency ranges changed: base

API changes (from Hackage documentation)

- Data.HSet: instance (i ~ Index e els, 'S i ~ Index e (e1 : els), HGet els e i) => HGet (e1 : els) e ('S i)
- Data.HSet: instance HGet (e : els) e 'Z
+ Data.HSet: 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)
+ Data.HSet: instance Data.HSet.HGet (e : els) e 'Data.HSet.TypeLevel.Z
+ Data.HSet.TypeLevel: S :: Nat -> Nat
+ Data.HSet.TypeLevel: Z :: Nat
+ Data.HSet.TypeLevel: data Nat
- Data.HSet: HSNil :: HSet []
+ Data.HSet: HSNil :: HSet '[]
- Data.HSet: class i ~ (Index e els) => HGet els e i
+ Data.HSet: class (i ~ (Index e els)) => HGet els e i

Files

CHANGELOG.md view
@@ -2,3 +2,7 @@  ## 0.0.1 The first compilable and working version++## 0.0.2+### Added+* Add `hask` to read from MonadReaer
hset.cabal view
@@ -1,5 +1,5 @@ name:                hset-version:             0.0.1+version:             0.0.2 synopsis:            Primitive heterogenous read-only set license:             BSD3 license-file:        LICENSE@@ -18,10 +18,16 @@ library   default-language:    Haskell2010   hs-source-dirs:      src+   exposed-modules:     Data.HSet+                     , Data.HSet.TypeLevel+   build-depends:       base >=4.6 && < 5+                     , mtl -  default-extensions: DataKinds+  default-extensions: ConstraintKinds+                    , DataKinds+                    , FlexibleContexts                     , FlexibleInstances                     , GADTs                     , KindSignatures
src/Data/HSet.hs view
@@ -3,16 +3,8 @@        , HGet(..)        ) where -data Nat = Z | S Nat--type family Elem (typ :: *) (typs :: [*]) :: Bool where-    Elem typ '[]             = 'False-    Elem typ (typ ': typs)   = 'True-    Elem typ1 (typ2 ': typs) = Elem typ1 typs--type family Index (typ :: *) (typs :: [*]) :: Nat where-  Index t (t ': ts) = 'Z-  Index t (tt ': ts) = 'S (Index t ts)+import Control.Monad.Reader+import Data.HSet.TypeLevel  -- | Heterogeneous set (list) of elements with unique types. Usefull -- with MonadReader@@ -20,6 +12,7 @@   HSNil  :: HSet '[]   HSCons :: ('False ~ (Elem elem elems)) => elem -> HSet elems -> HSet (elem ': elems) + class (i ~ (Index e els)) => HGet els e i where   -- | Get any data from HSet for you   hget :: HSet els -> e@@ -30,7 +23,14 @@ instance (i ~ (Index e els), ('S i) ~ (Index e (e1 ': els)), HGet els e i) => HGet (e1 ': els) e ('S i) where   hget (HSCons _ els) = hget els +type Contains els e = HGet els e (Index e els) +hask :: (MonadReader (HSet els) m, Contains els e) => m e+hask = do+  h <- ask+  return $ hget h++ ---------------------------------------------------------------- -- Tests: if this is compilable then tests done trollface.jpg -- @@ -52,3 +52,8 @@  funFloat :: Float funFloat = hget fun++this :: (Double, Float)+this =+  let h = (,) <$> hask <*> hask+  in runReader h fun
+ src/Data/HSet/TypeLevel.hs view
@@ -0,0 +1,12 @@+module Data.HSet.TypeLevel where++data Nat = Z | S Nat++type family Elem (typ :: *) (typs :: [*]) :: Bool where+    Elem typ '[]             = 'False+    Elem typ (typ ': typs)   = 'True+    Elem typ1 (typ2 ': typs) = Elem typ1 typs++type family Index (typ :: *) (typs :: [*]) :: Nat where+  Index t (t ': ts) = 'Z+  Index t (tt ': ts) = 'S (Index t ts)