私はscalaのモナドの概念を理解しようとしています。モナドに関連するさまざまな用語があります。モナド型クラス、モナド型、モナド操作、モナドコレクションなど。モナドコレクションは非モナド操作をサポートできますか?Scalaのモナドに関連するさまざまな用語をわかりやすく説明することは可能ですか?
モナドコレクションは非モナド操作をサポートできますか
モナドのコレクションは、2つのメソッドを定義する必要がありますpure
とbind
。最も重要なことは、アイデンティティ(右と左)と結合性のモナドの法則に従わなければなりません。
このようなコレクションはList[A]
Scalaにあり、pure
applyメソッドを介して次のようになります。
val l: List[Int] = List(1,2,3)
そしてflatMap
(bind
):
val flat = l.flatMap(i => List(i))
val f: Int => List[Int] = x => List(x + 1)
val x = 1
val left = List(x).flatMap(f)
val right = f(x)
left == right
val y = List(1)
val left = y.flatMap(List(_))
val right = y
left == right
val f: Int => List[Int] = x => List(x + 1)
val g: Int => List[Int] = x => List(x + 2)
val list = List(1,2,3)
val left = list.flatMap(f).flatMap(g)
val right = list.flatMap(x => f(x).flatMap(g))
left == right
あなたが見ることができるように、List[A]
また、モナドの定義の一部ではない他の操作、などのサポートmap
(事実によって自由のために与えられているがList[A]
モナドであり、すべてのモナドもファンクタである)、 、filter
、foldLeft
など
あなたの質問に答えるために:はい、モナドプロパティを持つコレクションは、モナドによって定義された操作以上のものをサポートできます。
より具体的には、それは型クラスList[A]
を実装するモナドコレクションであり、Monad[List]
それによってモナド操作を持つモナド型であると言えます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加