Разница в случае Alternative
. «Базовый» пакет не экспортирует ничего для Either
, как я полагаю, потому что авторы не хотели вводить смещение по отношению к какому-либо из значений, что само по себе является следствием того, что Either
должна быть общей суммой. тип, а не только для представления возможных ошибок. Однако пакет «преобразователи» предоставляет экземпляр-сироту , который связывает его с классом Error
:
Error e => Alternative (Either e)
Однако сообщество никогда не принимало ни этот класс типов, ни экземпляр-сироту, поэтому сейчас оно устарело. Теперь вы можете посмотреть на это так, как будто у Either
еще нет экземпляра Alternative
.
Тип Except
имеет не-сиротский экземпляр, который даже не привязывает пользователя к каким-либо выдуманным классам, но вместо этого Monoid
:
(Functor m, Monad m, Monoid e) => Alternative (ExceptT e m)