当 foldr 与幺半群没有任何关系时,foldMap 如何与 foldr 做同样的事情?
How can foldMap do the same as foldr when the latter does not have anything to do with monoids?
foldr
and foldMap
可以用我的理解互相定义。但这怎么可能,因为后者使用幺半群,而前者没有?我们能保证 foldr
处理的东西可以有一个幺半群吗?
foldr :: (a -> b -> b) -> b -> [a] -> b
请注意 a -> b -> b
是 a -> (b -> b)
。函数 b -> b
在组合下形成一个幺半群。
请注意这有何相似之处
foldMap :: (..omitted..) => (a -> m) -> f a -> m
唯一的区别是 foldMap 不使用 fold
和 returns 和 m
类型 b
的 "zero" 参数,这在foldr
的条款将是 b->b
。现在只需将一个应用到另一个,您就可以从 foldMap
.
恢复 foldr
foldr
and foldMap
可以用我的理解互相定义。但这怎么可能,因为后者使用幺半群,而前者没有?我们能保证 foldr
处理的东西可以有一个幺半群吗?
foldr :: (a -> b -> b) -> b -> [a] -> b
请注意 a -> b -> b
是 a -> (b -> b)
。函数 b -> b
在组合下形成一个幺半群。
请注意这有何相似之处
foldMap :: (..omitted..) => (a -> m) -> f a -> m
唯一的区别是 foldMap 不使用 fold
和 returns 和 m
类型 b
的 "zero" 参数,这在foldr
的条款将是 b->b
。现在只需将一个应用到另一个,您就可以从 foldMap
.
foldr