私はHaskellの初心者で、やって学ぶ傾向があります。
nextBatchまたはnextNでカーソルを使用する方法の例を誰かに教えてもらえますか? http://hackage.haskell.org/packages/archive/mongoDB/1.3.1/doc/html/Database-MongoDB-Query.html#g:12
このようなことを試みました(カスタム反復関数を作成しようとしました。ここで、fはすべてのドキュメントにマップする関数です)
let cursor = Mdb.find (Mdb.select selector collection)
-- consume :: IO ()
consume = do
r <- runAction db $ Mdb.nextBatch =<< cursor
if length (fromRight r) == 0
then return ()
else do
mapM_ f (fromRight r)
consume
consume
これで、これは無限ループで実行され、常に同じドキュメントのセットが返されます。カーソルが変更されることはないと思いますか?カーソルタイプ自体は、その要素の1つとしてMVarを持っています。最初は、nextBatchを実行すると更新されると思いましたが、それは決して起こりません。
たぶん、IOではなくアクションモナド(mongoドライバーを参照)にとどまるように再帰を書き直す必要がありますか?ハマった。