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 匹配,尽管我明确定义了类型?这样做的正确方法是什么?
解决方案
Sum 类型必须标记为unions。在 Haskell 中,标签同时是数据构造函数。
data PostfixToken = Operator String | Operand Integer
foo :: Bool -> PostfixToken
foo x = Operand 3