{-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-unused-do-bind #-} -- | -- Simplistic demo of 'Iterator' synchronization, using the 'Base" API -- module Main where import Control.Concurrent import Control.Concurrent.Async import Control.Exception import Data.Default import Database.LevelDB.Base import qualified Data.ByteString.Char8 as BS main :: IO () main = bracket (open "/tmp/leveltest" def{ createIfMissing = True }) close $ \ db -> do let xs = [1..100] :: [Int] write db def (map (\ x -> Put (BS.pack . show $ x) "") xs) bracket (createIter db def) releaseIter $ \ iter -> do _ <- iterFirst iter lck <- newMVar iter es <- mapConcurrently (getEntry lck) xs mapM (\ (i,e) -> putStrLn $ "#" ++ show i ++ ": " ++ show e) es return () where getEntry lck i = withMVar lck $ \ iter -> do entry <- iterEntry iter iterNext iter return (i, entry)