【发布时间】:2017-10-17 12:09:57
【问题描述】:
所以我终于明白了为什么 Applicatives 对表示并行执行非常有用,而 Monads 对于表示顺序执行非常有用。
话虽如此,我也明白 Monads 比 Applicatives 更强大,那么我可以用 bind 函数来表示 ap 函数吗?
换句话说...我可以用 Monads 表示并行执行吗?
【问题讨论】:
-
阅读this answer,了解“更强大”的含义和含义。
-
"我可以用绑定函数来表示 ap 函数吗?" - 可以。每个 monad 都是一个应用程序(你可能需要
of+bind)。 “我可以用 Monads 表示并行执行吗?” 也许,但不太可能。并非每个应用程序都是 monad。 “换句话说...” - 不,这是两个非常不同的问题。 -
"每个 monad 都是一个应用程序" & "应用程序对于表示并行执行很有用" = _"我可以用 Monads 表示执行"。 ..对吗?
-
没有。您对并行执行的表示(不幸的是您没有发布)可能符合应用法则,但单子法则可能不适用。如果它一开始就不是 monad,那么每个 monad 都是应用程序也无济于事。
-
我开始认为您只是在寻找与
ap类似类型的东西,它做完全不同的事情:-) 是的,并行性通常是明确的,除非它纯粹被视为没有经过推理的实现优化。
标签: scala haskell monads applicative