Vault is a tiny library that provides a single data structure called vault.
A vault is a type-safe, persistent storage for values of arbitrary types. Like
IORef, I want to be able to store values of any type in it, but unlike
IORef, I want the storage space to behave like a persistent, first-class data structure, as appropriate for a purely functional language.
It is analogous to a bank vault, where you can access different bank boxes with different keys; hence the name.
In other words, a vault is an abstract data type with the following basic signature
data Key a data Vault newKey :: IO (Key a) empty :: Vault lookup :: Key a -> Vault -> Maybe a insert :: Key a -> a -> Vault -> Vault delete :: Key a -> Vault -> Vault
A few common functions for finite maps, like
union, are provided as well.
This library was created thanks to the feedback on my blog post Vault - a persistent store for values of arbitrary types.
The whole thing is available on hackage, so you just have to type
cabal update cabal install vault
Changelog for the
- Add support for GHC type roles extension, using the
0.3.0.4 — Bump upper version bound for the
0.3.0.3 — Bump upper version bound for the
0.3.0.2 — Fix tarball.
0.3.0.1 — Use CPP to reduce code duplication.
- Split modules into Lazy and Strict variants, no default choice.
- Add Hashable instance to
Data.Unique.Reallyfor all implementations.