minilight-0.3.0: src/Data/Registry.hs
{-| This module provides a registry for the specific type with the Text key.
This module is intended to be imported @qualified@, like:
@
import qualified Data.Registry as R
@
-}
module Data.Registry (
module Data.Registry.Class,
Registry(..),
fromList,
new,
) where
import Control.Monad.IO.Class
import qualified Data.Text as T
import Data.Registry.Class
import Data.Registry.HashTable
-- | The @Registry@ type can represents any 'IRegistry' instance.
data Registry v = forall reg. IRegistry reg => Registry (reg v)
instance IRegistry Registry where
(!?) (Registry reg) t = (!?) reg t
asVec (Registry reg) = asVec reg
write (Registry reg) k v = write reg k v
register (Registry reg) k v = register reg k v
insert (Registry reg) i k v = insert reg i k v
delete (Registry reg) k = delete reg k
-- | /O(n)/ Create a registry from a list. The current implementation uses a hashtable, defined in the module 'Data.Registry.HashTable'.
fromList :: MonadIO m => [(T.Text, v)] -> m (Registry v)
fromList xs = fmap Registry $ fromListImpl xs
-- | Create a new empty registry.
new :: MonadIO m => m (Registry v)
new = fromList []