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

Haskell类型不匹配错误排查:无法匹配‘b’与Int类型

错误原因与修复方案

错误原因

Haskell 是强类型静态语言,要求函数的所有分支返回完全一致的类型。你的prel函数中存在类型不匹配问题:

  • 当y是偶数时,y/2的结果属于Fractional b类型(符合函数签名的预期返回类型);
  • 当y是奇数时,y*2的结果是Int类型,和预期的b类型冲突。

Haskell 无法自动将Int隐式转换为任意的Fractional类型,因此编译器抛出Couldn't match type 'b' with Int的错误。

修复方案

使用fromIntegral函数将Int类型的y转换为Fractional b类型,确保两个分支的返回类型一致:

prel2 :: (Fractional b) => [Int] -> [b]
prel2 x = map prel x
     where prel y
        | even y = fromIntegral y / 2
        | otherwise = fromIntegral y * 2

简化写法

你也可以用 lambda 表达式简化代码,逻辑完全一致:

prel2 :: (Fractional b) => [Int] -> [b]
prel2 = map (\y -> if even y then fromIntegral y / 2 else fromIntegral y * 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:10:25