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