Подтвердить что ты не робот

Карта по отказу проверки Scalaz

import scalaz._
import Scalaz._

"abc".parseInt

Это вернет a Validation[NumberFormatException, Int]. Есть ли способ, которым я могу применить функцию на стороне отказа (например, toString), чтобы получить Validation[String, Int]?

4b9b3361

Ответ 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)

Оба немного подробные. Может быть, кто-то более знакомый со сказазом может придумать что-то лучшее