File: tchdb.hs

package info (click to toggle)
tokyocabinet-haskell 0.0.5-5
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 308 kB
  • sloc: haskell: 2,276; makefile: 3
file content (30 lines) | stat: -rw-r--r-- 1,049 bytes parent folder | download | duplicates (3)
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)