我正试图在Haskell中创建一个新的数据类型,它基本上具有相同的元素。我做的是这样的:
data Novo = -2147483648|-2147483647|...|-1|0|1|2|...|2147483647|(|+|)|(|*|) deriving (Show)
我知道这是伪代码,但我该怎么写呢?
当我试图编译这个时,gchi给了我一个错误:
parse error on input ‘-’
关于这行中的13个字符,即第一个-
,你能在这里帮我吗?为什么它会给我这个错误?我该如何解决这个问题?
数据构造函数必须是以大写字母开头的有效标识符,或者是以:
开头的符号序列。
您的尝试存在以下问题:
- 像
-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
这也是伪代码,因为文本不是有效的数据构造函数。
- 字符串
(|+|)
和(|*|)
也是数据构造函数的无效名称。它们不以:
开头,并且包含圆括号
如果真的想走这条路,你需要准备列出大约40亿个构造函数,例如使用NovoNeg2147483648
、Novo2147483648
、NovoPlus
和NovoMult
等名称。
构造函数名称必须以大写字母或:
开头。不允许使用数字或其他符号。一些数值预定义类型(如Int
(的行为"就像"它们是如上所述定义的,但这是伪语法,而不是实际有效的Haskell。
尝试的一些变体
data Novo = PlainInt Int | Additional1 | Additional2 deriving Show