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

标签 haskell

我正在阅读 Graham Hutton 的《Haskell 编程》,并运行一些示例代码来演示如何对整数列表求平均值。有问题的函数是

平均 ns = 总和 ns div 长度 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 <strong>`div`</strong> length ns

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

关于haskell - 无法将预期类型 `(a1 -> a1 -> a1) -> (t0 a0 -> Int) -> t Int -> Int' 与实际类型 `Int' 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73045772/

相关文章:

haskell - monad 的表现力是否是以牺牲代码重用为代价的?

haskell - 如何在 Haskell 中正确处理 UTF-8 字符?

haskell - 开始使用 Yesod

Haskell,当 A 类为 B 类提供足够的信息时生成 B 的实例

xml - 如何使用 Haskell(使用 HaXml)访问一些 XML 数据?

haskell - Monad 只是错误处理的一种功能方式吗?

haskell - 为什么这些 Haskell Parsec 组合器的顺序很重要?

haskell - 无法创建新的可哈希数据类型

haskell - 禁止赋值

Haskell 类型级投影