-----------------------------------------------------------------------------
-- |
-- 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 backend instantiations. To avoid data
-- inconsistencies, these functions should not be used directly but only by
-- means of the TMap interface.
--
-----------------------------------------------------------------------------
module Data.TMap.Backend( Backend(..) )
where
import Control.Monad.Trans( MonadIO )
-- | 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 Backend k a b | a -> k where
-- | Called when a new element was inserted.
insert :: MonadIO m => b k a -> k -> a -> m ()
-- | Called when an element was updated.
adjust :: MonadIO m => b k a-> (a -> a) -> k -> m ()
-- | Called when an element was deleted from the map.
delete :: MonadIO m => b k a-> k -> m ()
-- | Called when an element is not found in the map.
lookup :: MonadIO m => b k a -> k -> m (Maybe a)
-- | Called by /flushBackend/ and /purgeTMap/.
flush :: MonadIO m => b k a -> m ()
-- | Called in 'newTMapIO'
initialize :: MonadIO m => b k a -> m ()
flush _ = return ()
initialize _ = return ()