代码之家  ›  专栏  ›  技术社区  ›  spideyonthego

无法将预期的类型–Integer->t–of与实际类型–Bool–of匹配

  •  2
  • spideyonthego  · 技术社区  · 8 年前

    在哈斯克尔,

    这非常好: (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 不会再回来了 真的 .

    P、 我确信我在Haskell的上下文中使用“return”是有缺陷的。不过,我才刚开始,请原谅。(如果我真的错了,你能纠正我就好了。)

    1 回复  |  直到 8 年前
        1
  •  7
  •   chepner    8 年前

    正如我在评论中提到的,你似乎期望 mod 9 == 0 要成为接受参数的函数,请将其传递给 mod 9 ,然后返回比较结果。你可以写这样一个表达式,但要复杂一点。

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

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

    推荐文章