Confused by the meaning of the 'Alternative' type class and its relationship to other type classes
Я проходил черезTypeclassopedia учить классы типа. Я застрял пониманиеAlternative
(а такжеMonadPlus
, в этом отношении).
Проблемы, которые у меня возникают:
«Педия» говорит, что «класс альтернативных типов предназначен для аппликативных функторов, которые также имеют моноидную структуру». Я не понимаю, не означает ли «Альтернатива» нечто совершенно отличное от «Моноида»? Т.е. я понимал смысл класса альтернативных типов как выбор между двумя вещами, тогда как я понимал моноиды как объединение вещей.
почему Альтернатива нужнаempty
Способ / член? Я могу ошибаться, но это, кажется, не используется вообще ... по крайней мере, вкод Я мог бы найти. И это, кажется, не соответствует теме класса - если у меня есть две вещи, и мне нужно выбрать одну, для чего мне нужен «пустой»?
почему классу типа Alternative требуется аппликативное ограничение, и почему ему нужен вид* -> *
? Почему бы просто не иметь<|> :: a -> a -> a
? Все экземпляры могут быть реализованы одинаково ... Я думаю (не уверен). Какую ценность это обеспечивает, что Monoid не делает?
какой смыслMonadPlus
тип класс? Разве я не могу открыть все его достоинства, просто используя что-то какMonad
а такжеAlternative
? Почему бы просто не бросить это? (Я уверен, что ошибаюсь, но у меня нет никаких контрпримеров)
Надеюсь, все эти вопросы являются связными ...!
Обновление Bounty: @ Ответ Антала - отличное начало, но Q3 все еще открыт: что предлагает Альтернатива, чего нет у Monoid? я нахожуэтот ответ неудовлетворительный, поскольку в нем отсутствуют конкретные примеры и конкретное обсуждение того, как более высокая доброта Альтернативы отличает его от моноида.
Если это сочетать аппликативные эффекты с поведением Моноида, почему бы просто:
liftA2 mappend
Это еще больше сбивает меня с толку, потому что многие экземпляры Monoid точно такие же, как экземпляры Alternative.
Вот почему я ищуконкретные примеры это показывает, почему альтернатива необходима, и как она отличается - или означает что-то другое - от моноида.