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

Fractional类型搭配Maybe时x/y运算的类型错误问题排查

问题分析

你写的代码里x / y的类型不匹配问题来自两个层面:

  • / 是Fractional类型类的成员方法,要求左右两个操作数必须是同一种Fractional类型,且运算返回值也和操作数类型一致。但你的参数x、y都是Integral类型类的实例,不属于Fractional范畴,根本不能直接作为/的入参使用。
  • 就算你要得到符合签名里Fractional b约束的返回值,也需要先把Integral类型的x、y转换为Fractional类型,再做除法运算。
修正方案

用标准库的fromIntegral函数把两个入参先转为Fractional类型即可,修改后的代码如下:

my :: (Integral a, Fractional b) =>  a -> a -> Maybe b            
my x y
 | y == 0 = Nothing
 | otherwise = Just ( fromIntegral x / fromIntegral y )

fromIntegral的作用是把任意Integral类型的数值转为任意Num类型(而Fractional是Num的子类,所以可以直接转成我们需要的b类型),转换后两个操作数都满足Fractional的约束,就可以正常用/运算了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:03