在Haskell中创建新数据类型时出现问题



我正试图在Haskell中创建一个新的数据类型,它基本上具有相同的元素。我做的是这样的:

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

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

当我试图编译这个时,gchi给了我一个错误:

parse error on input ‘-’

关于这行中的13个字符,即第一个-,你能在这里帮我吗?为什么它会给我这个错误?我该如何解决这个问题?

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

您的尝试存在以下问题:

  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. 字符串(|+|)(|*|)也是数据构造函数的无效名称。它们不以:开头,并且包含圆括号

如果真的想走这条路,你需要准备列出大约40亿个构造函数,例如使用NovoNeg2147483648Novo2147483648NovoPlusNovoMult等名称。

构造函数名称必须以大写字母或:开头。不允许使用数字或其他符号。一些数值预定义类型(如Int(的行为"就像"它们是如上所述定义的,但这是伪语法,而不是实际有效的Haskell。

尝试的一些变体

data Novo = PlainInt Int | Additional1 | Additional2 deriving Show

相关内容

最新更新