Haskell中严格数据结构的库

sha*_*ahn 21 haskell

存在哪些库实现严格的数据结构?具体来说,我正在寻找严格的列表和严格的集合.

免责声明:

  1. 我知道deepseq.它非常有用,但每次使用deepseq(可能不止一次)时,它会增加遍历整个数据结构的开销.

  2. 我知道严格的类似容器的数据结构并不能确保它所包含的所有内容都会被完全评估,但结构本身应该是严格的,例如:

    data StrictList a = !a :$ !(StrictList a) | Empty
    
    Run Code Online (Sandbox Code Playgroud)

    (这里,包含的元素在WHNF中,可能没有完全评估,但列表的结构是.例如,无限列表将是非终止值.)

  3. 我知道关于hackage的'严格'包,但它有一组非常有限的严格数据结构.它既不包含严格的列表也不包含集合.

  4. 编写严格的列表我自己似乎非常容易(我喜欢ghc的扩展来派生Functor,Traversable和Foldable,顺便说一下.)但是它似乎仍然可以在一个单独的库中完成.集合的高效实现对我来说似乎并不重要.

Dan*_*her 13

containers包(随GHC)很快就会有严格的设置和地图变种(我不知道他们将被包含在GHC-7.4,但我们有理由希望).因此,严格的集合和地图的有效实施正在进行中.正如你所说的那样,严格的清单仍然是一个关于hackage的软件包提供它们会很好,所以不是每个人都必须自己做.你还需要什么?


Joh*_*n L 7

对于你的第二点,我经常看到的术语是脊柱严格的.

对于脊柱严格列表,您可以使用Data.Seq.Sequence(来自容器)或Data.Vector(来自vector).这两个都不是一个列表,但是根据你正在做什么,一个(或两个)可能会更好.Sequence提供了O(1)cons和snoc,可以非常快速地访问结构的任何一端.Vector的性能类似于数组.如果你想要一个更像列表的接口Sequence,你可能会考虑使用ListLike包(也有一个ListLike接口用于向量,但它没那么有用,因为Vector提供了一个相当全面的接口).两者都是脊柱严格的.

对于严格集,您可以尝试无序容器,它也提供严格的映射.