无法将预期类型“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
的缩写形式。)
在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
的缩写形式。)