You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell计算器类声明报错:类型不匹配问题求解

问题分析与修改方案

错误根源

  • Calc类的calculate方法签名定义错误:你写的是a -> a -> Double,但你的Exp类型已经通过Add Exp Exp构造子封装了加法的两个操作数,不需要传入两个独立的Exp参数。
  • 实例实现逻辑错误:calculate (Add a b) = a + b中,a和b是Exp类型,不是Double,不能直接用+运算,必须先计算出它们的数值结果。

修改步骤

  1. 调整类方法签名:将calculate改为接收单个表达式、返回计算结果的形式,即calculate :: a -> Double。
  2. 完善实例实现:
    • 处理Number构造子:直接提取内部的Double值;
    • 处理Add构造子:递归调用calculate计算两个子表达式的值,再执行加法运算。

修改后的完整代码

data Exp = Number Double | Add Exp Exp 

class Calc a where
 calculate :: a -> Double

instance Calc Exp where
 calculate (Number n) = n
 calculate (Add a b) = calculate a + calculate b

测试示例:calculate (Add (Number 3.0) (Number 5.0))会返回8.0,符合预期。

内容的提问来源于stack exchange,提问作者zeppal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:31:14