2016-05-29 6 views
6

foldrおよびfoldMapは、私が理解するようにお互いを定義するために使用できます。しかし、後者はモノイドを使用するので、前者はできませんが、どのように可能ですか? foldrの作品がモノイドを持つことができるという保証はありますか?後者がモノイドと関係がないとき、foldMapはfoldrと同じようにできますか?

+0

[Tom Ellis '"foldrは何で作られていますか?"](http://web.jaguarpaw.co.uk/~tom/blog/posts/2012-11-04-what -is-foldr-made-of.html)と[Brent Yorgeyの反応「foldrはモノイドでできている」](https://byorgey.wordpress.com/2012/11/05/foldr-is-made-of - モノイド/)。 –

答えて

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

a -> (b -> b)です。機能b -> bは、組成の下にモノイドを形成する。これは

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

唯一の違いに似ているか

注foldMapがfoldの種類bの「ゼロ」引数を使用しないことであるとfoldrの面でb->bだろうmを返します。もう片方を適用してfoldrfoldMapから回復しました。

+0

typoを修正していただきありがとうございます;) –

関連する問題