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

Haskell中简单除法代码报错原因咨询(新手求助)

Haskell除法函数的类型不匹配错误解析

先看你编写的代码:

division :: Double -> Int -> Double
division x k = x / k

加载代码时触发的错误信息:

Prelude> :l main
[1 of 1] Compiling Main             ( main.hs, interpreted )

main.hs:2:20: error:
    • Couldn't match expected type ‘Double’ with actual type ‘Int’
    • In the second argument of ‘(/)’, namely ‘k’
      In the expression: x / k
      In an equation for ‘division’: division x k = x / k

错误原因

  • Haskell是强静态类型语言,不会自动进行数值类型的隐式转换。不像部分动态语言能自动把Int转为Double运算,Haskell要求运算时类型完全匹配。
  • 标准除法运算符(/)的类型为Fractional a => a -> a -> a,意味着它要求两个输入参数必须是相同的Fractional类型(比如Double、Float)。而Int属于Integral类型类,不属于Fractional范畴,无法直接和Double一起参与(/)运算。
  • 你的函数签名里,第二个参数k是Int类型,第一个参数x是Double类型,编译器执行x / k时,期望第二个参数也是Double,但实际传入的是Int,因此触发类型不匹配错误。

修复方法

使用fromIntegral函数将Int类型的k转换为Double类型:

division :: Double -> Int -> Double
division x k = x / fromIntegral k

fromIntegral可以把任意Integral类型(如Int、Integer)转换为通用数值类型,这里刚好转为Double,满足(/)的类型要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16