In Nick Partridge's presentation on deriving scalaz, sulla base di una versione precedente di scalaz, introduce convalide utilizzando una funzione:scalaz 7 equivalente di `<|*|>` da scalaz 6
def even(x: Int): Validation[NonEmptyList[String], Int] =
if (x % 2 == 0) x.success else { s"not even: $x".wrapNel.failure }
Poi si combina questo con
even(1) <|*|> even(2)
che applica il test e restituisce una convalida con il messaggio di errore. Utilizzo di scalaz 7 Ottiene
scala> even(1) <|*|> even(2)
<console>:18: error: value <|*|> is not a member of scalaz.Validation[scalaz.NonEmptyList[String],Int]
even(1) <|*|> even(2)
^
Qual è l'equivalente di scalaz 7 di questo combinatore?
Non ti piuttosto vuole utilizzare '|' operatore | @? Il video che hai postato non lo menziona ma puoi scoprirne di più qui: http://eed3si9n.com/learning-scalaz/Validation.html – mjaskowski
In particolare puoi quindi scrivere 'scala> (even (1) | @ | even (2) | @ | even (3)) {_ + _ + _} '' Errore (NonEmptyList (nemmeno: 1, nemmeno: 3)) 'e ' scala> (pari (2) | @ | even (4) | @ | even (6)) {_ + _ + _}) '' Success (12) ' –
mjaskowski
@mjaskowski' | @ | 'è molto generico e nei casi in cui si desidera per comprimere insieme due valori in una tupla, 'tuple' (precedentemente noto come' <|*|> ') è più appropriato. –