如果我有一个值a: Free[Op, A]
,是否可以“展平”a
的结构,以便由免费monad绑定在一起的两个Op
可能会折叠成一个?
上下文:我想在解释之前将其作为优化步骤执行,因为Op
的语义是其操作是幂等的。因此,如果两个“连续出现”,则第二个可以免于程序语义的消除。
答案 0 :(得分:2)
据我所知,Free Monad程序无法进行这种内省,因为它表示顺序计算,其中每一步都取决于另一步的结果。
John de Goes关于Free Monad vs Free Applicative(https://www.youtube.com/watch?v=H28QqxO7Ihc)的利弊得到了很好的讨论。后者赋予了内省的力量。