在foldl的类型中,`t a -> b` 的含义是什么?

3

我已经检查了foldl函数的签名,这是结果:

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

我对这部分代码 t a ->b 感到困惑,这部分是什么意思?
我的猜想是它表示 foldl 函数的第三个参数是一个包含类型为 a 的元素的 Foldable 数据结构,我的猜测正确吗?

1个回答

1

是的tFoldable 类型类的成员,因此它可以对 a 中的元素进行折叠。

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

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

或者说不太规范:
foldl :: (b -> a -> b) -> b -> [a] -> b

但是 t 可以是另一个类似于 MaybeTreeEither cFoldable。因此我们可以在这样的数据结构上使用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接