我正在尝试在Haskell中创建一个新的数据类型,该数据类型具有基本相同的元素,并且具有更多的Int类型。我是这样的:
char
我知道这是伪代码,但是我该怎么写呢?
当我尝试对此进行编译时,gchi给了我这个错误:
data Novo = -2147483648|-2147483647|...|-1|0|1|2|...|2147483647|(|+|)|(|*|) deriving (Show)
在此行中引用第13个字符,即第一个parse error on input ‘-’
,您可以在这里帮我吗?为什么给我这个错误?我该如何解决?
答案 0 :(得分:4)
数据构造函数必须是以大写字母开头的有效标识符,或者是以:
开头的符号序列。
您的尝试存在以下问题:
-2147483648
之类的数字文字不是有效的构造函数。您不能使用...
指定一系列构造函数。像data Fourbit = -16 | ... | -1 | 0 | 1 | ... 15
这样的示例是伪代码,用于显式列出每个预期的文字:
data Fourbit = -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 |
-8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
也是 伪代码,因为文字不是有效的数据构造函数。
(|+|)
和(|*|)
也是数据构造函数的无效名称。它们不是以:
开头,并且包含括号。如果您真的想走这条路,则需要准备使用NovoNeg2147483648
,Novo2147483648
,{{1}之类的名称列出大约40亿个构造函数。 }和NovoPlus
。
答案 1 :(得分:3)
构造函数名称必须以大写字母或:
开头。不允许使用数字或其他符号。一些数字预定义类型(如Int
的行为就像在上面显示的那样“好像”定义了,但这是伪语法,不是实际的有效Haskell。
尝试改用
data Novo = PlainInt Int | Additional1 | Additional2 deriving Show