在显式类型绑定中键入错误 - Haskell

时间:2018-04-06 22:31:54

标签: haskell typeerror

我一直在努力花一个小时来理解更高阶函数中的某些东西,现在我因为这个错误而无法继续前进:

    hof :: [Integer] -> (Integer -> Integer)
    isIn :: [Integer] -> Integer -> Integer
    isIn [] s = 0
    isIn [] _ = 0
    isIn (h:t) s
        | h == s = 0 {-<-------- error points here here-}
        | otherwise = isIn(t) + 1
    hof s = \n -> isIn s n

      ERROR file:.\Lab2.hs:111 - Type error in explicitly typed binding
      *** Term           : isIn
      *** Type           : [Integer] -> Integer -> Integer -> Integer
      *** Does not match : [Integer] -> Integer -> Integer

1 个答案:

答案 0 :(得分:6)

您在isIn的递归调用中缺少第二个参数;它应该是

 | otherwise = isIn t s + 1
 --                   ^

虽然不是错误,但您也有冗余的基本情况; s_都是无可辩驳的模式,因此仅isIn [] _ = 0就足够了。

也不是错误,但hofisIn之间没有区别,因为您可以将定义简化为

hof s = isIn s

再次

hof = isIn