Cabal revisions of type-level-sets-0.8.5.0
Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.
revision 1
-name: type-level-sets-version: 0.8.5.0-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 <http://www.cl.cam.ac.uk/~dao29/publ/haskell14-effects.pdf> (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 < 5,- ghc-prim+name: type-level-sets +version: 0.8.5.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 <http://www.cl.cam.ac.uk/~dao29/publ/haskell14-effects.pdf> (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.7 && < 5, + ghc-prim