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

Meaning of `t a -> b` in type of 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 可以是另一个 Foldable,例如 MaybeTreeEither 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