В презентации Ника Партриджа о получении scalaz, основанной на старой версии scalaz, он вводит проверки с помощью функции:
def even(x: Int): Validation[NonEmptyList[String], Int] =
if (x % 2 == 0) x.success else { s"not even: $x".wrapNel.failure }
Затем он объединяет это, используя
even(1) <|*|> even(2)
который применяет тест и возвращает подтверждение с сообщением об ошибке. Используя scalaz 7, я получаю
scala> even(1) <|*|> even(2)
<console>:18: error: value <|*|> is not a member of scalaz.Validation[scalaz.NonEmptyList[String],Int]
even(1) <|*|> even(2)
^
Что такое scalaz 7 эквивалент этого комбинатора?
|@|
? В опубликованном вами видео это не упоминается, но вы можете узнать больше об этом здесь: eed3si9n.com/ Learning-scalaz/Validation.html - person mjaskowski   schedule 08.10.2015scala> (even(1) |@| even(2) |@| even(3)) { _ + _ + _}
<console>Failure(NonEmptyList(not even: 1, not even: 3))
иscala> (even(2) |@| even(4) |@| even(6)) { _ + _ + _})
<console> Success(12)
- person mjaskowski   schedule 08.10.2015|@|
является очень общим, и в тех случаях, когда вы просто хотите объединить два значения в кортеж, более подходящим являетсяtuple
(ранее известный как<|*|>
). - person Travis Brown   schedule 08.10.2015