{-| 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 []