如果后者与幺半群没有任何关系,那么foldMap如何与foldr一样?

时间:2016-05-29 17:57:17

标签: haskell fold monoids

根据我的理解,

foldrfoldMap可用于定义彼此。但这怎么可能,因为后者使用幺半群,而前者不是?我们是否有任何保证foldr工作的东西可以有一个幺半群?

1 个答案:

答案 0 :(得分:6)

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

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

注意这是如何类似

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

唯一的区别是foldMap不使用b类型fold的“零”参数,并返回mfoldrb->bfoldr。现在只需将一个应用于另一个,您就可以从foldMap恢复{{1}}。