-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | a persistent store for values of arbitrary types
--
-- A vault is a persistent store for values of arbitrary types.
-- It's like having first-class access to the storage space behind
-- IORefs.
--
-- The data structure is analogous to a bank vault, where you can access
-- different bank boxes with different keys; hence the name.
--
-- Also provided is a locker type, representing a store for a
-- single element.
@package vault
@version 0.3.1.2
-- | An abstract interface to a unique symbol generator.
module Data.Unique.Really
-- | An abstract unique value. Values of type Unique may be compared
-- for equality and hashed into Int.
--
-- Note: Unlike the symbols from Data.Unique, the symbols from
-- this module do not become equal after reloads in the GHC interpreter!
data Unique
-- | Creates a new object of type Unique. The value returned will
-- not compare equal to any other value of type Unique returned by
-- previous calls to newUnique. There is no limit on the number of
-- times you may call this function.
newUnique :: IO Unique
-- | Hashes a Unique into an Int. Two Uniques may hash to the
-- same value, although in practice this is unlikely. The Int
-- returned makes a good hash key.
hashUnique :: Unique -> Int
instance GHC.Classes.Eq Data.Unique.Really.Unique
instance Data.Hashable.Class.Hashable Data.Unique.Really.Unique
-- | A persistent store for values of arbitrary types. Variant for the
-- ST monad.
--
-- The Vault type in this module is strict in the keys but lazy in
-- the values.
module Data.Vault.ST.Lazy
data Vault s
data Key s a
-- | The empty vault.
empty :: Vault s
-- | Create a new key for use with a vault.
newKey :: ST s (Key s a)
-- | Lookup the value of a key in the vault.
lookup :: Key s a -> Vault s -> Maybe a
-- | Insert a value for a given key. Overwrites any previous value.
insert :: Key s a -> a -> Vault s -> Vault s
-- | Adjust the value for a given key if it's present in the vault.
adjust :: (a -> a) -> Key s a -> Vault s -> Vault s
-- | Delete a key from the vault.
delete :: Key s a -> Vault s -> Vault s
-- | Merge two vaults (left-biased).
union :: Vault s -> Vault s -> Vault s
data Locker s
-- | Put a single value into a Locker.
lock :: Key s a -> a -> Locker s
-- | Retrieve the value from the Locker.
unlock :: Key s a -> Locker s -> Maybe a
instance GHC.Base.Semigroup (Data.Vault.ST.Lazy.Vault s)
instance GHC.Base.Monoid (Data.Vault.ST.Lazy.Vault s)
-- | A persistent store for values of arbitrary types.
--
-- The Vault type in this module is strict in the keys but lazy in
-- the values.
module Data.Vault.Lazy
-- | A persistent store for values of arbitrary types.
--
-- This variant is the simplest and creates keys in the IO monad.
-- See the module Data.Vault.ST if you want to use it with the
-- ST monad instead.
type Vault = Vault RealWorld
-- | Keys for the vault.
type Key = Key RealWorld
-- | The empty vault.
empty :: Vault
-- | Create a new key for use with a vault.
newKey :: IO (Key a)
-- | Lookup the value of a key in the vault.
lookup :: Key a -> Vault -> Maybe a
-- | Insert a value for a given key. Overwrites any previous value.
insert :: Key a -> a -> Vault -> Vault
-- | Adjust the value for a given key if it's present in the vault.
adjust :: (a -> a) -> Key a -> Vault -> Vault
-- | Delete a key from the vault.
delete :: Key a -> Vault -> Vault
-- | Merge two vaults (left-biased).
union :: Vault -> Vault -> Vault
-- | A persistent store for a single value.
type Locker = Locker RealWorld
-- | Put a single value into a Locker.
lock :: Key a -> a -> Locker
-- | Retrieve the value from the Locker.
unlock :: Key a -> Locker -> Maybe a
-- | A persistent store for values of arbitrary types. Variant for the
-- ST monad.
--
-- The Vault type in this module is strict in both keys and
-- values.
module Data.Vault.ST.Strict
data Vault s
data Key s a
-- | The empty vault.
empty :: Vault s
-- | Create a new key for use with a vault.
newKey :: ST s (Key s a)
-- | Lookup the value of a key in the vault.
lookup :: Key s a -> Vault s -> Maybe a
-- | Insert a value for a given key. Overwrites any previous value.
insert :: Key s a -> a -> Vault s -> Vault s
-- | Adjust the value for a given key if it's present in the vault.
adjust :: (a -> a) -> Key s a -> Vault s -> Vault s
-- | Delete a key from the vault.
delete :: Key s a -> Vault s -> Vault s
-- | Merge two vaults (left-biased).
union :: Vault s -> Vault s -> Vault s
data Locker s
-- | Put a single value into a Locker.
lock :: Key s a -> a -> Locker s
-- | Retrieve the value from the Locker.
unlock :: Key s a -> Locker s -> Maybe a
instance GHC.Base.Semigroup (Data.Vault.ST.Strict.Vault s)
instance GHC.Base.Monoid (Data.Vault.ST.Strict.Vault s)
-- | A persistent store for values of arbitrary types.
--
-- The Vault type in this module is strict in both keys and
-- values.
module Data.Vault.Strict
-- | A persistent store for values of arbitrary types.
--
-- This variant is the simplest and creates keys in the IO monad.
-- See the module Data.Vault.ST if you want to use it with the
-- ST monad instead.
type Vault = Vault RealWorld
-- | Keys for the vault.
type Key = Key RealWorld
-- | The empty vault.
empty :: Vault
-- | Create a new key for use with a vault.
newKey :: IO (Key a)
-- | Lookup the value of a key in the vault.
lookup :: Key a -> Vault -> Maybe a
-- | Insert a value for a given key. Overwrites any previous value.
insert :: Key a -> a -> Vault -> Vault
-- | Adjust the value for a given key if it's present in the vault.
adjust :: (a -> a) -> Key a -> Vault -> Vault
-- | Delete a key from the vault.
delete :: Key a -> Vault -> Vault
-- | Merge two vaults (left-biased).
union :: Vault -> Vault -> Vault
-- | A persistent store for a single value.
type Locker = Locker RealWorld
-- | Put a single value into a Locker.
lock :: Key a -> a -> Locker
-- | Retrieve the value from the Locker.
unlock :: Key a -> Locker -> Maybe a