为什么'join`不是`Monad`类的一部分

时间:2015-07-22 00:48:01

标签: haskell monads

众所周知,(>>=)可以使用fmapjoin来实现,而join可以使用>>=来实现。我们是否有任何理由不定义包含Monad的{​​{1}}类并使用以下默认定义?

join

这将允许最小定义包括join x = x >>= id x >>= f = join $ f <$> x (>>=),而不是强制join。考虑到类别理论倾向于(>>=)

,可能会有点帮助

反对修改类的常见理由是我们打破了向后兼容性。但是,在这种情况下,这不会发生 - 我们只添加使用join定义Monad的可能性。

1 个答案:

答案 0 :(得分:21)

这意味着发生在Applicative-Monad proposal(已经进入GHC 7.10)。但是,GHC中a technical issue涉及type roles,无限期推迟了您的建议实施。