-- |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 () }