map
リストの操作を簡略化するために存在し、歴史的な理由から(fmapがある場合のHaskellのmapのポイントは何ですか?を参照)。
別のマップ関数が必要な理由を尋ねるかもしれません。現在のリストのみのマップ関数を廃止し、代わりにfmapの名前をmapに変更しないのはなぜですか?まあ、それは良い質問です。通常の議論は、Haskellを学んだばかりの人は、mapを誤って使用すると、Functorについてではなく、リストについてのエラーを見たほうがよいということです。
- Typeclassopedia、ページ20
fmap
そしてliftM
、モナドはHaskellでは自動的にファンクタではなかったので存在します:
fmapとliftMの両方があるという事実は、数学的にはすべてのモナドがファンクターであるにもかかわらず、Monad型クラスがFunctorインスタンスを必要としないという事実の不幸な結果です。ただし、fmapとliftMは基本的に交換可能です。これは、Functorのインスタンスではなく、どのタイプもMonadのインスタンスになるのは(技術的な意味ではなく社会的な意味での)バグであるためです。
- Typeclassopedia頁33
編集:のagustussの歴史map
とfmap
:
それは実際にそれが起こる方法ではありません。起こったのは、マップのタイプがHaskell 1.3のFunctorをカバーするように一般化されたことです。つまり、Haskell 1.3ではfmapはmapと呼ばれていました。この変更はHaskell 1.4で元に戻され、fmapが導入されました。この変更の理由は教育的でした。初心者にHaskellを教えるとき、非常に一般的なタイプのマップはエラーメッセージを理解することをより困難にしました。私の意見では、これは問題を解決する正しい方法ではありませんでした。
- FMAPがあるハスケル、内マップのポイントは何ですか?