答案 0 :(得分:6)
foldr :: (a -> b -> b) -> b -> [a] -> b
请注意,a -> b -> b
为a -> (b -> b)
。函数b -> b
在组合下形成一个幺半群。
注意这是如何类似
foldMap :: (..omitted..) => (a -> m) -> f a -> m
唯一的区别是foldMap不使用b
类型fold
的“零”参数,并返回m
,foldr
将b->b
是foldr
。现在只需将一个应用于另一个,您就可以从foldMap
恢复{{1}}。