这是我原来的questions:
的后续内容我知道monad不可合成,即如果M1[_]
和M2[_]
是monad M2[M1[_]]
,则不一定是monad。例如,List[Int]
和Option[Int]
是monad,但Option[List[Int]]
不是自动 monad,因此我需要monad transformer
将其用作monad (如here)
我知道应用函子是可组合的。我想这意味着如果A1[_]
和A2[_]
是适用的,那么A2[A1[_]]
总是一个应用程序。这是对的吗 ?
当A1
为List
且A2
为Option
时,您能举例说明此类作品吗?你能举一个其他应用程序组成的例子吗?
答案 0 :(得分:1)
我在前面的scalaz源中添加了一些相关的示例。我添加了使用组合Apply实例的示例(Apply是Applicative,没有point方法):
但是,对于我们M1[_]
和Applicative[M1]
我们拥有M2[_]
,Applicative[M2]
的任何M1[M2[_]]
都是适用的,您可以获得Applicative[M1] compose Applicative[M2]