私はしばらくの間、FP 言語 (オンとオフ) を調べており、Scala、Haskell、F# などで遊んできました。私は見たものが好きで、FP の基本的な概念のいくつかを理解しています (圏論のバックグラウンドはまったくないので、数学については話さないでください)。
したがって、関数を取り、を返す型M[A]
が与えられます。しかし、関数を受け取って を返すものもあります。また、which を取り、 aを返すものもあります。map
A=>B
M[B]
flatMap
A=>M[B]
M[B]
flatten
M[M[A]]
M[A]
さらに、私が読んだソースの多くは、次のように説明flatMap
しmap
ていflatten
ます。
では、flatMap
が と同等のように思われる場合flatten compose map
、その目的は何ですか? この質問は実際には Scala 固有のものではないため、「理解のために」サポートするとは言わないでください。そして、私はその背後にある概念よりも、構文糖衣に関心がありません。Haskell のバインド演算子 ( >>=
) についても同じ疑問が生じます。どちらも圏論の概念に関連していると思いますが、私はその言語を話せません。
私は Brian Beckman の素晴らしいビデオDon't Fear the Monadを 2 回以上見たことがあります。これがモナド構成演算子であることがわかると思いますflatMap
が、彼がこの演算子を説明する方法で使用されているのを見たことがありません。この機能を実行しますか?もしそうなら、その概念をどのようにマッピングしflatMap
ますか?
ところで、私はこの質問について長い記事を書き、意味を理解するために実行した実験を示す多くのリストを作成し、この質問に遭遇して私flatMap
の質問のいくつかに答えました。ときどき、私は Scala の暗黙が嫌いです。彼らは本当に水を濁らせることができます。:)