From ed3f7684172c837efe415dbf7c60e3f4792812e6 Mon Sep 17 00:00:00 2001 From: Mike Curry Date: Sun, 6 Dec 2015 17:15:47 +0000 Subject: [PATCH] Adds Semigroup for Validated Added a Semigroup for based on comment: https://github.com/non/cats/pull/715#issuecomment-162326224 --- core/src/main/scala/cats/data/Validated.scala | 6 ++++++ tests/src/test/scala/cats/tests/ValidatedTests.scala | 2 ++ 2 files changed, 8 insertions(+) diff --git a/core/src/main/scala/cats/data/Validated.scala b/core/src/main/scala/cats/data/Validated.scala index 160d29e4e8..4c247ee98d 100644 --- a/core/src/main/scala/cats/data/Validated.scala +++ b/core/src/main/scala/cats/data/Validated.scala @@ -236,6 +236,12 @@ private[data] sealed abstract class ValidatedInstances extends ValidatedInstance } private[data] sealed abstract class ValidatedInstances1 extends ValidatedInstances2 { + + implicit def validatedSemigroup[A, B](implicit A: Semigroup[A], B: Semigroup[B]): Semigroup[Validated[A, B]] = + new Semigroup[Validated[A, B]] { + def combine(x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x combine y + } + implicit def validatedPartialOrder[A: PartialOrder, B: PartialOrder]: PartialOrder[Validated[A,B]] = new PartialOrder[Validated[A,B]] { def partialCompare(x: Validated[A,B], y: Validated[A,B]): Double = x partialCompare y diff --git a/tests/src/test/scala/cats/tests/ValidatedTests.scala b/tests/src/test/scala/cats/tests/ValidatedTests.scala index ba88b5337f..2eb135d47d 100644 --- a/tests/src/test/scala/cats/tests/ValidatedTests.scala +++ b/tests/src/test/scala/cats/tests/ValidatedTests.scala @@ -24,6 +24,8 @@ class ValidatedTests extends CatsSuite { checkAll("Monoid[Validated[String, Int]]", GroupLaws[Validated[String, Int]].monoid) + checkAll("Semigroup[Validated[String, NonEmptyList[Int]]]", GroupLaws[Validated[String, NonEmptyList[Int]]].semigroup) + { implicit val S = ListWrapper.partialOrder[String] implicit val I = ListWrapper.partialOrder[Int]