如何使用免费monad表达延续monad?

Pet*_*lák 25 monads continuations haskell free-monad

据说,所有的monad都可以使用Free(如果这不是真的,什么是反例和为什么)?如何使用或表示延续monad或其相应的变换器? - 相应的仿函数是什么?或者,如果他们不能,那是什么原因?FreeFreeT

更新:通过表达我的意思基本上是同构的Free F地方F就是我们要找的,例如像仿函数Writer w是同构的Free ((,) w).

Tom*_*lis 13

延续monad 你正在寻找的反例.我知识不足以提供完整的证明,但我会给你几个参考资料.

这个想法是monad有一个与它们相关的"等级"概念."Rank"大致意味着提供monad的全部功能所需的操作数.

我怀疑,有延续衍生单子外,所有我们在Haskell处理单子有秩,例如Identity,Maybe,State s,Either e,...,以及它们的组合,通过他们的变压器.例如,Identity通过任何操作产生的,Maybe是由生成Nothing,State s通过getput sEither e通过Left e.(也许这表明它们实际上都具有有限的等级,或者可能被put s视为每个的不同操作s,所以State s具有大小的等级s,我不确定.)

免费monad肯定有排名,因为它Free f是由编码的操作显式生成的f.

这是排名的技术定义,但它不是很有启发性:http://journals.cambridge.org/action/displayAbstract?aid = 4759448

在这里你可以看到延续monad没有等级的声明:http://www.cs.bham.ac.uk/~hxt/cw04/hyland.pdf.我不确定他们是如何证明这一点的,但其含义是延续monad不是由任何操作集合产生的,因此不能表示为(一个)免费monad的商.

希望有人可以来并整理我的技术细节,但这是你想要的证明的结构.