这是我旧问题的后续:questions:我知道单子不可组合,即如果M1[_]和M2[_]是单子,则M2[M1[_]]不一定是单子。例如,List[Int]和Option[Int]是单子,但Option[List[Int]]不是自动单子,因此我需要一个monad transformer来将其用作单子(如here)。我知道应用函子是可组合的。我猜这意味着如果A1[_]和A2[_]是应用函子,则A2[A1[_]]始终是应用函子。是正确的吗?您能否提供一个示例,其中A1为List,A2为Option时的组合?您能否举出其他组合的应用函子的例子?
我之前在scalaz源码中添加了一些相关示例。我添加了组合使用Apply实例的示例(Apply是没有point方法的Applicative): https://github.com/scalaz/scalaz/blob/series/7.2.x/example/src/main/scala/scalaz/example/ApplyUsage.scala#L132-L147 但是,对于任何我们拥有Applicative[M1]的M1[_]和我们拥有Applicative[M2]的M2[_],M1[M2[_]]都是可应用的,并且您可以使用Applicative[M1] compose Applicative[M2]获取Applicative实例。