Почему `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
.