24

至少可以追溯到 1990 年代后期,有人希望以友好的方式将受限单子集成到 Haskell 中。

例如,如果没有受限制的 monad,您将无法从 或概率分布中创建Set有效Mapmonad。这是几年前的一个 SO问题,其他人遇到了这个问题。

人们提出了各种解决方法,包括:

然而,这些方法似乎都不是“规范的”。我在 2007 年的这篇博文中找到了来自 Don Stewart 的评论,他在其中暗示我们“非常接近”拥有带索引类型的受限 monad 。

目前的状态是什么?现在有一种“规范”的方式来做受限制的单子吗?还是我们仍然生活在变通方法中?

4

2 回答 2

12

Anders Persson、Emil Axelsson 和 Josef Svenningson 最近发表了一篇论文,展示了一种编码受限单子的方法。我忘记了细节,但我记得那是一篇不错的论文。

佩尔松,A。阿克塞尔森,E。斯文宁森,J. (2011)。嵌入式语言的通用单子结构。IFL 2011,第 23 届函数式语言实现与应用研讨会。

于 2012-07-22T18:48:06.787 回答
11

实际上,有可能获得一个有效的 Set monad 作为常规 monad,没有任何限制。以两种不同的方式。以下文章解释了这两种情况:

http://okmij.org/ftp/Haskell/set-monad.html

该文章还指出,受限制的单子实际上非常受限制,并且排除了许多单子成语。我猜想实现方法是通用的,任何受限制的monad都可以变成通常的monad,而不会损失效率。所以,看起来我们根本不需要受限单子。

于 2013-07-26T06:26:26.677 回答