2012-10-08 44 views
3

根据数据类型的定义,我有一个问题: 可以在定义中使用符号或数字吗? 举例来说,如果我想创建一个数据类型为低,等号当然haskell自己的数据类型 - 在数据类型定义中使用符号或数字

data Signs = Lo | Eq 

的下面的代码工作的构造罗代表“<”和构造函数公式为“=”。

但我不能使用“真实”的迹象。例如,下面的代码将无法正常工作

data Signs = Lo "<" | Eq "=" 
type Signs = "<" | "=" 
type MyInt = '1' | '2' 
data MyInt = One '1' | Two '2' 

所以我想知道是否有使用定义中“真正的”标志和编号的可能性。如果有一个,如果你能告诉我它是如何工作的话,那将会很好。 ;)

+0

你想他们只是为了方便起见? – huon

+0

@dbaupp:不只是为了方便,但我很想知道它。对我来说,像“Int”这样的内置数据类型很难重新实现,这有点奇怪。或者,你会如何尝试实现等同于“Int”的数据类型“data MyInt = ...”? – jimmyt

回答

2

运算符标识符前缀为:可用于数据构造函数。

data Signs = (:<) | (:=) 

,如果他们是零元,然后AFAIK你必须保持的括号:

[(:<), (:=)] 

您可以使用数字,但第一个字符必须是大写字母。

data MyInt = N1 | N2 

http://www.haskell.org/onlinereport/lexemes.html

+2

所有这一次,我假设一个中缀数据构造函数必须采取两个参数......我错了。 – dave4420

+0

非常感谢。 ;) – jimmyt

+0

@jimmyt不要忘记标记答案是正确的! (绿色复选标记) – Pubby