我有以下 Haskell 类型定义:
import Data.Sequence(Seq, length)
import Data.ByteString.UTF8(ByteString)
type StringSeq = Seq ByteString
我有类型StringSeq
的表达式,我想用deepseq
. 所以我需要定义NFData
. 我做了以下事情:
import Control.DeepSeq(NFData, deepseq)
instance NFData ByteString
instance NFData a => NFData (Seq a) where
rnf s = rnf (length s)
所以我计算一个序列的长度来强制评估序列本身。这似乎可行,但这是正确的实现吗?有更好的吗?计算序列的长度是否会引入过多的开销?