From 3b000381879e067c01f318c0ef7209a0aa4d6c0b Mon Sep 17 00:00:00 2001 From: Georgi Krastev Date: Fri, 25 Mar 2022 20:24:28 +0100 Subject: [PATCH] Update to Scala 3.1.2-RC3 and fix outstanding issues --- build.sbt | 4 +-- .../derived/DerivedCommutativeMonoid.scala | 2 +- .../derived/DerivedCommutativeSemigroup.scala | 2 +- .../main/scala-3/cats/derived/DerivedEq.scala | 4 +-- .../scala-3/cats/derived/DerivedHash.scala | 4 +-- .../scala-3/cats/derived/DerivedMonoid.scala | 5 +-- .../cats/derived/DerivedSemigroup.scala | 2 +- .../cats/derived/CommutativeMonoidSuite.scala | 3 +- .../derived/CommutativeSemigroupSuite.scala | 3 +- .../test/scala-3/cats/derived/EqSuite.scala | 3 +- .../scala-3/cats/derived/FunctorSuite.scala | 3 +- .../test/scala-3/cats/derived/HashSuite.scala | 3 +- .../scala-3/cats/derived/MonoidSuite.scala | 3 +- .../cats/derived/NonEmptyTraverseSuite.scala | 32 ++++++------------- .../scala-3/cats/derived/ReducibleSuite.scala | 20 +++--------- .../scala-3/cats/derived/SemigroupSuite.scala | 3 +- .../scala-3/cats/derived/TraverseSuite.scala | 9 +----- 17 files changed, 34 insertions(+), 71 deletions(-) diff --git a/build.sbt b/build.sbt index 5e23b87a..40290b68 100644 --- a/build.sbt +++ b/build.sbt @@ -2,9 +2,9 @@ import sbt._ val scala212 = "2.12.15" val scala213 = "2.13.8" -val scala3 = "3.1.1" +val scala3 = "3.1.2-RC3" -ThisBuild / crossScalaVersions := Seq(scala212, scala213, scala3) +ThisBuild / crossScalaVersions := Seq(scala3) ThisBuild / scalaVersion := scala3 ThisBuild / tlBaseVersion := "3.0" ThisBuild / organization := "org.typelevel" diff --git a/core/src/main/scala-3/cats/derived/DerivedCommutativeMonoid.scala b/core/src/main/scala-3/cats/derived/DerivedCommutativeMonoid.scala index 7acc852b..91e8eacb 100644 --- a/core/src/main/scala-3/cats/derived/DerivedCommutativeMonoid.scala +++ b/core/src/main/scala-3/cats/derived/DerivedCommutativeMonoid.scala @@ -12,7 +12,7 @@ object DerivedCommutativeMonoid: import DerivedCommutativeMonoid.given summonInline[DerivedCommutativeMonoid[A]].instance - given [A](using inst: K0.ProductInstances[Or, A]): DerivedCommutativeMonoid[A] = + given [A](using inst: => K0.ProductInstances[Or, A]): DerivedCommutativeMonoid[A] = given K0.ProductInstances[CommutativeMonoid, A] = inst.unify new Product[CommutativeMonoid, A] {} diff --git a/core/src/main/scala-3/cats/derived/DerivedCommutativeSemigroup.scala b/core/src/main/scala-3/cats/derived/DerivedCommutativeSemigroup.scala index d4eabdd4..3cd753c2 100644 --- a/core/src/main/scala-3/cats/derived/DerivedCommutativeSemigroup.scala +++ b/core/src/main/scala-3/cats/derived/DerivedCommutativeSemigroup.scala @@ -12,7 +12,7 @@ object DerivedCommutativeSemigroup: import DerivedCommutativeSemigroup.given summonInline[DerivedCommutativeSemigroup[A]].instance - given [A](using inst: K0.ProductInstances[Or, A]): DerivedCommutativeSemigroup[A] = + given [A](using inst: => K0.ProductInstances[Or, A]): DerivedCommutativeSemigroup[A] = given K0.ProductInstances[CommutativeSemigroup, A] = inst.unify new Product[CommutativeSemigroup, A] {} diff --git a/core/src/main/scala-3/cats/derived/DerivedEq.scala b/core/src/main/scala-3/cats/derived/DerivedEq.scala index 05d23bdd..2f9f365d 100644 --- a/core/src/main/scala-3/cats/derived/DerivedEq.scala +++ b/core/src/main/scala-3/cats/derived/DerivedEq.scala @@ -12,11 +12,11 @@ object DerivedEq: import DerivedEq.given summonInline[DerivedEq[A]].instance - given [A](using inst: K0.ProductInstances[Or, A]): DerivedEq[A] = + given product[A](using inst: => K0.ProductInstances[Or, A]): DerivedEq[A] = given K0.ProductInstances[Eq, A] = inst.unify new Product[Eq, A] {} - given [A](using inst: => K0.CoproductInstances[Or, A]): DerivedEq[A] = + given coproduct[A](using inst: => K0.CoproductInstances[Or, A]): DerivedEq[A] = given K0.CoproductInstances[Eq, A] = inst.unify new Coproduct[Eq, A] {} diff --git a/core/src/main/scala-3/cats/derived/DerivedHash.scala b/core/src/main/scala-3/cats/derived/DerivedHash.scala index 3637a352..769e9d6f 100644 --- a/core/src/main/scala-3/cats/derived/DerivedHash.scala +++ b/core/src/main/scala-3/cats/derived/DerivedHash.scala @@ -13,11 +13,11 @@ object DerivedHash: import DerivedHash.given summonInline[DerivedHash[A]].instance - given [A <: scala.Product](using inst: K0.ProductInstances[Or, A]): DerivedHash[A] = + given product[A <: scala.Product](using inst: => K0.ProductInstances[Or, A]): DerivedHash[A] = given K0.ProductInstances[Hash, A] = inst.unify new Product[Hash, A] {} - given [A](using inst: => K0.CoproductInstances[Or, A]): DerivedHash[A] = + given coproduct[A](using inst: => K0.CoproductInstances[Or, A]): DerivedHash[A] = given K0.CoproductInstances[Hash, A] = inst.unify new Coproduct[Hash, A] {} diff --git a/core/src/main/scala-3/cats/derived/DerivedMonoid.scala b/core/src/main/scala-3/cats/derived/DerivedMonoid.scala index 92934da2..f678d61b 100644 --- a/core/src/main/scala-3/cats/derived/DerivedMonoid.scala +++ b/core/src/main/scala-3/cats/derived/DerivedMonoid.scala @@ -12,11 +12,12 @@ object DerivedMonoid: import DerivedMonoid.given summonInline[DerivedMonoid[A]].instance - given [A](using inst: K0.ProductInstances[Or, A]): DerivedMonoid[A] = + given [A](using inst: => K0.ProductInstances[Or, A]): DerivedMonoid[A] = given K0.ProductInstances[Monoid, A] = inst.unify new Product[Monoid, A] {} trait Product[F[x] <: Monoid[x], A](using inst: K0.ProductInstances[F, A]) extends DerivedSemigroup.Product[F, A], Monoid[A]: - final override val empty: A = inst.construct([A] => (F: F[A]) => F.empty) + final override lazy val empty: A = + inst.construct([A] => (F: F[A]) => F.empty) diff --git a/core/src/main/scala-3/cats/derived/DerivedSemigroup.scala b/core/src/main/scala-3/cats/derived/DerivedSemigroup.scala index 742588e6..57588434 100644 --- a/core/src/main/scala-3/cats/derived/DerivedSemigroup.scala +++ b/core/src/main/scala-3/cats/derived/DerivedSemigroup.scala @@ -12,7 +12,7 @@ object DerivedSemigroup: import DerivedSemigroup.given summonInline[DerivedSemigroup[A]].instance - given [A](using inst: K0.ProductInstances[Or, A]): DerivedSemigroup[A] = + given [A](using inst: => K0.ProductInstances[Or, A]): DerivedSemigroup[A] = given K0.ProductInstances[Semigroup, A] = inst.unify new Product[Semigroup, A] {} diff --git a/core/src/test/scala-3/cats/derived/CommutativeMonoidSuite.scala b/core/src/test/scala-3/cats/derived/CommutativeMonoidSuite.scala index b423ea0d..c4e14cb5 100644 --- a/core/src/test/scala-3/cats/derived/CommutativeMonoidSuite.scala +++ b/core/src/test/scala-3/cats/derived/CommutativeMonoidSuite.scala @@ -32,8 +32,7 @@ class CommutativeMonoidSuite extends KittensSuite: inline def testCommutativeMonoid(inline context: String): Unit = checkAll(s"$context.CommutativeMonoid[Foo]", commutativeMonoidTests[CommutativeFoo].commutativeMonoid) - // FIXME: Doesn't work - // checkAll(s"$context.CommutativeMonoid[Recursive]", commutativeMonoidTests[Recursive].commutativeMonoid) + checkAll(s"$context.CommutativeMonoid[Recursive]", commutativeMonoidTests[Recursive].commutativeMonoid) checkAll(s"$context.CommutativeMonoid[Box[Mul]]", commutativeMonoidTests[Box[Mul]].commutativeMonoid) checkAll( s"$context.CommutativeMonoid is Serializable", diff --git a/core/src/test/scala-3/cats/derived/CommutativeSemigroupSuite.scala b/core/src/test/scala-3/cats/derived/CommutativeSemigroupSuite.scala index 2adaf003..1ce03dc2 100644 --- a/core/src/test/scala-3/cats/derived/CommutativeSemigroupSuite.scala +++ b/core/src/test/scala-3/cats/derived/CommutativeSemigroupSuite.scala @@ -35,8 +35,7 @@ class CommutativeSemigroupSuite extends KittensSuite: s"$context.CommutativeSemigroup[CommutativeFoo]", commutativeSemigroupTests[CommutativeFoo].commutativeSemigroup ) - // FIXME: Doesn't work - // checkAll(s"$context.CommutativeSemigroup[Recursive]", commutativeSemigroupTests[Recursive].commutativeSemigroup) + checkAll(s"$context.CommutativeSemigroup[Recursive]", commutativeSemigroupTests[Recursive].commutativeSemigroup) checkAll(s"$context.CommutativeSemigroup[Box[Mul]]", commutativeSemigroupTests[Box[Mul]].commutativeSemigroup) checkAll( s"$context.CommutativeSemigroup is Serializable", diff --git a/core/src/test/scala-3/cats/derived/EqSuite.scala b/core/src/test/scala-3/cats/derived/EqSuite.scala index 427319e0..adf99d51 100644 --- a/core/src/test/scala-3/cats/derived/EqSuite.scala +++ b/core/src/test/scala-3/cats/derived/EqSuite.scala @@ -35,8 +35,7 @@ class EqSuite extends KittensSuite.WithoutEq: checkAll(s"$context.Eq[Outer]", eqTests[Outer].eqv) checkAll(s"$context.Eq[Interleaved[Int]]", eqTests[Interleaved[Int]].eqv) checkAll(s"$context.Eq[Tree[Int]]", eqTests[Tree[Int]].eqv) - // FIXME: Doesn't work for recursive case classes. - // checkAll(s"$context.Eq[Recursive]", eqTests[Recursive].eqv) + checkAll(s"$context.Eq[Recursive]", eqTests[Recursive].eqv) checkAll(s"$context.Eq is Serializable", SerializableTests.serializable(summonInline[Eq[Foo]])) locally { diff --git a/core/src/test/scala-3/cats/derived/FunctorSuite.scala b/core/src/test/scala-3/cats/derived/FunctorSuite.scala index 80d9445e..952d96f6 100644 --- a/core/src/test/scala-3/cats/derived/FunctorSuite.scala +++ b/core/src/test/scala-3/cats/derived/FunctorSuite.scala @@ -37,8 +37,7 @@ class FunctorSuite extends KittensSuite: checkAll(s"$context.Functor[GenericAdt]", functorTests[GenericAdt].functor[Int, String, Long]) checkAll(s"$context.Functor[OptList]", functorTests[OptList].functor[Int, String, Long]) checkAll(s"$context.Functor[ListSnoc]", functorTests[ListSnoc].functor[Int, String, Long]) - // FIXME: Testing `functorTests[AndChar].functor[Int, String, Long]` causes a ClassCastException - checkAll(s"$context.Functor[AndChar]", functorTests[AndChar].functor[Int, String, Int]) + checkAll(s"$context.Functor[AndChar]", functorTests[AndChar].functor[Int, String, Long]) checkAll(s"$context.Functor[Interleaved]", functorTests[Interleaved].functor[Int, String, Long]) checkAll(s"$context.Functor[NestedPred]", functorTests[NestedPred].functor[Boolean, Int, Boolean]) checkAll(s"$context.Functor is Serializable", SerializableTests.serializable(summonInline[Functor[Tree]])) diff --git a/core/src/test/scala-3/cats/derived/HashSuite.scala b/core/src/test/scala-3/cats/derived/HashSuite.scala index 31bc5ffe..7c9ca162 100644 --- a/core/src/test/scala-3/cats/derived/HashSuite.scala +++ b/core/src/test/scala-3/cats/derived/HashSuite.scala @@ -20,8 +20,7 @@ class HashSuite extends KittensSuite: // FIXME: typelevel/cats#2878 // checkAll(s"$context.Hash[Interleaved[Int]]", hashTests[Interleaved[Int]].hash) checkAll(s"$context.Hash[Tree[Int]]", hashTests[Tree[Int]].hash) - // FIXME: Doesn't work for recursive case classes. - // checkAll(s"$context.Hash[Recursive]", hashTests[Recursive].hash) + checkAll(s"$context.Hash[Recursive]", hashTests[Recursive].hash) checkAll(s"$context.Hash is Serializable", SerializableTests.serializable(summonInline[Hash[Inner]])) locally { diff --git a/core/src/test/scala-3/cats/derived/MonoidSuite.scala b/core/src/test/scala-3/cats/derived/MonoidSuite.scala index 8822d8e2..f19417f8 100644 --- a/core/src/test/scala-3/cats/derived/MonoidSuite.scala +++ b/core/src/test/scala-3/cats/derived/MonoidSuite.scala @@ -33,8 +33,7 @@ class MonoidSuite extends KittensSuite: checkAll(s"$context.Monoid[Foo]", monoidTests[Foo].monoid) checkAll(s"$context.Monoid[Interleaved[Int]]", monoidTests[Interleaved[Int]].monoid) checkAll(s"$context.Monoid[Box[Mul]]", monoidTests[Box[Mul]].monoid) - // FIXME: Doesn't work - // checkAll(s"$context.Monoid[Recursive]", monoidTests[Recursive].monoid) + checkAll(s"$context.Monoid[Recursive]", monoidTests[Recursive].monoid) checkAll(s"$context.Monoid is Serializable", SerializableTests.serializable(summonInline[Monoid[Foo]])) test(s"$context.Monoid respects existing instances") { val box = summonInline[Monoid[Box[Mul]]] diff --git a/core/src/test/scala-3/cats/derived/NonEmptyTraverseSuite.scala b/core/src/test/scala-3/cats/derived/NonEmptyTraverseSuite.scala index d42e7566..845fd965 100644 --- a/core/src/test/scala-3/cats/derived/NonEmptyTraverseSuite.scala +++ b/core/src/test/scala-3/cats/derived/NonEmptyTraverseSuite.scala @@ -41,15 +41,14 @@ class NonEmptyTraverseSuite extends KittensSuite: s"$context.NonEmptyTraverse[Tree]", nonEmptyTraverseTests[Tree].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option] ) - // FIXME: Those don't work -// checkAll( -// s"$context.NonEmptyTraverse[NelSCons]", -// nonEmptyTraverseTests[NelSCons].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option] -// ) -// checkAll( -// s"$context.NonEmptyTraverse[NelAndOne]", -// nonEmptyTraverseTests[NelAndOne].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option] -// ) + checkAll( + s"$context.NonEmptyTraverse[NelSCons]", + nonEmptyTraverseTests[NelSCons].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option] + ) + checkAll( + s"$context.NonEmptyTraverse[NelAndOne]", + nonEmptyTraverseTests[NelAndOne].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option] + ) checkAll( s"$context.NonEmptyTraverse[VecAndNel]", nonEmptyTraverseTests[VecAndNel].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option] @@ -79,19 +78,8 @@ object NonEmptyTraverseSuite: import TestDefns.* type NelSCons[A] = NonEmptyList[SCons[A]] - type NelAndOne[A] = NonEmptyList[OneAnd[List, A]] - - // FIXME: Doesn't work if we define `ListAndNel` as a type alias - final case class VecAndNel[A](vec: Vector[A], nel: NonEmptyList[A]) - object VecAndNel: - given [A: Eq]: Eq[VecAndNel[A]] = - (x, y) => x.vec === y.vec && x.nel === y.nel - - given [A: Arbitrary]: Arbitrary[VecAndNel[A]] = - Arbitrary(for - vec <- Arbitrary.arbitrary[Vector[A]] - nel <- Arbitrary.arbitrary[NonEmptyList[A]] - yield VecAndNel(vec, nel)) + type NelAndOne[A] = NonEmptyList[OneAnd[Vector, A]] + type VecAndNel[A] = (Vector[A], NonEmptyList[A]) object semiInstances: given NonEmptyTraverse[ICons] = semiauto.nonEmptyTraverse diff --git a/core/src/test/scala-3/cats/derived/ReducibleSuite.scala b/core/src/test/scala-3/cats/derived/ReducibleSuite.scala index 115ceaec..c61cc50c 100644 --- a/core/src/test/scala-3/cats/derived/ReducibleSuite.scala +++ b/core/src/test/scala-3/cats/derived/ReducibleSuite.scala @@ -34,9 +34,8 @@ class ReducibleSuite extends KittensSuite: inline def testReducible(context: String): Unit = checkAll(s"$context.Reducible[ICons]", reducibleTests[ICons].reducible[Option, Int, Long]) checkAll(s"$context.Reducible[Tree]", reducibleTests[Tree].reducible[Option, Int, Long]) - // FIXME: Those don't work -// checkAll(s"$context.Reducible[NelSCons]", reducibleTests[NelSCons].reducible[Option, Int, Long]) -// checkAll(s"$context.Reducible[NelAndOne]", reducibleTests[NelAndOne].reducible[Option, Int, Long]) + checkAll(s"$context.Reducible[NelSCons]", reducibleTests[NelSCons].reducible[Option, Int, Long]) + checkAll(s"$context.Reducible[NelAndOne]", reducibleTests[NelAndOne].reducible[Option, Int, Long]) checkAll(s"$context.Reducible[VecAndNel]", reducibleTests[VecAndNel].reducible[Option, Int, Long]) checkAll(s"$context.Reducible[Interleaved]", reducibleTests[Interleaved].reducible[Option, Int, Long]) checkAll(s"$context.Reducible[BoxZipper]", reducibleTests[BoxZipper].reducible[Option, Int, Long]) @@ -58,7 +57,8 @@ object ReducibleSuite: import TestDefns.* type NelSCons[A] = NonEmptyList[SCons[A]] - type NelAndOne[A] = NonEmptyList[OneAnd[List, A]] + type NelAndOne[A] = NonEmptyList[OneAnd[Vector, A]] + type VecAndNel[A] = (Vector[A], NonEmptyList[A]) type BoxZipper[A] = Box[Zipper[A]] object semiInstances: @@ -70,18 +70,6 @@ object ReducibleSuite: given Reducible[Interleaved] = semiauto.reducible given Reducible[BoxZipper] = semiauto.reducible - // FIXME: Doesn't work if we define `VecAndNel` as a type alias - final case class VecAndNel[A](vec: Vector[A], nel: NonEmptyList[A]) - object VecAndNel: - given [A: Eq]: Eq[VecAndNel[A]] = - (x, y) => x.vec === y.vec && x.nel === y.nel - - given [A: Arbitrary]: Arbitrary[VecAndNel[A]] = - Arbitrary(for - vec <- Arbitrary.arbitrary[Vector[A]] - nel <- Arbitrary.arbitrary[NonEmptyList[A]] - yield VecAndNel(vec, nel)) - final case class Zipper[+A](left: List[A], focus: A, right: List[A]) object Zipper: given [A: Eq]: Eq[Zipper[A]] = diff --git a/core/src/test/scala-3/cats/derived/SemigroupSuite.scala b/core/src/test/scala-3/cats/derived/SemigroupSuite.scala index 571685b5..5190dba8 100644 --- a/core/src/test/scala-3/cats/derived/SemigroupSuite.scala +++ b/core/src/test/scala-3/cats/derived/SemigroupSuite.scala @@ -33,8 +33,7 @@ class SemigroupSuite extends KittensSuite: checkAll(s"$context.Semigroup[Foo]", semigroupTests[Foo].semigroup) checkAll(s"$context.Semigroup[Interleaved[Int]]", semigroupTests[Interleaved[Int]].semigroup) checkAll(s"$context.Semigroup[Box[Mul]]", semigroupTests[Box[Mul]].semigroup) - // FIXME: Doesn't work - // checkAll(s"$context.Semigroup[Recursive]", semigroupTests[Recursive].semigroup) + checkAll(s"$context.Semigroup[Recursive]", semigroupTests[Recursive].semigroup) checkAll(s"$context.Semigroup is Serializable", SerializableTests.serializable(summonInline[Semigroup[Foo]])) test(s"$context.Semigroup respects existing instances") { val box = summonInline[Semigroup[Box[Mul]]] diff --git a/core/src/test/scala-3/cats/derived/TraverseSuite.scala b/core/src/test/scala-3/cats/derived/TraverseSuite.scala index bea234ce..3f0e4171 100644 --- a/core/src/test/scala-3/cats/derived/TraverseSuite.scala +++ b/core/src/test/scala-3/cats/derived/TraverseSuite.scala @@ -49,14 +49,7 @@ object TraverseSuite: type OptList[A] = Option[List[A]] type ListSnoc[A] = List[Snoc[A]] - - // FIXME: Doesn't work if we define `ListAndNel` as a type alias - case class AndChar[A](value: A, letter: Char) - object AndChar: - given [A: Eq]: Eq[AndChar[A]] = - Eq.by(ac => (ac.value, ac.letter)) - given [A: Arbitrary]: Arbitrary[AndChar[A]] = - Arbitrary(Arbitrary.arbitrary[(A, Char)].map(apply[A].tupled)) + type AndChar[A] = (A, Char) object semiInstances: given Traverse[IList] = semiauto.traverse