`t a -> b` 在 foldl 类型中的含义

问题描述

我检查了 foldl 函数的签名,结果如下:

> :t foldl
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b

我对这部分感到困惑t a ->b这部分是什么意思?
我的猜测是否正确,这意味着 foldl 函数的第三个参数是一个 Foldable 数据结构,其中包含类型为 a 的元素?

解决方法

即可。 tFoldable类型类中的一员,而且我们因此有过的a

元素的可折叠

如果例如tt ~ [],则签名是:

foldl :: (b -> a -> b) -> b -> [] a -> b

以下规范:

foldl :: (b -> a -> b) -> b -> [a] -> b

但是,t可以是另一FoldableMaybeTreeEither c,等。因此,我们可以使用Foldl这样结构:

foldl :: (b -> a -> b) -> b -> [a] -> b
foldl :: (b -> a -> b) -> b -> Maybe a -> b
foldl :: (b -> a -> b) -> b -> Tree a -> b
foldl :: (b -> a -> b) -> b -> Either c a -> b