3

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

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

4

1 回答 1

3

据我了解,没有办法对 Free Monad 程序进行这种自省,因为它代表顺序计算,其中每个步骤都取决于另一个步骤的结果。

John de Goes 就 Free Monad 与 Free Applicative 的优缺点进行了精彩的演讲(https://www.youtube.com/watch?v=H28QqxO7Ihc)。后者赋予内省的力量。

于 2016-10-06T13:35:13.067 回答