在Haskell中创建新数据类型时遇到问题

时间:2018-11-19 17:47:06

标签: haskell

我正在尝试在Haskell中创建一个新的数据类型,该数据类型具有基本相同的元素,并且具有更多的Int类型。我是这样的:

char

我知道这是伪代码,但是我该怎么写呢?

当我尝试对此进行编译时,gchi给了我这个错误:

data Novo = -2147483648|-2147483647|...|-1|0|1|2|...|2147483647|(|+|)|(|*|) deriving (Show) 

在此行中引用第13个字符,即第一个parse error on input ‘-’ ,您可以在这里帮我吗?为什么给我这个错误?我该如何解决?

2 个答案:

答案 0 :(得分:4)

数据构造函数必须是以大写字母开头的有效标识符,或者是以:开头的符号序列。

您的尝试存在以下问题:

  1. 诸如-2147483648之类的数字文字不是有效的构造函数。
  2. 您不能使用...指定一系列构造函数。像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
    

    也是 伪代码,因为文字不是有效的数据构造函数。

  3. 您的字符串(|+|)(|*|)也是数据构造函数的无效名称。它们不是以:开头,并且包含括号。

如果您真的想走这条路,则需要准备使用NovoNeg2147483648Novo2147483648,{{1}之类的名称列出大约40亿个构造函数。 }和NovoPlus

答案 1 :(得分:3)

构造函数名称必须以大写字母或:开头。不允许使用数字或其他符号。一些数字预定义类型(如Int的行为就像在上面显示的那样“好像”定义了,但这是伪语法,不是实际的有效Haskell。

尝试改用

data Novo = PlainInt Int | Additional1 | Additional2 deriving Show