为什么 `join` 不是 `Monad` 的一部分 class
Why isn't `join` part of the `Monad` class
众所周知,(>>=)
可以用fmap
和join
实现,而join
可以用>>=
实现。我们有什么理由不定义包含 join
的 Monad
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 本来就是这样的,它无限期推迟了您建议的实施。
众所周知,(>>=)
可以用fmap
和join
实现,而join
可以用>>=
实现。我们有什么理由不定义包含 join
的 Monad
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 本来就是这样的,它无限期推迟了您建议的实施。