2012-04-10 42 views
0

我想用forkIO並在每個線程中同時運行一些計算,我想寫一個MongoDB Document。因爲我希望計算在線程上實際完成,所以我要使用嚴格的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包,您可以使用模板哈斯克爾自動導出一個實例,節省您的單調乏味:

{-# LANGUAGE TemplateHaskell #-} 

import Control.DeepSeq.TH 

import Data.Bson 

deriveNFData ''Field 

而且應該這樣做。

+1

僅僅爲未來的觀衆添加一個筆記(如果有的話),我沒有得到這個與Haskell平臺一起工作的時間,因爲與haskell平臺一起發佈的GHC版本具有基本4.3。*。和深層次要求的基數4.4。*。 I.E.你必須安裝一個更新版本的GHC。 – Fredrik 2012-04-11 10:05:34

相關問題