【发布时间】:2014-01-22 17:50:38
【问题描述】:
存在哪些实现严格数据结构的库?具体来说,我正在寻找严格的列表和严格的集合。
免责声明:
我知道 deepseq。它非常有用,但是每次使用 deepseq 时都会增加遍历整个数据结构的开销(可能不止一次)。
-
我知道严格的容器式数据结构不会 确保它包含的所有内容都将得到全面评估,但结构 本身应该是严格的,例如:
data StrictList a = !a :$ !(StrictList a) | Empty(这里,包含的元素在 WHNF 中,可能没有完全评估,但列表的结构是。例如,无限列表将是非终止值。)
我知道关于 hackage 的“严格”包,但它有一个非常 有限的一组严格的数据结构。它既不包含严格 列表或集合。
自己编写严格的列表似乎非常容易(我喜欢 ghc 的 派生 Functor、Traversable 和 Foldable 的扩展,顺便说一句。),但它 似乎在单独的库中完成会更好。和 集的高效实现对我来说似乎不是那么简单。
【问题讨论】:
-
为什么需要严格的结构?
-
@FUZxxl 确保立即评估事物通常可以减少空间使用并加快计算速度。它也可能产生相反的效果,因此惰性结构也很重要。对于高效的代码,您需要两者(并且必须知道/找出在哪里使用哪个)。
-
@FUZxxl:我在 Set 上做类似 state-monad 的事情,我会经常从集合中插入和删除元素,但有一段时间不评估 Set。这导致了空间泄漏,可以通过 spin-strict(感谢 John L)数据结构来修复。
标签: haskell