据我所知, foldr foldMap 可用于彼此定义。但是这怎么可能呢,因为后者使用了类人动物,而前者却没有?我们是否可以保证foldr所处理的内容可以具有monoid?

最佳答案

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

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

请注意这是如何
foldMap :: (..omitted..) => (a -> m) -> f a -> m

唯一的区别是foldMap不使用bfold类型的“零”参数,而是返回一个m,就foldr而言,它就是b->b。现在,将一个应用到另一个,您已经从foldr中恢复了foldMap

关于haskell - 当foldr与monoid没有任何关系时,foldMap如何与foldr相同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37513123/

10-14 00:40