module Data.BTree.Class where
import Prelude hiding (lookup)
import Data.Maybe
import Data.Serialize()
import Control.Monad.Trans
import Control.Monad
import Data.BTree.Types
import qualified Data.BTree.BTree as T()
import qualified Data.BTree.Cache.Class as C()
import qualified Data.BTree.Cache.STM as Cstm
import qualified Data.BTree.KVBackend.Class as KV()
class (Functor m, MonadIO m) => Tree m k v | m -> v, m -> k where
modify :: (v -> v -> v) -> k -> v -> m (Maybe v)
modify_ :: (v -> v -> v) -> k -> v -> m ()
modify_ f k = void . modify f k
modifyMany :: [(v -> v -> v, k, v)] -> m ()
modifyMany fks = mapM_ (\(f, k, v) -> modify_ f k v) fks
delete :: k -> m (Maybe v)
delete_ :: k -> m ()
delete_ = void . delete
lookup :: k -> m (Maybe v)
member :: k -> m Bool
member k = isJust `fmap` lookup k
search :: ((k, k) -> Bool) -> m [(k, v)]
foldli :: (a -> k -> v -> a) -> a -> m a
toList :: m [(k,v)]
toList = reverse `fmap` (foldli (\l k v -> (k,v):l) [])
type N k v = Node k v
type R k v = Ref (N k v)
type Cp m k v = Cstm.Param m (R k v) (N k v)
type S m k v = Cstm.Param m (R k v) (N k v)