至少可以追溯到 1990 年代后期,有人希望以友好的方式将受限单子集成到 Haskell 中。
例如,如果没有受限制的 monad,您将无法从 或概率分布中创建Set
有效Map
的monad。这是几年前的一个 SO问题,其他人遇到了这个问题。
人们提出了各种解决方法,包括:
为每个可能的限制创建一个新的类型类。
使用模板 Haskell。
使用约束种类。
然而,这些方法似乎都不是“规范的”。我在 2007 年的这篇博文中找到了来自 Don Stewart 的评论,他在其中暗示我们“非常接近”拥有带索引类型的受限 monad 。
目前的状态是什么?现在有一种“规范”的方式来做受限制的单子吗?还是我们仍然生活在变通方法中?