Итак, я сломаю свой вопрос на 4 части, но сначала немного фона:
Я чувствую себя относительно комфортно с Monads, но не очень удобен с Arrows. Я полагаю, что основная проблема, с которой я сталкиваюсь, заключается в том, что я не понимаю, для чего они полезны. Формально ли это правильно или нет, я понимаю, что Monads - это инструмент, который позволяет нам вводить побочные эффекты при вычислении. Поскольку они обобщают программные фрагменты от чистых значений до значений, помещенных в коробки с другими действиями. Из моего дробовика "прочитайте все документы", чтобы узнать о стрелках, я столкнулся с двумя противоречивыми точками зрения:
а. Стрелки более мощные, чем Monads/являются обобщениями Monads. Вики "haskell" начинаются с "Они могут делать все, что могут сделать монады, и многое другое. Они примерно сопоставимы с монадами со статическим компонентом".
В. Стрелки - это подмножество Monads С помощью ArrowApply мы можем определить монаду
- Есть ли какая-либо истина для точки зрения A?
- Какую функциональность стрелки не имеют, я читал, что разница имеет отношение к композиции, поэтому что оператор → > позволяет нам сделать это → = не?
- Что делает приложение точно? у этого типа нет даже (- > )
- Почему мы хотели бы использовать аппликативные стрелки над монадами?