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

Why isn't `join` part of the `Monad` class

众所周知,(>>=)可以用fmapjoin实现,而join可以用>>=实现。我们有什么理由不定义包含 joinMonad class 并使用以下默认定义?

join x  = x >>= id
x >>= f = join $ f <$> x

这将允许最小定义仅包含 (>>=)join,而不是强制包含 (>>=)。考虑到类别理论倾向于支持 join

可能会有点帮助

反对修改 classes 的通常论点是我们破坏了向后兼容性。然而,在这种情况下,这不会发生——我们只增加了使用 join.

定义 Monad 的可能性

GHC 中的 Applicative-Monad proposal (which has made it to GHC 7.10). However, there is a technical issue involving type roles 本来就是这样的,它无限期推迟了您建议的实施。