如何创建可以为字符串或整数的类型?

时间:2019-11-15 23:58:38

标签: haskell

我正在尝试创建一种类型,该类型可以表示一个运算符(“ +”,“-”,“ *”,...)或操作数(1、2、3、4 ...)后缀表达式计算器。

我尝试写:

data PostfixToken = String | Integer

但是然后说我有一个这样的虚拟函数:

foo :: Bool -> PostfixToken
foo x = 3 :: Integer

我得到:

Couldn't match type ‘Integer’ with ‘PostfixToken’

为什么我不能将Integer与PostfixToken匹配,尽管我明确定义了类型?这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

总和类型必须为标记联合。在Haskell中,标记同时是数据构造函数

data PostfixToken = Operator String | Operand Integer

foo :: Bool -> PostfixToken
foo x = Operand 3