Skip to content

Instantly share code, notes, and snippets.

@mmenestret
Created February 6, 2019 09:13
Show Gist options
  • Save mmenestret/a89342c7206a87546fd015834ee51f2b to your computer and use it in GitHub Desktop.
Save mmenestret/a89342c7206a87546fd015834ee51f2b to your computer and use it in GitHub Desktop.
object Validation extends App {
object FailFast {
def validationEven(i: Int): Either[String, Int] = if (i % 2 == 0) Right(i) else Left("Odd")
def validationLT100(i: Int): Either[String, Int] = if (i < 100) Right(i) else Left("GT 100")
def validationGT0(i: Int): Either[String, Int] = if (i > 0) Right(i) else Left("LT 0")
def validation(i: Int): Either[String, Int] =
for {
_ <- validationEven(i)
_ <- validationLT100(i)
res <- validationGT0(i)
} yield res
}
object FailureAccumulation {
def validationEven(i: Int): Validated[List[String], Int] = if (i % 2 == 0) Valid(i) else Invalid(List("Odd"))
def validationLT100(i: Int): Validated[List[String], Int] = if (i < 100) Valid(i) else Invalid(List("GT 100"))
def validationGT0(i: Int): Validated[List[String], Int] = if (i > 0) Valid(i) else Invalid(List("LT 0"))
def validation(i: Int): Validated[List[String], Int] =
(validationEven(i), validationLT100(i), validationGT0(i)).mapN { case (_, _, res) => res }
}
val ok = 50
val koOdd = 51
val koGT100 = 101
val koLT0 = -1
println(FailFast.validation(ok))
println(FailFast.validation(koOdd))
println(FailFast.validation(koGT100))
println(FailFast.validation(koLT0))
println(FailureAccumulation.validation(ok))
println(FailureAccumulation.validation(koOdd))
println(FailureAccumulation.validation(koGT100))
println(FailureAccumulation.validation(koLT0))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment