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

Haskell实现sumRights时map报Int与[a]类型不匹配错误原因求解

报错原因详解
  • 核心原因是返回值类型不匹配:你为transformListToInt声明的类型签名是[Either a Int] -> Int,意味着函数最终要返回单个Int值;但函数体map f list是对列表每一个元素应用转换规则f,输出结果是长度和输入列表一致的[Int]类型的整数列表,和声明的返回类型Int完全不匹配,所以编译器抛出「期望类型Int,实际类型[a]」的错误。
    如果你的需求是先把Either列表转换为整数列表,只需要把类型签名修改为transformListToInt :: [Either a Int] -> [Int]即可解决该报错;如果需要直接得到求和结果,在map f list外层套一层sum即可:transformListToInt list = sum $ map f list,就符合你原来的返回单个Int的类型声明。
  • 额外说明:你贴出的报错日志中对应的代码和你实际编写的代码有微小出入,报错里的转换规则写的是f (Left c) = c,如果是该写法还会额外触发类型不统一的错误:Left值的c类型是任意类型a,和Right值的b的Int类型无法对齐;但你实际写的是f (Left c) = 0,转换规则的返回值统一为Int,这部分逻辑是没有问题的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:05