不在范围内折叠

时间:2018-04-30 05:05:13

标签: haskell

你好,有人可以向我解释为什么这个自定义的foldl实现不在范围内吗?

afold::(a->b->a)->a->[b]->a
afold tsf accu (x:xs)=afold tsf (tsf accu x) xs
afold _ accu []=accu

我试过像这样运行它:

afold (\x y-> show y:x) [] [1,2,3,4]

我收到错误:

Variable not in scope:
      afold :: ([String] -> () -> [String]) -> [a0] -> [Integer] -> t

当我尝试使用它时更简单:

 afold (\x y-> x+y) 0 [1,2,3,4]

我收到错误:

 :: (Integer -> Integer -> Integer) -> Integer -> [Integer] -> t

为什么不推断输出?为什么在第二个例子中它仍然是t

1 个答案:

答案 0 :(得分:3)

问题在于我没有将方法放在module中,并加载它。一旦我将方法包含在模块中并将其加载到ghci中就可以了。

module Test where
afold::(a->b->a)->a->[b]->a
afold tsf accu (x:xs)=afold tsf (tsf accu x) xs
afold _ accu []=accu

GHCI:

:load Test