【问题标题】:Haskell: How can I create an empty list as an option for a datatype?Haskell:如何创建一个空列表作为数据类型的选项?
【发布时间】:2019-08-25 07:07:21
【问题描述】:

在使用 ghci 编译器的 Haskell 中,想要创建一个为空或具有三元组的数据类型。我试图创建一个空类型,但我的数据类型 E 不允许我使用它。您如何正确声明这一点?

type Empty = []
data E = Zero Empty | Triple A B C

我不断收到此错误:期待“空”的更多参数 需要一个类型,但“Empty”有一种“* -> *”

【问题讨论】:

  • [] 不是类型;它是一个类型 constructor.
  • 类比“Triple”、“Quadruple”、“Quintuple”,构造函数实际上应该命名为“Zerople”吗? =D
  • 坚持使用拉丁前缀,它会是“Nilple”,或者为了避免自动更正愚蠢,“Nihilple”。

标签: list haskell types declaration ghci


【解决方案1】:

您正在混合类型和数据构造函数,并使用 type 构造函数 [](通过别名 Empty,其中需要普通类型。

考虑这个列表构造函数的伪 Haskell 定义:

data [] a = [] | a : ([] a)

这里,[] 既是类型为 * -> * 的类型构造函数,也是类型为 [a] 的空数据构造函数,表示空列表。

对于您的类型,执行相同操作:Zero 只是一个空数据构造函数。

data E = Zero | Triple A B C

(假设ABC是固定类型。如果你想定义三元组任意类型,你需要参数化E

data E a b c = Zero | Triple a b c

)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2016-09-19
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多