Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.81 KB | None | 0 0
  1. import org.scalactic._
  2. import org.scalactic.Accumulation._
  3.  
  4. trait Error
  5. type Errors = Every[Error]
  6. case object AnError extends Error
  7.  
  8. object ValidationImplicits {
  9.  
  10. implicit class ValidationOps[E](val validLeft: Validation[Every[E]]) extends AnyVal {
  11. def or(validRight: Validation[Every[E]]): Validation[Every[E]] = {
  12. (validLeft, validRight) match {
  13. case (Pass, Pass) => Pass
  14. case (Fail(_), Pass) => Pass
  15. case (Pass, Fail(_)) => Pass
  16. case (Fail(errorsLeft), Fail(errorsRight)) => Fail(errorsLeft ++ errorsRight)
  17. }
  18. }
  19. }
  20.  
  21. }
  22.  
  23. import ValidationImplicits._
  24.  
  25. def validate1(s: String): Validation[Errors] = Pass
  26. def validate2(s: String): Validation[Errors] = Fail(One(AnError))
  27. def sOrError = Good("foo")
  28.  
  29. // Usage:
  30. for {
  31. s <- sOrError
  32. if validate1(s) or validate2(s)
  33. } yield s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement