7

foldr据我了解,foldMap可以用来定义彼此。但这怎么可能,因为后者使用幺半群,而前者却没有?我们能保证foldr工作的东西可以有一个幺半群吗?

4

1 回答 1

8
foldr :: (a -> b -> b) -> b -> [a] -> b

注意a -> b -> ba -> (b -> b). 函数b -> b在组合下形成一个幺半群。

请注意这类似于

foldMap :: (..omitted..) => (a -> m) -> f a -> m

唯一的区别是 foldMap 不使用 type bof的“零”参数fold并返回 an m,根据will foldrbe b->b。现在只需将一个应用到另一个,您就可以foldrfoldMap.

于 2016-05-29T18:14:49.480 回答