Почему `join` не является частью класса` Monad` [дубликаты]

На этот вопрос уже есть ответ здесь:

Почему соединение является автономным, а не частью минимальной реализации класса типов Monad? 3 ответа

Это хорошо известный факт, что(>>=) может быть реализовано с помощьюfmap а такжеjoin в то время какjoin может быть реализовано с помощью>>=, Есть ли причина, по которой мы не определяемMonad класс сjoin включены и используются следующие определения по умолчанию?

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

Это позволило бы минимальному определению включить либо просто(>>=) или жеjoinвместо принуждения(>>=), Может быть немного полезно, учитывая, что теория категорий имеет тенденциюjoin.

Обычный аргумент против изменения классов заключается в том, что мы нарушаем обратную совместимость. Однако в этом случае этого не произойдет - мы только добавим возможность определенияMonad с помощьюjoin.

Ответы на вопрос(1)

Ваш ответ на вопрос