Haskell noobie:类型定义中的列表?

int*_*tar 0 haskell types

我刚刚开始使用Haskell,我想定义一个这样的类型:

data Point = Int | [Int]
Run Code Online (Sandbox Code Playgroud)

即.在任何点我想存储一个整数或整数列表.(最终我要将这些积分存储在一个列表中)

由于某种原因,它告诉我[Int]有一个解析错误.

我有什么误会?

ama*_*loy 7

对于数据类型中的每个"选项",您需要一个值构造函数,以便您可以确定是否具有单个Int或Int列表.例如:

data Point = Single Int | Many [Int]
Run Code Online (Sandbox Code Playgroud)

然后,您可以对此Point类型的值进行模式匹配:

examine :: Point -> String
examine (Single x) = "One: " ++ show x
examine (Many xs) = "Many: " ++ show xs
Run Code Online (Sandbox Code Playgroud)

您的原始声明是非法的,否则将无法使用 Point值,而不知道它们持有什么.


sep*_*p2k 6

数据类型定义由一个或多个由...分隔的构造函数定义组成|.构造函数定义是以大写字母开头的标识符,后跟零个或多个类型名称.

因此它Int是一个有效的构造函数定义,因为它是一个以大写字母开头的标识符.但是它定义了一个零参数的构造函数,并且与该Int类型没有任何关系.所以这不是你想要的.如果你想包含类型的值构造函数Int,它应该是这样的Single Int,这将定义一个名为构造函数Single,它接受一个Int.

[Int]不是有效的构造函数定义,因为它不以标识符开头.你可能想要这样的东西Many [Int].这将定义一个名为的构造函数Many,它接受一个Ints 列表.