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
?
类型的元素
是。 t
是 Foldable
类型类的成员,因此我们可以折叠 a
.
的元素
如果 t
是 t ~ []
,那么签名是:
foldl :: (b -> a -> b) -> b -> [] a -> b
或不太规范:
foldl :: (b -> a -> b) -> b -> [a] -> b
但是 t
可以是另一个 Foldable
,例如 Maybe
、Tree
、Either 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
我检查了 foldl
函数的签名,这是结果:
> :t foldl
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
我对这部分感到困惑t a ->b
这部分是什么意思?
我的猜测是否正确,这意味着 foldl
函数的第三个参数是一个 Foldable
数据结构,其中包含 a
?
是。 t
是 Foldable
类型类的成员,因此我们可以折叠 a
.
如果 t
是 t ~ []
,那么签名是:
foldl :: (b -> a -> b) -> b -> [] a -> b
或不太规范:
foldl :: (b -> a -> b) -> b -> [a] -> b
但是 t
可以是另一个 Foldable
,例如 Maybe
、Tree
、Either 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