首页 > 解决方案 > 如何创建可以是字符串或整数的类型?

问题描述

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

我试着写:

data PostfixToken = String | Integer

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

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

我得到:

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

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

标签: haskell

解决方案


Sum 类型必须标记为unions。在 Haskell 中,标签同时是数据构造函数

data PostfixToken = Operator String | Operand Integer

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

推荐阅读