【问题标题】:Why is there no "non-empty list" type in the Haskell base libraries?为什么 Haskell 基础库中没有“非空列表”类型?
【发布时间】:2015-02-26 00:04:00
【问题描述】:

这种类型可能是

data NonEmptyList a = NEL a [a]

函数headtail 和其他函数将成为新创建的Listable 类型类的方法。一些函数已经可以适应现有的类型类(maps/folds/traversals/monads)。

为什么这种类型不是 Haskell 标准库的一部分?

【问题讨论】:

  • 您将如何创建该类型的实例?
  • 您可以在semigroups 包中找到非空列表。

标签: list haskell types strong-typing


【解决方案1】:

类型确实存在。

你必须导入

Data.List.NonEmpty    

更多信息:http://hackage.haskell.org/package/semigroups-0.16.0.1/docs/Data-List-NonEmpty.html

【讨论】:

    【解决方案2】:

    自 GHC 8.0 起,它就处于基础状态:https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List-NonEmpty.html


    定义这种类型的包列表本身并不空:至少有六个:

    Haskell Wiki 有一个关于非空列表的完整 page

    您的问题:为什么不在基本包中的非空列表更难回答。但是该类型是基类(FoldableZip)中许多有用类的实例,因此使用它们的机制已经存在,您只需要少量实例定义即可使用它。

    【讨论】:

    • 您能否提供一个示例并说明如何使用 NonEmpty?
    【解决方案3】:

    从 GHC 8.0.1 开始,base 现在在Data.List.NonEmpty 中有一个NonEmpty 列表类型:

    https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List-NonEmpty.html

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2014-12-25
      • 2021-01-17
      • 2013-02-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多