无法将预期类型“Integer -> t”与实际类型“Bool”相匹配

Couldn't match expected type ‘Integer -> t’ with actual type ‘Bool’

在Haskell,

这工作得很好:(mod 9) 7。它给出了预期的结果:9 除以 7 的余数 (2).

同样,这也适用:(mod 9) 9。它 returns 0.

这让我想到 (mod 9 == 0) 9 应该 return True。然而,情况并非如此:它抛出了一个错误。

错误:

<interactive>:62:1: error:
    • Couldn't match expected type ‘Integer -> t’
                  with actual type ‘Bool’
    • The function ‘mod 9 == 0’ is applied to one argument,
      but its type ‘Bool’ has none
      In the expression: (mod 9 == 0) 9
      In an equation for ‘it’: it = (mod 9 == 0) 9
    • Relevant bindings include it :: t (bound at <interactive>:62:1)

请帮我理解为什么 (mod 9 == 0) 9 不会 return True.

P.S.: 我确信我在 Haskell 的上下文中使用 "return" 是有缺陷的。但是,我才刚刚开始,所以请原谅。 (如果我确实错了,你能纠正我就好了。)

正如我在评论中提到的,您似乎希望 mod 9 == 0 是一个接受参数的函数,将其传递给 mod 9,然后 returns比较。可以写这样的表达式,只是稍微复杂一点。

>>> ((== 0) . (mod 9)) 9
True

这里,(== 0) . (mod 9)(== 0)mod 9两个函数的组合。组合函数接受它的参数,将 mod 9 应用于它,然后将 (== 0) 应用于结果。 (其中 (== 0)\x -> x == 0 的缩写形式。)