我目前正在使用vcache-trie模块开展项目。我想用lookupPrefix
函数测试trie内部研究的执行速度。
这是为此目的使用Criterion创建的基准:
bench "trieSearch" $ nf (lookupPrefix (pack "ab")) trie
其中trie是在标准环境中创建的。此trie的类型为Trie Int
。
当环境被评估为正常形式时,我需要为此特定类型创建NFData的实例。
这个特定情况的trie的内容是[(ByteString,Int)],我假设NFData的实例应该评估每个元组,但我不知道如何继续。
任何帮助都会非常感谢,感谢您花时间阅读我的问题。
答案 0 :(得分:5)
以下应该可以解决问题,但可能效率低于编写NFData
访问内部表示的效率(由@JonPurdy建议):
instance NFData a => NFData (Trie a) where rnf = rnf . toList
答案 1 :(得分:1)
理想情况下,您应该使用功能请求或补丁与vcache-trie
的维护者联系以添加实例,因为您需要访问Trie
的内部表示才能编写它。
作为一种变通方法,您可以创建包的本地修改版本(例如,在Stack中向extra-deps
添加本地签出)并自行添加NFData
实例,或者添加{{1转到deriving (Generic)
并使用Trie
来实现deepseq-generics
。