From 55de7f5e20f01860976bd4acec22c8a84097e5a2 Mon Sep 17 00:00:00 2001 From: Colt Frederickson Date: Mon, 26 Oct 2015 21:15:53 -0600 Subject: [PATCH] Add syntax for validated. --- core/src/main/scala/cats/syntax/all.scala | 1 + core/src/main/scala/cats/syntax/option.scala | 6 +++++- core/src/main/scala/cats/syntax/package.scala | 1 + core/src/main/scala/cats/syntax/validated.scala | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 core/src/main/scala/cats/syntax/validated.scala diff --git a/core/src/main/scala/cats/syntax/all.scala b/core/src/main/scala/cats/syntax/all.scala index 08ba6c48cf..eeee237232 100644 --- a/core/src/main/scala/cats/syntax/all.scala +++ b/core/src/main/scala/cats/syntax/all.scala @@ -30,3 +30,4 @@ trait AllSyntax with StrongSyntax with TraverseSyntax with XorSyntax + with ValidatedSyntax diff --git a/core/src/main/scala/cats/syntax/option.scala b/core/src/main/scala/cats/syntax/option.scala index 71f2cde649..3f99168b20 100644 --- a/core/src/main/scala/cats/syntax/option.scala +++ b/core/src/main/scala/cats/syntax/option.scala @@ -1,7 +1,7 @@ package cats package syntax -import cats.data.Xor +import cats.data.{ Xor, Validated, ValidatedNel } trait OptionSyntax { def none[A] = Option.empty[A] @@ -16,5 +16,9 @@ class OptionIdOps[A](val a: A) extends AnyVal { class OptionOps[A](val oa: Option[A]) extends AnyVal { def toLeftXor[B](b: => B): A Xor B = oa.fold[A Xor B](Xor.Right(b))(Xor.Left(_)) def toRightXor[B](b: => B): B Xor A = oa.fold[B Xor A](Xor.Left(b))(Xor.Right(_)) + def toInvalid[B](b: => B): Validated[A, B] = oa.fold[Validated[A, B]](Validated.Valid(b))(Validated.Invalid(_)) + def toInvalidNel[B](b: => B): ValidatedNel[A, B] = oa.fold[ValidatedNel[A, B]](Validated.Valid(b))(Validated.invalidNel(_)) + def toValid[B](b: => B): Validated[B, A] = oa.fold[Validated[B, A]](Validated.Invalid(b))(Validated.Valid(_)) + def toValidNel[B](b: => B): ValidatedNel[B, A] = oa.fold[ValidatedNel[B, A]](Validated.invalidNel(b))(Validated.Valid(_)) def orEmpty(implicit A: Monoid[A]): A = oa.getOrElse(A.empty) } diff --git a/core/src/main/scala/cats/syntax/package.scala b/core/src/main/scala/cats/syntax/package.scala index f94e6d9e36..8ccf473dc8 100644 --- a/core/src/main/scala/cats/syntax/package.scala +++ b/core/src/main/scala/cats/syntax/package.scala @@ -28,4 +28,5 @@ package object syntax { object strong extends StrongSyntax object traverse extends TraverseSyntax object xor extends XorSyntax + object validated extends ValidatedSyntax } diff --git a/core/src/main/scala/cats/syntax/validated.scala b/core/src/main/scala/cats/syntax/validated.scala new file mode 100644 index 0000000000..629838c517 --- /dev/null +++ b/core/src/main/scala/cats/syntax/validated.scala @@ -0,0 +1,15 @@ +package cats +package syntax + +import cats.data.{ Validated, ValidatedNel } + +trait ValidatedSyntax { + implicit def validatedIdSyntax[A](a: A): ValidatedIdSyntax[A] = new ValidatedIdSyntax(a) +} + +class ValidatedIdSyntax[A](val a: A) extends AnyVal { + def valid[B]: Validated[B, A] = Validated.Valid(a) + def validNel[B]: ValidatedNel[B, A] = Validated.Valid(a) + def invalid[B]: Validated[A, B] = Validated.Invalid(a) + def invalidNel[B]: ValidatedNel[A, B] = Validated.invalidNel(a) +}