Haskell类型不匹配错误:Couldn't match expected type Bool问题排查
Haskell类型匹配错误分析:Couldn't match expected type Bool
核心错误原因
函数类型签名与定义不匹配:
sumaMenosQueMax的类型签名声明它接受一个(Int, Int, Int)三元组参数,返回Bool,但函数定义却写成了接受三个独立的Int参数(sumaMenosQueMax x y z)。而main函数里调用它时传入的是一个三元组,编译器无法将单个三元组拆解成三个独立参数,直接触发类型匹配失败的错误。额外小问题:代码开头导入了
Data.IntSet (IntSet)但全程未使用,会产生不必要的编译警告。
修复方案
方案一:适配三元组参数的函数定义
修改sumaMenosQueMax的定义,让它接收三元组并解构出三个值,同时可以简化冗余的if表达式(因为比较运算本身就返回Bool):
sumaMenosQueMax :: (Int, Int, Int) -> Bool sumaMenosQueMax (x, y, z) = maximo x y z > medio x y z + minimo x y z
方案二:修改类型签名适配多参数调用
如果想保留三个独立参数的定义,需要调整类型签名,同时修改main的输入逻辑来传入三个独立整数:
-- 修改类型签名 sumaMenosQueMax :: Int -> Int -> Int -> Bool sumaMenosQueMax x y z = maximo x y z > medio x y z + minimo x y z -- 调整main函数读取三个输入 main :: IO () main = do x <- readLn y <- readLn z <- readLn print (sumaMenosQueMax x y z)
内容的提问来源于stack exchange,提问作者user21707714
相关产品推荐
相关产品推荐

