type-level-sets: Type-level sets (with value-level counterparts and various operations)
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
This package provides type-level sets (no duplicates, sorted to provide a nomral form) via Set
,
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)
Here is a brief example:
import Data.Type.Set foo :: Set '["x" :-> Int, "z" :-> Int, "w" :-> Int] foo = Ext ((Var :: (Var "x")) :-> 2) $ Ext ((Var :: (Var "z")) :-> 4) $ Ext ((Var :: (Var "w")) :-> 5) $ Empty bar :: Set '["y" :-> Int, "w" :-> Int] bar = Ext ((Var :: (Var "y")) :-> 3) $ Ext ((Var :: (Var "w")) :-> 1) $ Empty -- foobar :: Set '["w" :-> Int, "x" :-> Int, "y" :-> Int, "z" :-> Int] foobar = foo `union` bar
The Set
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 [(Var :-> 1), (Var :-> 2), (Var :-> 3), (Var :-> 4)]
Thus, we see that the first value paired with the "w" variable is dropped.
Properties
Versions | 0.5, 0.5, 0.6, 0.6.1, 0.7, 0.8.0.0, 0.8.5.0, 0.8.6.0, 0.8.7.0, 0.8.9.0 |
---|---|
Change log | None available |
Dependencies | base (<5), ghc-prim [details] |
License | BSD-3-Clause |
Copyright | 2013-14 University of Cambridge |
Author | Dominic Orchard |
Maintainer | Dominic Orchard |
Category | Type System, Data Structures |
Source repo | head: git clone https://github.com/dorchard/type-level-sets |
Uploaded | by DominicOrchard at 2014-09-11T14:46:21Z |
Modules
[Index]
- Data
- Type
Downloads
- type-level-sets-0.5.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees