{- Copyright (C) 2005 John Goerzen This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -} {- | Module : Database.AnyDBM.MapDBM Copyright : Copyright (C) 2005 John Goerzen License : GNU LGPL, version 2.1 or above Maintainer : John Goerzen Stability : provisional Portability: portable Written by John Goerzen, jgoerzen\@complete.org Support for working with Maps through the "Database.AnyDBM" framework. -} module Database.AnyDBM.MapDBM (MapDBM, newMapDBM, setMapDBM, getMapDBM ) where import Database.AnyDBM import Data.Map as Map import Control.Concurrent.MVar {- | The type of the MapDBM. -} type MapDBM = MVar (Map.Map String String) {- | Makes a new MapDBM with an empty Map. -} newMapDBM :: IO MapDBM newMapDBM = newMVar Map.empty {- | Sets the embedded Map in this 'MapDBM' to the given 'Map'. -} setMapDBM :: MapDBM -> Map.Map String String -> IO () setMapDBM h fm = swapMVar h fm >> return () {- | Gets the embedded Map in this 'MapDBM'. -} getMapDBM :: MapDBM -> IO (Map.Map String String) getMapDBM = readMVar m = modifyMVar_ instance AnyDBM MapDBM where insertA h k v = m h (\x -> return $ Map.insert k v x) deleteA h k = m h (\x -> return $ Map.delete k x) lookupA h k = withMVar h (\x -> return $ Map.lookup k x) toListA h = withMVar h (\x -> return $ Map.toList x)