У меня есть объект ValidationScalaz проверки, проверки значения внутреннего
val v = Validation[String, Option[Int]]
, что нужно сделать вторую проверку, чтобы проверить, если фактическое значение целого числа равно 100, например. Если я
val vv = v.map(_.map(intValue => if (intValue == 100)
intValue.success[String]
else
"Bad value found".fail[Integer]))
я получаю:
Validation[String, Option[Validation[String, Int]]]
Как можно получить также в ст Validation [String, Option [Int]] в наиболее сжатой форме
==== =====
найдено возможное решение от моей:
val validation: Validation[String, Option[Int]] = Some(100).success[String]
val validatedTwice: Validation[String, Option[Int]] = validation.fold(
_ => validation, // if Failure then return it
_.map(validateValue _) getOrElse validation // validate Successful result
)
def validateValue(value: Int): Validation[String, Option[Int]] = {
if (value == 100)
Some(value).success[String]
else
"Bad value".fail[Option[Int]]
}
Выглядит не лаконичный и элегантный, хотя он работает
==============
Второе решение от моей, но и выглядит более-compicated:
val validatedTwice2: Validation[String, Option[Int]] = validation.flatMap(
_.map(validateValue _).map(_.map(Some(_))) getOrElse validation)
def validateValue(value: Int): Validation[String, Int] = {
if (value == 100)
value.success[String]
else
"Bad value".fail[Int]
}
Почему 'parseInt'? –