From e5372d05122047351971d0e970e137fea7dbd2e0 Mon Sep 17 00:00:00 2001 From: Gregor Heine Date: Mon, 25 Mar 2019 14:55:59 +0000 Subject: [PATCH 1/2] NonEmptyChain.fromSeq should take scala.collection.Seq instead of scala.collection.immutable.Seq Similar to Chain.fromSeq() --- core/src/main/scala/cats/data/NonEmptyChain.scala | 2 +- tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/cats/data/NonEmptyChain.scala b/core/src/main/scala/cats/data/NonEmptyChain.scala index 9aad230469..7333a53265 100644 --- a/core/src/main/scala/cats/data/NonEmptyChain.scala +++ b/core/src/main/scala/cats/data/NonEmptyChain.scala @@ -22,7 +22,7 @@ import cats.Order import cats.kernel._ import scala.annotation.tailrec -import scala.collection.immutable._ +import scala.collection.immutable.TreeSet import scala.collection.mutable.ListBuffer private[data] object NonEmptyChainImpl extends NonEmptyChainInstances { diff --git a/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala b/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala index b9939ee25c..8f432e6716 100644 --- a/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala +++ b/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala @@ -106,7 +106,7 @@ class NonEmptyChainSuite extends CatsSuite { test("fromSeq . toList . iterator is id") { forAll { (ci: NonEmptyChain[Int]) => - NonEmptyChain.fromSeq(ci.iterator.toList) should ===(Option(ci)) + NonEmptyChain.fromSeq(ci.iterator.toSeq) should ===(Option(ci)) } } From 82eebee567c2a2ce0a530a55b548ec94c3065760 Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Fri, 8 Nov 2019 11:31:22 +0000 Subject: [PATCH 2/2] Fix bincompat --- .../cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala | 6 ++++++ .../cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala | 3 +++ core/src/main/scala/cats/data/NonEmptyChain.scala | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 core/src/main/scala-2.12/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala create mode 100644 core/src/main/scala-2.13+/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala diff --git a/core/src/main/scala-2.12/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala b/core/src/main/scala-2.12/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala new file mode 100644 index 0000000000..35ca7ff5cf --- /dev/null +++ b/core/src/main/scala-2.12/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala @@ -0,0 +1,6 @@ +package cats.data + +private[data] trait ScalaVersionSpecificNonEmptyChainImpl { + def fromSeq[A](as: scala.collection.Seq[A]): Option[NonEmptyChain[A]] = + if (as.nonEmpty) Option(NonEmptyChainImpl.create(Chain.fromSeq(as))) else None +} diff --git a/core/src/main/scala-2.13+/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala b/core/src/main/scala-2.13+/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala new file mode 100644 index 0000000000..5005b53f9c --- /dev/null +++ b/core/src/main/scala-2.13+/cats/data/ScalaVersionSpecificNonEmptyChainImpl.scala @@ -0,0 +1,3 @@ +package cats.data + +private[data] trait ScalaVersionSpecificNonEmptyChainImpl diff --git a/core/src/main/scala/cats/data/NonEmptyChain.scala b/core/src/main/scala/cats/data/NonEmptyChain.scala index 80ae6ca552..c22625c4df 100644 --- a/core/src/main/scala/cats/data/NonEmptyChain.scala +++ b/core/src/main/scala/cats/data/NonEmptyChain.scala @@ -21,7 +21,7 @@ import NonEmptyChainImpl.create import cats.{Order, Semigroup} import cats.kernel._ -private[data] object NonEmptyChainImpl extends NonEmptyChainInstances { +private[data] object NonEmptyChainImpl extends NonEmptyChainInstances with ScalaVersionSpecificNonEmptyChainImpl { // The following 3 types are components of a technique to // create a no-boxing newtype. It's coped from the // newtypes lib by @alexknvl @@ -50,7 +50,7 @@ private[data] object NonEmptyChainImpl extends NonEmptyChainInstances { def fromNonEmptyVector[A](as: NonEmptyVector[A]): NonEmptyChain[A] = create(Chain.fromSeq(as.toVector)) - def fromSeq[A](as: Seq[A]): Option[NonEmptyChain[A]] = + def fromSeq[A](as: scala.collection.immutable.Seq[A]): Option[NonEmptyChain[A]] = if (as.nonEmpty) Option(create(Chain.fromSeq(as))) else None def fromChainPrepend[A](a: A, ca: Chain[A]): NonEmptyChain[A] =