-----------------------------------------------------------------------------
-- |
-- Module : Data.TMap.Backend
-- Copyright : Peter Robinson 2009
-- License : LGPL
--
-- Maintainer : Peter Robinson <thaldyron@gmail.com>
-- Stability : experimental
-- Portability : non-portable (requires STM)
--
-- Provides a type class for backends. To avoid data
-- inconsistencies, these functmns should not be used directly but only by
-- means of the TMap interface.
--
-----------------------------------------------------------------------------
module Data.TMap.Backend( Backend(..) )
where
import Prelude hiding(lookup)
-- | This class needs to be instantiated when developing a new
-- backend. The backend is expected to be able to handle concurrent
-- (non-conflicting) requests.
class Ord k => Backend k a b | a -> k where
-- | Called when a new element was inserted.
insert :: b k a -> k -> a -> IO ()
-- | Called when an element was updated.
adjust :: b k a-> (a -> a) -> k -> IO ()
-- | Called when an element was deleted from the map.
delete :: b k a-> k -> IO ()
-- | Called when an element is not found in the map.
lookup :: b k a -> k -> IO (Maybe a)
-- | Called by /flushBackend/ and /purgeTMap/.
flush :: b k a -> IO ()
-- | Called in 'newTMapIO'
initialize :: b k a -> IO ()
flush _ = return ()
initialize _ = return ()
{-
instance Backend k a b IO where
insert b k a = liftIO (insert b k a)
adjust b f k = liftIO (adjust b f k)
delete b k = liftIO (delete b k)
lookup b k = liftIO (lookup b k)
flush = liftIO . flush
initialize = liftIO . initialize
-}