Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
foldr据我了解,foldMap可以用来定义彼此。但这怎么可能,因为后者使用幺半群,而前者却没有?我们能保证foldr工作的东西可以有一个幺半群吗?
foldr
foldMap
foldr :: (a -> b -> b) -> b -> [a] -> b
注意a -> b -> b是a -> (b -> b). 函数b -> b在组合下形成一个幺半群。
a -> b -> b
a -> (b -> b)
b -> b
请注意这类似于
foldMap :: (..omitted..) => (a -> m) -> f a -> m
唯一的区别是 foldMap 不使用 type bof的“零”参数fold并返回 an m,根据will foldrbe b->b。现在只需将一个应用到另一个,您就可以foldr从foldMap.
b
fold
m
b->b