优化免费Monad

时间:2016-09-30 14:59:00

标签: scala functional-programming free-monad scala-cats recursion-schemes

如果我有一个值a: Free[Op, A],是否可以“展平”a的结构,以便由免费monad绑定在一起的两个Op可能会折叠成一个?

上下文:我想在解释之前将其作为优化步骤执行,因为Op的语义是其操作是幂等的。因此,如果两个“连续出现”,则第二个可以免于程序语义的消除。

1 个答案:

答案 0 :(得分:2)

据我所知,Free Monad程序无法进行这种内省,因为它表示顺序计算,其中每一步都取决于另一步的结果。

John de Goes关于Free Monad vs Free Applicative(https://www.youtube.com/watch?v=H28QqxO7Ihc)的利弊得到了很好的讨论。后者赋予了内省的力量。