Я начал использовать Scalaz 7 Validation and/or disjunction для обработки списка возможных неудачных операций и управления их результатом.
Есть два хорошо задокументированных случая для такого рода вариантов использования:
1/Вы хотите проверить список условий для чего-то и накопить каждую ошибку, если таковая имеется. Здесь вы всегда идете в конец списка, и в случае какой-либо ошибки у вас будет сбой как глобальный результат. И это аппликативный функтор в действии.
2/Вы хотите выполнить несколько шагов, которые могут завершиться неудачно, и остановиться на первом из них. Здесь у нас есть монада, которая отлично подходит для -понимания Scala.
Итак, у меня есть два других варианта использования, которые относятся к одним и тем же линиям, но, похоже, не подходят для любого прецедентного случая :. Я хочу обработать список шагов, возможно, неудачных, и собрать как результаты ошибок, так и успешных результатов (ex :это список изменений в файлах, ошибки могут возникать, потому что это внешний мир, и успех - это исправление, которое я хочу оставить на потом ).
Разница в двух вариантах использования заключается только в том, что я хочу остановиться раньше (при первой ошибке )или перейти в конец списка.
Хорошо, так что же для этого нужно?
(написание вопроса заставляет меня думать, что это просто foldLeft, не так ли? Я оставлю вопрос здесь для проверки, и если кто-то еще задастся вопросом)