我刚刚开始使用Haskell,我想定义一个这样的类型:
data Point = Int | [Int]
Run Code Online (Sandbox Code Playgroud)
即.在任何点我想存储一个整数或整数列表.(最终我要将这些积分存储在一个列表中)
由于某种原因,它告诉我[Int]有一个解析错误.
我有什么误会?
对于数据类型中的每个"选项",您需要一个值构造函数,以便您可以确定是否具有单个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值,而不知道它们持有什么.
数据类型定义由一个或多个由...分隔的构造函数定义组成|.构造函数定义是以大写字母开头的标识符,后跟零个或多个类型名称.
因此它Int是一个有效的构造函数定义,因为它是一个以大写字母开头的标识符.但是它定义了一个零参数的构造函数,并且与该Int类型没有任何关系.所以这不是你想要的.如果你想包含类型的值构造函数Int,它应该是这样的Single Int,这将定义一个名为构造函数Single,它接受一个Int.
[Int]不是有效的构造函数定义,因为它不以标识符开头.你可能想要这样的东西Many [Int].这将定义一个名为的构造函数Many,它接受一个Ints 列表.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |