Mic*_*ael 0 monads functional-programming scala
我正在读一篇关于"monadic law" 的文章.该文提到的第一部法律是:
m map f ? m flatMap {x => unit(f(x))}
对于Scala,Option它意味着:
option map f ? option flatMap {x => Option(f(x))}
现在我想知道法律观点是什么.为什么法律很重要?如果斯卡拉Option不遵守这项法律怎么办?
如果它不遵守monad法律则不是monad.这实际上是为什么unit的Option是Some.apply,不Option.apply.看看这个案例:
scala> val f = (x: Int) => null
scala> (option map f) == (option flatMap {x => Option(f(x))})
res4: Boolean = false
Run Code Online (Sandbox Code Playgroud)
这里的特定法律只是说,这map基本上是flatMap和的组合unit