Scala 有效单体与游离单体的区别

Scala 有效单体与游离单体的区别,scala,functional-programming,Scala,Functional Programming,Eff-monad看起来比monad-transformers好得多,也更有用,可以用monad-transformation替换样板文件,但是Free-monad可以在执行和程序定义之间进行完全相同的划分,因此Eff-monad看起来像是开销。如果我遗漏了一些细微差别,请纠正我。Monad transformers是您每天都想使用的程序,例如,它让您在任务[Option[T]中映射和平面映射 Free和Eff解决了一个不同的问题:它们允许您为您的程序编写多个解释器(对于您的日常应用程序来说,这

Eff-monad
看起来比monad-transformers好得多,也更有用,可以用monad-transformation替换样板文件,但是
Free-monad
可以在执行和程序定义之间进行完全相同的划分,因此
Eff-monad
看起来像是开销。如果我遗漏了一些细微差别,请纠正我。

Monad transformers是您每天都想使用的程序,例如,它让您在
任务[Option[T]
映射
平面映射


Free
Eff
解决了一个不同的问题:它们允许您为您的程序编写多个解释器(对于您的日常应用程序来说,这很可能是矫枉过正)。它们都用于构建一元表达式
Eff
允许您将口译的“劳动”分成多个口译员,而使用
Free
您通常会将表达式“一次全部”从其
Free
结构转换为另一个单子。

Free
Eff
是否仅与口译的“劳动分割”概念不同?是,这是我的理解。请注意,在本例中“仅”指的是一系列3篇研究论文。似乎整个效果系统领域基本上都是经过充分分工的口译员模式。我认为,从论文中可以看出,Free和Eff的创建目标是能够完全删除与创建新单子相关的所有样板文件。但目前,他们仍在努力降低性能开销。