我正在阅读James Iry在 scala 中关于 Monads的博客文章。我在第三部分,我对他关于单元的单子第二定律的描述感到困惑。特别是这种说法:
unit(x) flatMap f = f(x)
当我应用我的心理示例时,这些示例是 jame 以前的一元类型示例,这似乎永远不会奏效
val x = 1
val f = (_:Int) * 2
f(x) == 2 //true
List(x) flatMap f == 2 //fail
Some(x) flatMap f == 2 //fail
事实上,由于类型问题,它们甚至没有编译。
为了澄清,我理解为什么这些都失败了。我了解如何修复它们以便它们编译。
我的困惑是,这些似乎与文章中提出的理论相冲突。我缺少一个步骤吗?这些类型不是真正的单子吗?题为“单子第二定律:单位”的部分不正确吗?