{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module MyApp1.TokyoCabinet
(
TCM
, runTCM
, new
, open
, close
, put
, putcat
, putkeep
, get
, out
, iterinit
, iternext
, fwmkeys
, rnum
, size
, liftT
, TC.defaultExtension
, TCDB
, HDB
, BDB
, FDB
, OpenMode(..)
) where
import Data.Int
import Control.Monad
import Control.Monad.Reader
import Database.TokyoCabinet.Storable
import Database.TokyoCabinet (TCDB, FDB, BDB, HDB, OpenMode(..))
import qualified Database.TokyoCabinet as TC
newtype TCM tc a =
TCM { unTCM :: ReaderT tc TC.TCM a } deriving (Monad, MonadReader tc)
runTCM :: (TCDB tc) => TCM tc a -> tc -> IO a
runTCM tcm tc = TC.runTCM $ runReaderT (unTCM tcm) tc
new :: (TCDB tc) => IO tc
new = TC.runTCM TC.new
liftT :: (TCDB tc) => TC.TCM a -> TCM tc a
liftT = TCM . lift
open :: (TCDB tc) => String -> [OpenMode] -> TCM tc Bool
open name mode = do tc <- ask
liftT $ TC.open tc name mode
close :: (TCDB tc) => TCM tc Bool
close = ask >>= liftT . TC.close
put :: (TCDB tc, Storable k, Storable v) => k -> v -> TCM tc Bool
put key val = do tc <- ask
liftT $ TC.put tc key val
putcat :: (TCDB tc, Storable k, Storable v) => k -> v -> TCM tc Bool
putcat key val = do tc <- ask
liftT $ TC.putcat tc key val
putkeep :: (TCDB tc, Storable k, Storable v) => k -> v -> TCM tc Bool
putkeep key val = do tc <- ask
liftT $ TC.putkeep tc key val
get :: (TCDB tc, Storable k, Storable v) => k -> TCM tc (Maybe v)
get key = do tc <- ask
liftT $ TC.get tc key
out :: (TCDB tc, Storable k) => k -> TCM tc Bool
out key = do tc <- ask
liftT $ TC.out tc key
iterinit :: (TCDB tc) => TCM tc Bool
iterinit = ask >>= liftT . TC.iterinit
iternext :: (TCDB tc, Storable v) => TCM tc (Maybe v)
iternext = ask >>= liftT . TC.iternext
fwmkeys :: (TCDB tc, Storable k1, Storable k2) => k1 -> Int -> TCM tc [k2]
fwmkeys key maxn = do tc <- ask
liftT $ TC.fwmkeys tc key maxn
rnum :: (TCDB tc) => TCM tc Int64
rnum = do tc <- ask
liftT $ TC.rnum tc
size :: (TCDB tc) => TCM tc Int64
size = do tc <- ask
liftT $ TC.size tc