尝试将派生(Show, Read)添加到表达式树



我是相当新的Haskell,所以它可能是一些简单的东西,我错过了,但我有一个表达式树,看起来像这样:

data Expression = Lit Float
| Add Expression Expression
| Mul Expression Expression
| Sub Expression Expression
| Div Expression Expression

代码工作得很好,但是当我尝试添加派生(Show, Read)以便Haskell自动编写代码来读取和写入这种类型的元素时,它会抛出错误。这就是我想做的。Lit Float deriving(Show, Read)

我得到一个错误,读取错误:解析错误输入'|',现在添加表达式表达式行不工作。有人能指出这里的错误是什么吗?

deriving子句必须在完整的类型定义之后:

data Expression = Lit Float
| Add Expression Expression
| Mul Expression Expression
| Sub Expression Expression
| Div Expression Expression
deriving (Read, Show)

在你正在尝试的东西中,大概是

data Expression = Lit Float deriving (Read, Show)
| Add Expression Expression
| Mul Expression Expression
| Sub Expression Expression
| Div Expression Expression

Haskell来到deriving子句,并假设类型定义已经完成,后面还有其他东西。然后|字符就没有意义了。

您可以为类型派生实例,或者编写您自己的实例,而不是为该类型的单独构造函数派生实例。

最新更新