我正在尝试创建一种类型,该类型可以表示一个运算符(“ +”,“-”,“ *”,...)或操作数(1、2、3、4 ...)后缀表达式计算器。
我尝试写:
data PostfixToken = String | Integer
但是然后说我有一个这样的虚拟函数:
foo :: Bool -> PostfixToken
foo x = 3 :: Integer
我得到:
Couldn't match type ‘Integer’ with ‘PostfixToken’
为什么我不能将Integer与PostfixToken匹配,尽管我明确定义了类型?这样做的正确方法是什么?
答案 0 :(得分:1)
总和类型必须为标记联合。在Haskell中,标记同时是数据构造函数。
data PostfixToken = Operator String | Operand Integer
foo :: Bool -> PostfixToken
foo x = Operand 3