top-0.2: src/Repo/Memory.hs
-- |Transient in-memory implementation of a repository of absolute types
module Repo.Memory(memRepo) where
import Data.IORef
import qualified Data.Map as M
import qualified Repo.Types as R
import ZM
-- |Returns a new repository
memRepo :: IO R.Repo
memRepo = do
db <- newIORef M.empty
return $ R.Repo {
R.get = \ref -> do
--dbg (unwords ["get",show ref])
M.lookup ref <$> readIORef db
,R.put = \adt -> do
--dbg (unwords ["put",prettyShow adt])
modifyIORef db $ M.insert (absRef adt) adt
,R.close = return ()
}