你好,有人可以向我解释为什么这个自定义的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
?
答案 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