Haskell函数无法正常运行,请求分析给定代码的错误原因
Haskell代码错误分析与修复
你的代码问题出在类型约束不完整:
- 函数
f中使用了>(大小比较操作),但你给的类型签名只声明了Fractional a约束。而Fractional类型类并不包含比较操作的定义,这类操作属于Ord类型类的范畴——不是所有实现Fractional的类型都支持大小比较(比如复数类型Complex,它是Fractional实例但没有Ord实例)。 - 虽然你传入的
3.5和2.0是浮点数(同时属于Fractional和Ord类型类),但Haskell的类型系统会严格检查函数定义的合法性,不会因为实际传入的参数满足约束就忽略函数签名的缺失。
修复后的代码
f :: (Fractional a, Ord a) => a -> a -> a f x y | x > y = x - y | otherwise = x + y call = f 3.5 2.0
只需要在类型签名里同时加上Ord a约束,让函数明确要求类型同时支持分数运算和大小比较,代码就能正常编译运行。
内容的提问来源于stack exchange,提问作者svenjaleo
相关产品推荐
相关产品推荐

