- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Monad
之间的区别之一的理解和 Applicative
是flatMap
可在 Monad
上找到,但不是 Applicative
.
如果这是真的,我对这些 Scala Play JSON 感到困惑 docs :
So what’s interesting there is that JsResult[A] is a monadic structure and can be used with classic functions of such structures:
flatMap[X](f: A => JsResult[X]): JsResult[X]
etc
Please note that JsResult[A] is not just Monadic but Applicative because it cumulates errors. This cumulative feature makes JsResult[T] makes it not very good to be used with for comprehension because you’ll get only the first error and not all.
for-comprehension
是
flatMap
的语法糖,怎么能
JsResult
都是
Applicative
和
Monad
?
最佳答案
Monad
是 Applicative
的子类. Applicative
的 apply
操作弱于flatMap
.因此apply
可以按照 flatMap
实现.
但是 ,在 JsResult
(或实际上 Reads
)的情况下,它具有利用 Applicative
的特殊实现计算的静态形式。
例如。下面的两个定义与正确的 JSON 表现相同,但 Applicative
(使用 and
)在错误情况下有更好的错误消息(例如,如果 bar
和 quux
都无效,则提及):
val applicativeReads: Reads[Foo] = (
(__ \ "bar").read[Int] and
(__ \ "quux").read[String]
)(Foo.apply _)
val monadicReads: Reads[Foo] = for {
bar <- (__ \ "bar").read[Int]
quux <- (__ \ "quux").read[String]
} yield Foo(bar, quux)
关于scala - JsResult - Monad 还是 Applicative?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189273/
我正在尝试为 stripe 创建一个 API,其中涉及大量从 Json 到 case 类的映射(反之亦然)。我遇到了一个问题,我最终得到一个 List[JsResult[A]] (这是通过 JObje
我正在尝试为 stripe 创建一个 API,其中涉及大量从 Json 到 case 类的映射(反之亦然)。我遇到了一个问题,我最终得到一个 List[JsResult[A]] (这是通过 JObje
我对 Monad 之间的区别之一的理解和 Applicative是flatMap可在 Monad 上找到,但不是 Applicative . 如果这是真的,我对这些 Scala Play JSON 感
我有一个 JsArray,其中包含代表两种不同类型实体的 JsValue 对象 - 其中一些代表节点,另一部分代表 边缘。 在 Scala 方面,已经有名为 Node 和 Edge 的案例类,它们的父
我是一名优秀的程序员,十分优秀!