scalaz.Validation
считается более мощным, чем монада Try
, поскольку он может накапливать ошибки.
Есть ли случаи, когда вы можете выбрать Try
над scalaz.Validation
или scalaz.\/
?
scalaz.Validation
считается более мощным, чем монада Try
, поскольку он может накапливать ошибки.
Есть ли случаи, когда вы можете выбрать Try
над scalaz.Validation
или scalaz.\/
?
Самый важный аргумент в пользу Try
заключается в том, что он находится в стандартной библиотеке. Он также используется в стандартной библиотеке, например, обратные вызовы, которые вы регистрируете с помощью Future
onComplete
, должны быть функциями от Try
. Его можно использовать более широко в стандартной библиотеке в будущем.
Тот факт, что он в стандартной библиотеке также означает, что он будет выглядеть знакомым для большего количества людей. Вероятно, вы захотите найти его в других сторонних библиотеках, которые вы используете. И, конечно, иногда вам не разрешается использовать Scalaz (или любые другие зависимости) или, возможно, захотите избежать Scalaz по другим вполне веским причинам.
Другие вещи: я не помню, как в прошлый раз я написал \/
, у которого не было Throwable
с левой стороны (у меня - это просто не то, что я часто делаю). Try
испекает это, поэтому вам не нужно беспокоиться о написании псевдонима или что-то еще.
Как отмечает senia в комментариях выше, возможно, что-то мало неинтересное относительно смещения однотипного типа, но все еще использующего язык "слева" и "right" (как \/
есть и делает). Почему \/
связывается с правой стороны? Потому что это так, поэтому. Я лично не нахожу, что это было неприемлемо, но я могу понять, почему некоторые люди могут это сделать. Try
устраняет проблему, имея имена конструкторов, которые четко указывают их семантику: Success
и Failure
, а не Left
и Right
или -\/
и \/-
.
Теперь, когда мы получаем совершенно поверхностные и субъективные причины использовать Try
, некоторые люди могут просто подумать, что \/
и -\/
и \/-
являются уродливыми. Я вообще не против оператора тяжелого кода, и я нахожу беспорядок косых черт и тире действительно неприятным для ввода и чтения.
Итак, это некоторые аргументы в пользу Try
, как и требовалось, но я завершу, сказав, что я никогда не использую его сам. Я не особо забочусь о том, что он нарушает законы монады (хотя я могу понять, почему люди это делают), но я найти \/
и Validation
гораздо менее ad-hoc и проще рассуждать, и мне нравится иметь доступ к обоим (Validation
когда я хочу накапливать ошибки, \/
когда мне нужно монадическое упорядочение) в одной структуре.