diff --git a/build.sbt b/build.sbt index 99619e0580..bb46990c5d 100644 --- a/build.sbt +++ b/build.sbt @@ -1,11 +1,8 @@ -import java.time.LocalDateTime - import microsites._ import ReleaseTransformations._ import sbt.io.Using import scala.xml.transform.{RewriteRule, RuleTransformer} -import sbtcrossproject.CrossProject import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType} lazy val scoverageSettings = Seq( diff --git a/core/src/main/scala/cats/data/NonEmptySet.scala b/core/src/main/scala/cats/data/NonEmptySet.scala index 4e26fdfff0..67665b7807 100644 --- a/core/src/main/scala/cats/data/NonEmptySet.scala +++ b/core/src/main/scala/cats/data/NonEmptySet.scala @@ -422,7 +422,12 @@ sealed abstract private[data] class NonEmptySetInstances extends NonEmptySetInst } } -sealed abstract private[data] class NonEmptySetInstances0 { +sealed abstract private[data] class NonEmptySetInstances0 extends NonEmptySetInstances1 { + implicit def catsDataHashForNonEmptySet[A: Order: Hash]: Hash[NonEmptySet[A]] = + Hash[SortedSet[A]].asInstanceOf[Hash[NonEmptySet[A]]] +} + +sealed abstract private[data] class NonEmptySetInstances1 { implicit def catsDataEqForNonEmptySet[A](implicit A: Order[A]): Eq[NonEmptySet[A]] = new NonEmptySetEq[A] { implicit override def A0: Eq[A] = A } diff --git a/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala b/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala index 95cf903c4b..412f65aa67 100644 --- a/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala +++ b/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala @@ -21,7 +21,7 @@ import cats.laws.discipline._ import cats.laws.discipline.arbitrary._ import cats.data.NonEmptySet import cats.kernel.Semilattice -import cats.kernel.laws.discipline.{EqTests, OrderTests, SemilatticeTests} +import cats.kernel.laws.discipline.{EqTests, HashTests, OrderTests, SemilatticeTests} import scala.collection.immutable.SortedSet @@ -37,6 +37,7 @@ class NonEmptySetSuite extends CatsSuite { checkAll("Semilattice[NonEmptySet]", SerializableTests.serializable(Semilattice[NonEmptySet[String]])) checkAll("NonEmptySet[String]", EqTests[NonEmptySet[String]].eqv) + checkAll("NonEmptySet[String]", HashTests[NonEmptySet[String]].hash) { implicit val A = ListWrapper.order[Int]