Карта по отказу проверки Scalaz
import scalaz._
import Scalaz._
"abc".parseInt
Это вернет a Validation[NumberFormatException, Int]
.
Есть ли способ, которым я могу применить функцию на стороне отказа (например, toString
), чтобы получить Validation[String, Int]
?
Ответы
Ответ 1
Существует пара методов <-:
и :->
, определенных на MAB[M[_,_], A, B]
, которые отображаются в левой и правой частях любого M[A, B]
, пока существует Bifunctor[M]
. Validation
является бифунтером, поэтому вы можете сделать это:
((_:NumberFormatException).toString) <-: "123".parseInt
Scala вывод типа обычно протекает слева направо, поэтому это на самом деле короче:
"123".parseInt.<-:(_.toString)
И требует меньше аннотации.
Ответ 2
В FailProjection есть функтор. Таким образом, вы могли бы сделать
v.fail.map(f).validation
(не указывать как FailProjection, валидация, чтобы выйти из него)
В качестве альтернативы
v.fold(f(_).failure, _.success)
Оба немного подробные. Может быть, кто-то более знакомый со сказазом может придумать что-то лучшее