# The type-level-sets package

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 |
---|---|

Dependencies | base (<5), ghc-prim [details] |

License | BSD3 |

Copyright | 2013-14 University of Cambridge |

Author | Dominic Orchard |

Maintainer | Dominic Orchard |

Stability | experimental |

Category | Type System, Data Structures |

Source repository | head: git clone https://github.com/dorchard/type-level-sets |

Uploaded | Thu Sep 11 14:46:21 UTC 2014 by DominicOrchard |

## Modules

*Data**Type*

[Index]

## Downloads

- type-level-sets-0.5.tar.gz [browse] (Cabal source package)
- Package description (included in the package)

#### Maintainers' corner

For package maintainers and hackage trustees