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

Haskell报错:No instance for (Eq (Int -> Int)) 问题求助

解决Haskell中No instance for (Eq (Int -> Int))的错误

嘿,我来帮你搞定这个问题!你遇到的这个错误其实是个很典型的函数参数使用问题,咱们一步步拆解:

错误原因分析

你写的mod x == 0这里出了问题:mod是个需要两个参数的函数(类型是Int -> Int -> Int),当你只传一个参数x时,它并没有计算出具体的数值,而是返回了一个等待第二个参数的函数(类型变成了Int -> Int)。而Haskell里的函数本身是不能用==做相等比较的,所以编译器就抛出了这个Eq (Int -> Int)实例缺失的错误——它以为你要比较两个函数,但根本没有这样的类型实例支持。

修正后的代码示例

看你的代码,myFilterList应该是想过滤出列表中满足“能被某个数整除”的元素吧?比如如果是要过滤偶数(能被2整除),那你只需要补全mod的第二个参数就行,同时别忘了加上otherwise分支处理不满足条件的情况:

myRandomList = [1,2,3,4,5,6,7,8,9,10]

myFilterList :: [Int] -> [Int]
myFilterList [] = []
myFilterList (x:xs) 
  | x `mod` 2 == 0 = x : myFilterList xs  -- 用中缀写法更直观,等价于mod x 2
  | otherwise = myFilterList xs

如果你是要过滤能被其他数整除的元素(比如3),只需要把2换成对应的数字就行。

额外提示

  • 用中缀写法x mod n比前缀的mod x n更贴近数学表达,可读性更好;
  • 一定要补上otherwise分支,不然编译器会提示你有非穷尽模式的警告,因为你只处理了满足条件的情况,没处理不满足的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:35