name: type-level-sets version: 0.8.7.0 x-revision: 1 synopsis: Type-level sets and finite maps (with value-level counterparts) description: This package provides type-level sets (no duplicates, sorted to provide a normal form) via 'Set' and type-level finite maps via 'Map', with value-level counterparts. . Described in the paper \"Embedding effect systems in Haskell\" by Dominic Orchard and Tomas Petricek (Haskell Symposium, 2014). This version now uses Quicksort to normalise the representation. . Here is a brief example for finite maps: . > > import Data.Type.Map > > -- Specify how to combine duplicate key-value pairs for Int values > type instance Combine Int Int = Int > instance Combinable Int Int where > combine x y = x + y > > foo :: Map '["x" :-> Int, "z" :-> Bool, "w" :-> Int] > foo = Ext (Var :: (Var "x")) 2 > \$ Ext (Var :: (Var "z")) True > \$ Ext (Var :: (Var "w")) 5 > \$ Empty > > bar :: Map '["y" :-> Int, "w" :-> Int] > bar = Ext (Var :: (Var "y")) 3 > \$ Ext (Var :: (Var "w")) 1 > \$ Empty > > -- foobar :: Map '["w" :-> Int, "x" :-> Int, "y" :-> Int, "z" :-> Bool] > foobar = foo `union` bar . The 'Map' type for 'foobar' here shows the normalised form (sorted with no duplicates). The type signatures is commented out as it can be infered. Running the example we get: . > >>> foobar > {w :-> 6, x :-> 2, y :-> 3, z :-> True} . Thus, we see that the values for \"w\" are added together. For sets, here is an example: . > import GHC.TypeLits > import Data.Type.Set > type instance Cmp (Natural n) (Natural m) = CmpNat n m > > data Natural (a :: Nat) where > Z :: Natural 0 > S :: Natural n -> Natural (n + 1) > > -- foo :: Set '[Natural 0, Natural 1, Natural 3] > foo = asSet \$ Ext (S Z) (Ext (S (S (S Z))) (Ext Z Empty)) > > -- bar :: Set '[Natural 1, Natural 2] > bar = asSet \$ Ext (S (S Z)) (Ext (S Z) (Ext (S Z) Empty)) > > -- foobar :: Set '[Natural 0, Natural 1, Natural 2, Natural 3] > foobar = foo `union` bar . Note the types here are all inferred. . license: BSD3 license-file: LICENSE category: Type System, Data Structures copyright: 2013-16 University of Cambridge author: Dominic Orchard maintainer: Dominic Orchard stability: experimental build-type: Simple cabal-version: >= 1.6 tested-with: GHC >= 8.0.1 extra-source-files: example.hs, example2.hs source-repository head type: git location: https://github.com/dorchard/type-level-sets library hs-source-dirs: src exposed-modules: Data.Type.Set Data.Type.Map build-depends: base >= 4.9 && < 4.11, ghc-prim