diff --git a/build.sbt b/build.sbt index e080823f89..8c888b4b8b 100644 --- a/build.sbt +++ b/build.sbt @@ -237,6 +237,248 @@ val binaryCompatibleExceptions = { import com.typesafe.tools.mima.core._ import com.typesafe.tools.mima.core.ProblemFilters._ Seq( // todo: remove these once we release 1.0.0-RC1 + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple5"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple3"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple5"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple2"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple2"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple20"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple18"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple13"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple17"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple14"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple6"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple13"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple11"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple17"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple16"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple8"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple12"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple21"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple16"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple20"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple14"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple22"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple11"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple15"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple9"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple10"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple1"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple4"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple19"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple4"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple21"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple4"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple15"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple7"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple7"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple1"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple20"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple7"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple1"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple13"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple18"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple8"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple7"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple22"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple18"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple2"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple4"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple17"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple13"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple16"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple1"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple12"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple10"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple12"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple22"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple19"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple16"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple11"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple5"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple15"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple21"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple14"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple19"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple10"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple3"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple9"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple9"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple11"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple3"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple6"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple6"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple3"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple20"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple14"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple7"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple6"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple13"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple9"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple12"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple20"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple6"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple17"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple9"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple14"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple18"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple15"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple21"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple17"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple1"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple12"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple16"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple22"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple3"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple10"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple19"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple11"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple18"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple21"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemigroupForTuple4"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple15"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple8"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple5"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple22"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple5"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdGroupForTuple8"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple8"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdSemilatticeForTuple2"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBandForTuple2"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple19"), + exclude[UpdateForwarderBodyProblem]("cats.kernel.instances.TupleInstances.catsKernelStdMonoidForTuple10"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple19"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple1"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple10"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple11"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple20"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple14"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple4"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple13"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple2"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple5"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple8"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple3"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple15"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple21"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple16"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple22"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple6"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple10"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple19"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple18"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple9"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple13"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple12"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple1"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple4"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple8"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple11"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple7"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple12"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple2"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple5"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple14"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple20"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple15"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple21"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple18"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple17"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple6"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple9"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple22"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple3"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdCommutativeGroupForTuple17"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple16"), + exclude[ReversedMissingMethodProblem]("cats.kernel.instances.TupleInstances.catsKernelStdBoundedSemilatticeForTuple7"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple18"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple8"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple17"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple2"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple11"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple5"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple14"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple20"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple13"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple7"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple22"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple16"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple1"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple19"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple4"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple10"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple3"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple12"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple6"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple9"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple15"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple21"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple9"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple14"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple20"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple17"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple11"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple8"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple2"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple5"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple19"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple10"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple13"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple16"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple22"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple7"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple1"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple21"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple4"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple18"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple12"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple15"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple3"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple6"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple18"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple8"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple17"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple2"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple11"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple5"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple14"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple20"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple13"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple7"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple22"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple16"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple1"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple19"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple4"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple10"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple3"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple12"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple6"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple9"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple15"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances1.catsKernelStdCommutativeMonoidForTuple21"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple9"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple14"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple20"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple17"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple11"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple8"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple2"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple5"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple19"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple10"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple13"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple16"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple22"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple7"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple1"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple21"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple4"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple18"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple12"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple15"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple3"), + exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.TupleInstances2.catsKernelStdCommutativeSemigroupForTuple6"), exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.QueueInstances.*"), exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.QueueInstances1.*"), exclude[InheritedNewAbstractMethodProblem]("cats.kernel.instances.QueueInstances2.*"), diff --git a/project/KernelBoiler.scala b/project/KernelBoiler.scala index d47eafd7a2..16c64d3471 100644 --- a/project/KernelBoiler.scala +++ b/project/KernelBoiler.scala @@ -1,3 +1,4 @@ +import KernelBoiler.TemplateVals import sbt._ /** @@ -21,9 +22,7 @@ object KernelBoiler { } } - val templates: Seq[Template] = Seq( - GenTupleInstances, GenTupleInstances1, GenTupleInstances2 - ) + val templates: Seq[Template] = Seq(GenTupleInstances) val header = "// auto-generated boilerplate" val maxArity = 22 @@ -65,219 +64,179 @@ object KernelBoiler { */ trait Template { def filename(root: File): File - def content(tv: TemplateVals): String + def preBody: String + def instances: Seq[InstanceDef] def range: IndexedSeq[Int] = 1 to maxArity def body: String = { val headerLines = header.split('\n') - val raw = range.map(n => content(new TemplateVals(n)).split('\n').filterNot(_.isEmpty)) - val preBody = raw.head.takeWhile(_.startsWith("|")).map(_.tail) - val instances = raw.flatMap(_.filter(_.startsWith("-")).map(_.tail)) - val postBody = raw.head.dropWhile(_.startsWith("|")).dropWhile(_.startsWith("-")).map(_.tail) - (headerLines ++ preBody ++ instances ++ postBody).mkString("\n") + val tvs = range.map(n => new TemplateVals(n)) + (headerLines ++ Seq(preBody) ++ instances.flatMap(_.body(tvs))).mkString("\n") } } - object GenTupleInstances extends Template { - override def range: IndexedSeq[Int] = 1 to maxArity - - def filename(root: File): File = root / "cats" / "kernel" / "instances" / "TupleInstances.scala" - - def content(tv: TemplateVals): String = { - import tv._ - - def constraints(constraint: String) = - synTypes.map(tpe => s"${tpe}: ${constraint}[${tpe}]").mkString(", ") - - def tuple(results: TraversableOnce[String]) = { - val resultsVec = results.toVector - val a = synTypes.size - val r = s"${0.until(a).map(i => resultsVec(i)).mkString(", ")}" - if (a == 1) "Tuple1(" ++ r ++ ")" - else s"(${r})" - } - - def binMethod(name: String) = - synTypes.zipWithIndex.iterator.map { - case (tpe, i) => - val j = i + 1 - s"${tpe}.${name}(x._${j}, y._${j})" - } - - def binTuple(name: String) = - tuple(binMethod(name)) - - def unaryTuple(name: String) = { - val m = synTypes.zipWithIndex.map { case (tpe, i) => s"${tpe}.${name}(x._${i + 1})" } - tuple(m) - } - - def nullaryTuple(name: String) = { - val m = synTypes.map(tpe => s"${tpe}.${name}") - tuple(m) - } - - block""" - |package cats.kernel - |package instances - | - |trait TupleInstances extends TupleInstances1 { - - implicit def catsKernelStdBandForTuple${arity}[${`A..N`}](implicit ${constraints("Band")}): Band[${`(A..N)`}] = - - new Band[${`(A..N)`}] { - - def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} - - } - - - - implicit def catsKernelStdGroupForTuple${arity}[${`A..N`}](implicit ${constraints("Group")}): Group[${`(A..N)`}] = - - new Group[${`(A..N)`}] { - - def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} - - def empty: ${`(A..N)`} = ${nullaryTuple("empty")} - - def inverse(x: ${`(A..N)`}): ${`(A..N)`} = ${unaryTuple("inverse")} - - } - - - - implicit def catsKernelStdMonoidForTuple${arity}[${`A..N`}](implicit ${constraints("Monoid")}): Monoid[${`(A..N)`}] = - - new Monoid[${`(A..N)`}] { - - def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} - - def empty: ${`(A..N)`} = ${nullaryTuple("empty")} - - } - - - - implicit def catsKernelStdOrderForTuple${arity}[${`A..N`}](implicit ${constraints("Order")}): Order[${`(A..N)`}] = - - new Order[${`(A..N)`}] { - - def compare(x: ${`(A..N)`}, y: ${`(A..N)`}): Int = - - ${binMethod("compare").mkString("Array(", ", ", ")")}.find(_ != 0).getOrElse(0) - - } - - - - implicit def catsKernelStdSemigroupForTuple${arity}[${`A..N`}](implicit ${constraints("Semigroup")}): Semigroup[${`(A..N)`}] = - - new Semigroup[${`(A..N)`}] { - - def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} - - } - - - - implicit def catsKernelStdSemilatticeForTuple${arity}[${`A..N`}](implicit ${constraints("Semilattice")}): Semilattice[${`(A..N)`}] = - - new Semilattice[${`(A..N)`}] { - - def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} - - } - |} - """ - } + case class InstanceDef(start: String, methods: TemplateVals => TemplatedBlock, end: String = "}") { + def body(tvs: Seq[TemplateVals]): Seq[String] = Seq(start) ++ tvs.map(methods(_).content) ++ Seq(end) } - object GenTupleInstances1 extends Template { - override def range: IndexedSeq[Int] = 1 to maxArity + abstract class TemplatedBlock(tv: TemplateVals) { + import tv._ - def filename(root: File): File = root / "cats" / "kernel" / "instances" / "TupleInstances1.scala" + def constraints(constraint: String) = + synTypes.map(tpe => s"${tpe}: ${constraint}[${tpe}]").mkString(", ") - def content(tv: TemplateVals): String = { - import tv._ + def tuple(results: TraversableOnce[String]) = { + val resultsVec = results.toVector + val a = synTypes.size + val r = s"${0.until(a).map(i => resultsVec(i)).mkString(", ")}" + if (a == 1) "Tuple1(" ++ r ++ ")" + else s"(${r})" + } - def constraints(constraint: String) = - synTypes.map(tpe => s"${tpe}: ${constraint}[${tpe}]").mkString(", ") + def tupleNHeader = s"Tuple${synTypes.size}" - def tuple(results: TraversableOnce[String]) = { - val resultsVec = results.toVector - val a = synTypes.size - val r = s"${0.until(a).map(i => resultsVec(i)).mkString(", ")}" - if (a == 1) "Tuple1(" ++ r ++ ")" - else s"(${r})" + def binMethod(name: String) = + synTypes.zipWithIndex.iterator.map { + case (tpe, i) => + val j = i + 1 + s"${tpe}.${name}(x._${j}, y._${j})" } - def tupleNHeader = s"Tuple${synTypes.size}" - - def binMethod(name: String) = - synTypes.zipWithIndex.iterator.map { - case (tpe, i) => - val j = i + 1 - s"${tpe}.${name}(x._${j}, y._${j})" - } + def binTuple(name: String) = + tuple(binMethod(name)) - def unaryMethod(name: String) = - synTypes.zipWithIndex.iterator.map { case (tpe, i) => - s"$tpe.$name(x._${i + 1})" - } - - def binTuple(name: String) = - tuple(binMethod(name)) - - def unaryTuple(name: String) = { - val m = synTypes.zipWithIndex.map { case (tpe, i) => s"${tpe}.${name}(x._${i + 1})" } - tuple(m) - } + def unaryTuple(name: String) = { + val m = synTypes.zipWithIndex.map { case (tpe, i) => s"${tpe}.${name}(x._${i + 1})" } + tuple(m) + } - def nullaryTuple(name: String) = { - val m = synTypes.map(tpe => s"${tpe}.${name}") - tuple(m) + def unaryMethod(name: String) = + synTypes.zipWithIndex.iterator.map { case (tpe, i) => + s"$tpe.$name(x._${i + 1})" } - block""" - |package cats.kernel - |package instances - | - |trait TupleInstances1 extends TupleInstances2 { - - implicit def catsKernelStdHashForTuple${arity}[${`A..N`}](implicit ${constraints("Hash")}): Hash[${`(A..N)`}] = - - new Hash[${`(A..N)`}] { - - def hash(x: ${`(A..N)`}): Int = ${unaryMethod("hash").mkString(s"$tupleNHeader(", ", ", ")")}.hashCode() - - def eqv(x: ${`(A..N)`}, y: ${`(A..N)`}): Boolean = ${binMethod("eqv").mkString(" && ")} - - } - - - - implicit def catsKernelStdPartialOrderForTuple${arity}[${`A..N`}](implicit ${constraints("PartialOrder")}): PartialOrder[${`(A..N)`}] = - - new PartialOrder[${`(A..N)`}] { - - def partialCompare(x: ${`(A..N)`}, y: ${`(A..N)`}): Double = - - ${binMethod("partialCompare").mkString("Array(", ", ", ")")}.find(_ != 0.0).getOrElse(0.0) - - } - |} - """ + def nullaryTuple(name: String) = { + val m = synTypes.map(tpe => s"${tpe}.${name}") + tuple(m) } - } + def content: String + } - object GenTupleInstances2 extends Template { + object GenTupleInstances extends Template { override def range: IndexedSeq[Int] = 1 to maxArity - def filename(root: File): File = root / "cats" / "kernel" / "instances" / "TupleInstances2.scala" - - def content(tv: TemplateVals): String = { - import tv._ - - def constraints(constraint: String) = - synTypes.map(tpe => s"${tpe}: ${constraint}[${tpe}]").mkString(", ") - - def tuple(results: TraversableOnce[String]) = { - val resultsVec = results.toVector - val a = synTypes.size - val r = s"${0.until(a).map(i => resultsVec(i)).mkString(", ")}" - if (a == 1) "Tuple1(" ++ r ++ ")" - else s"(${r})" - } - - def binMethod(name: String) = - synTypes.zipWithIndex.iterator.map { - case (tpe, i) => - val j = i + 1 - s"${tpe}.${name}(x._${j}, y._${j})" - } - - def binTuple(name: String) = - tuple(binMethod(name)) - - def unaryTuple(name: String) = { - val m = synTypes.zipWithIndex.map { case (tpe, i) => s"${tpe}.${name}(x._${i + 1})" } - tuple(m) - } - - def nullaryTuple(name: String) = { - val m = synTypes.map(tpe => s"${tpe}.${name}") - tuple(m) - } + def filename(root: File): File = root / "cats" / "kernel" / "instances" / "TupleInstances.scala" + val preBody: String = block""" - |package cats.kernel - |package instances - | - |trait TupleInstances2 { - - implicit def catsKernelStdEqForTuple${arity}[${`A..N`}](implicit ${constraints("Eq")}): Eq[${`(A..N)`}] = - - new Eq[${`(A..N)`}] { - - def eqv(x: ${`(A..N)`}, y: ${`(A..N)`}): Boolean = ${binMethod("eqv").mkString(" && ")} - - } - |} - """ + package cats.kernel + package instances + """ + + def instances: Seq[InstanceDef] = { + + Seq( + InstanceDef("trait TupleInstances extends TupleInstances1 {", + tv => new TemplatedBlock(tv) { + import tv._ + def content = + block""" + implicit def catsKernelStdCommutativeGroupForTuple${arity}[${`A..N`}](implicit ${constraints("CommutativeGroup")}): CommutativeGroup[${`(A..N)`}] = + new CommutativeGroup[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + def empty: ${`(A..N)`} = ${nullaryTuple("empty")} + def inverse(x: ${`(A..N)`}): ${`(A..N)`} = ${unaryTuple("inverse")} + } + + implicit def catsKernelStdOrderForTuple${arity}[${`A..N`}](implicit ${constraints("Order")}): Order[${`(A..N)`}] = + new Order[${`(A..N)`}] { + def compare(x: ${`(A..N)`}, y: ${`(A..N)`}): Int = + ${binMethod("compare").mkString("Array(", ", ", ")")}.find(_ != 0).getOrElse(0) + } + + implicit def catsKernelStdBoundedSemilatticeForTuple${arity}[${`A..N`}](implicit ${constraints("BoundedSemilattice")}): BoundedSemilattice[${`(A..N)`}] = + new BoundedSemilattice[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + def empty: ${`(A..N)`} = ${nullaryTuple("empty")} + } + """ + } + ), + + InstanceDef("trait TupleInstances1 extends TupleInstances2 {", + tv => new TemplatedBlock(tv) { + import tv._ + def content = + block""" + implicit def catsKernelStdSemilatticeForTuple${arity}[${`A..N`}](implicit ${constraints("Semilattice")}): Semilattice[${`(A..N)`}] = + new Semilattice[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + } + + implicit def catsKernelStdCommutativeMonoidForTuple${arity}[${`A..N`}](implicit ${constraints("CommutativeMonoid")}): CommutativeMonoid[${`(A..N)`}] = + new CommutativeMonoid[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + def empty: ${`(A..N)`} = ${nullaryTuple("empty")} + } + + implicit def catsKernelStdGroupForTuple${arity}[${`A..N`}](implicit ${constraints("Group")}): Group[${`(A..N)`}] = + new Group[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + def empty: ${`(A..N)`} = ${nullaryTuple("empty")} + def inverse(x: ${`(A..N)`}): ${`(A..N)`} = ${unaryTuple("inverse")} + } + + implicit def catsKernelStdHashForTuple${arity}[${`A..N`}](implicit ${constraints("Hash")}): Hash[${`(A..N)`}] = + new Hash[${`(A..N)`}] { + def hash(x: ${`(A..N)`}): Int = ${unaryMethod("hash").mkString(s"$tupleNHeader(", ", ", ")")}.hashCode() + def eqv(x: ${`(A..N)`}, y: ${`(A..N)`}): Boolean = ${binMethod("eqv").mkString(" && ")} + } + + implicit def catsKernelStdPartialOrderForTuple${arity}[${`A..N`}](implicit ${constraints("PartialOrder")}): PartialOrder[${`(A..N)`}] = + new PartialOrder[${`(A..N)`}] { + def partialCompare(x: ${`(A..N)`}, y: ${`(A..N)`}): Double = + ${binMethod("partialCompare").mkString("Array(", ", ", ")")}.find(_ != 0.0).getOrElse(0.0) + } + """}), + + InstanceDef("trait TupleInstances2 extends TupleInstances3 {", + tv => new TemplatedBlock(tv) { + import tv._ + def content = + block""" + implicit def catsKernelStdBandForTuple${arity}[${`A..N`}](implicit ${constraints("Band")}): Band[${`(A..N)`}] = + new Band[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + } + + implicit def catsKernelStdCommutativeSemigroupForTuple${arity}[${`A..N`}](implicit ${constraints("CommutativeSemigroup")}): CommutativeSemigroup[${`(A..N)`}] = + new CommutativeSemigroup[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + } + + implicit def catsKernelStdMonoidForTuple${arity}[${`A..N`}](implicit ${constraints("Monoid")}): Monoid[${`(A..N)`}] = + new Monoid[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + def empty: ${`(A..N)`} = ${nullaryTuple("empty")} + } + """}), + + InstanceDef("trait TupleInstances3 {", + tv => new TemplatedBlock(tv) { + import tv._ + def content = + block""" + implicit def catsKernelStdSemigroupForTuple${arity}[${`A..N`}](implicit ${constraints("Semigroup")}): Semigroup[${`(A..N)`}] = + new Semigroup[${`(A..N)`}] { + def combine(x: ${`(A..N)`}, y: ${`(A..N)`}): ${`(A..N)`} = ${binTuple("combine")} + } + + implicit def catsKernelStdEqForTuple${arity}[${`A..N`}](implicit ${constraints("Eq")}): Eq[${`(A..N)`}] = + new Eq[${`(A..N)`}] { + def eqv(x: ${`(A..N)`}, y: ${`(A..N)`}): Boolean = ${binMethod("eqv").mkString(" && ")} + } + """})) } }