@pythonMyLife

Кто такие Альтернативные функторы?

Изучаю Haskell, понимаю кто такие и Функторы и Аппиликативные Функторы, однако почти ничего не нашёл в рунете про Альтернативные Функторы, доки читал, однако с моим уровнем английского и почти полное отсутствие примеров меня сдерживают.

Можете, пожалуйста, порекоммендовать какие-либо ресурсы на русском или примеры с простым использованием

P. S.: Перечитал доки, там написано что это Моноид на Аппликативном Функторе. Ну что такое моноид я очень хорошо знаю.
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
@AlexSku
не буду отвечать из-за модератора
Если плясать от операции объединения моноида (<>), то для чисел сделаны два newtype Sum и Product, то бишь сумма и произведение. Вот для монад списка Monad это произведение
[(a,b) | a <- [1,2], b <- [3,4] ] -- будет [(1,3),(1,4),(2,3),(2,4)] (генератор списка это синтак. сахар для монады)
т.е. перебор каждого с каждым, а для MonadPlus это сложение (соединение)
[1,2] <|> [3,4] -- будет [1,2,3,4]
Alternative же это то же, что и MonadPlus, просто MonadPlus появился раньше.
Кстати Applicative (от которого идут монады) тоже имеет оператор произведения:
(,) <$> [1,2] <*> [3,4] -- будет [(1,3),(1,4),(2,3),(2,4)]

Alternative для Maybe реализует newtype First, т.е. первый "ненулевой" элемент (если есть).

Применяется в парсерах. Напр., если надо чтобы строка начиналась с буквы или цифры, запускаете два парсера через <|>.
Посмотреть можно на Степике, 2-я часть Haskell, уроки про парсеры (урок 1) и Alternative / MonadPlus (урок 2.5)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@potan
Функциональный программист
Проще всего считать что простой функтор может поднимать под себя функцию от одного аргумента, а аппликативные - от произвольного.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы