【发布时间】:2013-11-22 20:01:59
【问题描述】:
我想我想要 J 的 fork 功能。有没有办法做到这一点?
【问题讨论】:
-
通过询问
pointfree程序:pointfree "m h f g x = h (f x) (g x)"->m = liftM2。 @kqr 的答案是等效的,并且可能会更好,因为 Applicative 实例通常比 Monad 实例更有效。 -
@bheklilr 难道
pointfree建议liftM*它是在liftA*存在之前编写的吗?只要 applicative 是 monad 的超类,我们就可以将liftM2扔出窗外,不是吗? -
@kqr 我想是这样,或者可能只是
pointfree在Control.Applicative之前查找Control.Monad。是否可能存在liftA*与liftM*具有不同实现的 Monad?我的猜测是行为将是相同的,但由于 Applicatives 有时可以在 Monads 不能添加并行性的地方添加并行性,所以我暂时不会将liftM*扔出窗外。 -
@bheklilr 这取决于它们是否“允许”不同。
Monoid e => Either e承认一个整洁的Applicative不能形成一个Monad,但是一旦 Applicative-Monad 提案命中,它会变得更加奇怪,因为实例不同......