Haskell - Couldn't match expected type ‘b’ with actual type ‘a’
刚开始学习哈斯克尔和我试图实现一个max函数来递归地查找列表的max
但是我在尝试编译时出错了
Couldn't match expected type ‘b’ with actual type ‘a’
‘a’ is a rigid type variable bound by
the type signature for:
max' :: forall b a. (Num b, Num a) => [a] -> b
at implementingFunctions.hs:5:1-34
‘b’ is a rigid type variable bound by
the type signature for:
max' :: forall b a. (Num b, Num a) => [a] -> b
at implementingFunctions.hs:5:1-34
号
有人能帮我理解出什么问题吗?
另一个问题是,您使用
最小修正是将输入类型限制为
1 2 3 4 5 |
也就是说,如果我们提供一个空的列表,那么返回一个
因此,
我们可以用以下方法将其重写为错误:
1 2 3 4 5 6 |
号
现在有三种模式:(1)空列表,(2)singlton列表,(3)至少包含两个元素的列表。
然而,编写错误并不总是处理非总计函数的好方法,因为在类型签名中看不到函数是非总计函数。另一个要做的工作是使用
1 2 3 4 5 6 |
或更短:
1 2 3 4 |
。
例如:
函数获取某个内容的列表并返回其中一个内容。但是函数的类型签名表示它接受某个
要解决此问题,请使类型签名与实现匹配:
。