Pet*_*lák 25 monads continuations haskell free-monad
据说,所有的monad都可以使用Free
(如果这不是真的,什么是反例和为什么)?如何使用或表示延续monad或其相应的变换器? - 相应的仿函数是什么?或者,如果他们不能,那是什么原因?Free
FreeT
更新:通过表达我的意思基本上是同构的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
通过get
与put s
和Either 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的商.
希望有人可以来并整理我的技术细节,但这是你想要的证明的结构.