Scala 中的应用组合示例
Example of Applicative composition in Scala
这是我的旧 questions 的后续:
我知道 monad 不可组合,即如果 M1[_]
和 M2[_]
是 monad M2[M1[_]]
不一定是 monad。例如,List[Int]
和 Option[Int]
是单子,但 Option[List[Int]]
不是 自动 单子,因此我需要一个 monad transformer
来使用它作为 monad(如 here)
我知道应用函子是可组合的。我想这意味着如果 A1[_]
和 A2[_]
是应用程序,那么 A2[A1[_]]
是 always 一个应用程序。这是对的吗 ?
当 A1
是 List
并且 A2
是 Option
时,你能提供这样一个组合的例子吗?你能举一个其他应用程序组成的例子吗?
我不久前在 scalaz 源代码中添加了一些相关的示例。我添加了使用组合 Apply 实例的示例(没有 point 方法的 Apply 是 Applicative):
但是是的,对于我们有 Applicative[M1]
的任何 M1[_]
和我们有 Applicative[M2]
的 M2[_]
,M1[M2[_]]
是适用的,你可以通过 Applicative[M1] compose Applicative[M2]
获取 Applicative 实例
这是我的旧 questions 的后续:
我知道 monad 不可组合,即如果 M1[_]
和 M2[_]
是 monad M2[M1[_]]
不一定是 monad。例如,List[Int]
和 Option[Int]
是单子,但 Option[List[Int]]
不是 自动 单子,因此我需要一个 monad transformer
来使用它作为 monad(如 here)
我知道应用函子是可组合的。我想这意味着如果 A1[_]
和 A2[_]
是应用程序,那么 A2[A1[_]]
是 always 一个应用程序。这是对的吗 ?
当 A1
是 List
并且 A2
是 Option
时,你能提供这样一个组合的例子吗?你能举一个其他应用程序组成的例子吗?
我不久前在 scalaz 源代码中添加了一些相关的示例。我添加了使用组合 Apply 实例的示例(没有 point 方法的 Apply 是 Applicative):
但是是的,对于我们有 Applicative[M1]
的任何 M1[_]
和我们有 Applicative[M2]
的 M2[_]
,M1[M2[_]]
是适用的,你可以通过 Applicative[M1] compose Applicative[M2]