无法将预期类型"(a1 -> a1 -> a1) -> (t0 a0 -> Int) -> t Int -> Int"与实际类型"Int"匹配

  • 本文关键字:Int a1 类型 匹配 t0 a0 haskell
  • 更新时间 :
  • 英文 :


我正在阅读Graham Hutton的《Programming in Haskell》,并且正在运行一些演示如何对整数列表求平均值的示例代码。这里的函数是

average ns = sum ns div length ns

完整的错误信息是

Couldn't match expected type `(a1 -> a1 -> a1)
-> (t0 a0 -> Int) -> t Int -> Int'
with actual type `Int'
* The function `sum' is applied to four arguments,
but its type `t Int -> Int' has only one
In the expression: sum ns div length ns
In an equation for `average': average ns = sum ns div length ns
* Relevant bindings include
ns :: t Int (bound at ch2-4.hs:7:9)
average :: t Int -> Int (bound at ch2-4.hs:7:1)

我对这门语言有点陌生,所以错误信息很令人困惑,即使阅读了文档。如果有任何调试的帮助,我将不胜感激。

我还想指出,我知道运行average ns = div (sum ns)(length ns)也可以工作,但在它之前的函数更自然。

可能的代码示例是:

average ns = sum ns`div`length ns

div周围带反引号。这些反引号用于使用div作为操作符,因此相当于div (sum ns) (length ns)

最新更新