Scala のMonads に関するJames Iry のブログ投稿を読んでいます。私はパート 3 にいて、Unit に関するモナドの第 2 法則に関する彼の説明について混乱しています。具体的には、この主張:
unit(x) flatMap f = f(x)
ジェームズの以前のモナド型の例である私の精神的な例を適用すると、これはうまくいかないようです
val x = 1
val f = (_:Int) * 2
f(x) == 2 //true
List(x) flatMap f == 2 //fail
Some(x) flatMap f == 2 //fail
実際のところ、型の問題のためにコンパイルさえしません。
明確にするために、これらが失敗する理由を理解しています。それらを修正してコンパイルする方法を理解しています。
私の混乱は、これらが記事で提示された理論と矛盾しているように見えるということです. 欠けているステップはありますか?これらの型は本当にモナドではないのですか? 「モナドの第 2 法則: 単位」というセクションは間違っていますか?