无法匹配预期类型'整数 - > t'实际类型'Bool'

时间:2017-12-31 14:53:16

标签: haskell predicate boolean-expression mod

在Haskell,

这非常合适:(mod 9) 7。它给出了预期的结果:当9除以7( 2 )时的余数。

同样,这也适用:(mod 9) 9。它返回 0

这让我认为(mod 9 == 0) 9应该返回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不会返回True

P.S。:我确信我使用&#34;返回&#34;在Haskell的背景下是有缺陷的。但是,我刚刚开始,所以请原谅。 (如果你能纠正我,那将是很好的,如果我确实是错的。)

1 个答案:

答案 0 :(得分:7)

正如我在评论中提到的,您希望mod 9 == 0是一个接受参数的函数,将其传递给mod 9,然后返回比较结果。你可以写出这样的表达,但它有点复杂。

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

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