1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
import Control.Monad
import Database.TokyoCabinet.HDB
main = do hdb <- new
-- open the database
open hdb "casket.tch" [OWRITER, OCREAT] >>= err hdb
-- store records
puts hdb [("foo", "hop"), ("bar", "step"), ("baz", "jump")]
>>= err hdb . (all id)
-- retrieve records
get_print hdb "foo"
-- traverse records
iterinit hdb
iter hdb >>= mapM_ (\k -> putStr (k++":") >> get_print hdb k)
-- close the database
close hdb >>= err hdb
where
puts :: HDB -> [(String, String)] -> IO [Bool]
puts hdb = mapM (uncurry $ put hdb)
get_print :: HDB -> String -> IO ()
get_print hdb key = get hdb key >>=
maybe (error "something goes wrong") putStrLn
err :: HDB -> Bool -> IO ()
err hdb = flip unless $ ecode hdb >>= error . show
iter :: HDB -> IO [String]
iter hdb = iternext hdb >>=
maybe (return []) (\x -> return . (x:) =<< iter hdb)
|