2012-04-10 3 views
0

私はいくつかの計算をforkIOと同時に実行しようとしていますが、各スレッドでMongoDB Documentを書きます。計算を実際にスレッド上で実行したいので、この文書を完全に評価したいので、Strict MVarsを使用しています。しかしMongoDBドキュメントのNFDataのインスタンスを追加する

、私は私が評価される。このための文書のインスタンス宣言を追加する必要があります手段(私は仮定)

No instance for (NFData Field) 
    arising from a use of `putMVar' 

を取得し、これをしようとしています。

ドキュメントの構造が複雑であるため、これを行う方法がわかりません。

私は一般的にNFDataに慣れていませんし、そのインスタンスを作成する方法もありません。

助けてくれてありがとうございます!

答えて

2

NFDataのインスタンスを書き込むことはあまり厳しくすべきではありませんが、複雑な構造の型では非常に繰り返しが必要です。 Documentタイプは[Field]の同義語で、Control.DeepSeqは既にinstance NFData a => NFData [a]をエクスポートしているため、実際にはFieldのインスタンスが必要です。 deepseq-thパッケージに

、あなたはあなたの退屈を保存し、自動的にインスタンスを導出するテンプレートHaskellのを使用することができます。

{-# LANGUAGE TemplateHaskell #-} 

import Control.DeepSeq.TH 

import Data.Bson 

deriveNFData ''Field 

そして、それはそれを行う必要があります。

+1

haskell-platformでリリースされたGHCのバージョンには、ベース4.3があるため、これを書いている時点でHaskell-Platformでこれを動作させることができなかった(もしあれば)必要とされるベース4.4 *。 I.新しいバージョンのGHCをインストールする必要があります。 – Fredrik

関連する問題