В Nick Partridge's presentation on deriving scalaz, на базе старой версии scalaz, он вводит валидации с использованием функции:scalaz 7 эквивалента `<|*|>` от scalaz 6
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)
^
Каков 7 эквивалент этого комбинатора?
не вы, а хотите ли использовать '| @ |' оператор? Видео, которое вы опубликовали, не упоминает об этом, но вы можете узнать об этом подробнее: http://eed3si9n.com/learning-scalaz/Validation.html – mjaskowski
В частности, вы можете написать 'scala> (even (1) | @ | even (2) | @ | even (3)) {_ + _ + _} '' Ошибка (NonEmptyList (даже не: 1, даже не: 3)) 'и ' scala> (даже (2) | @ | even (4) | @ | even (6)) {_ + _ + _}) '' Успех (12) ' –
mjaskowski
@mjaskowski' | @ | 'очень общий, и в тех случаях, когда вы просто хотите для zip вместе два значения в кортеже, 'tuple' (ранее известный как' <|*|> ') более уместен. –