From 0e2b54ec647e856a5e36698db3f085d52ab5ed2b Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Mon, 2 Dec 2019 21:02:22 +0100 Subject: [PATCH 1/6] Avoid eta-expansion syntax --- core/src/main/scala/cats/ApplicativeError.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/scala/cats/ApplicativeError.scala b/core/src/main/scala/cats/ApplicativeError.scala index 43072acb6d..85881b8778 100644 --- a/core/src/main/scala/cats/ApplicativeError.scala +++ b/core/src/main/scala/cats/ApplicativeError.scala @@ -92,7 +92,7 @@ trait ApplicativeError[F[_], E] extends Applicative[F] { * `F[A]` values. */ def recover[A](fa: F[A])(pf: PartialFunction[E, A]): F[A] = - handleErrorWith(fa)(e => (pf.andThen(pure _)).applyOrElse(e, raiseError _)) + handleErrorWith(fa)(e => (pf.andThen(pure(_))).applyOrElse(e, raiseError(_))) /** * Recover from certain errors by mapping them to an `F[A]` value. From e81acbaa18accde28d2a9d2755ce44d0b24bcc1b Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Mon, 2 Dec 2019 21:03:44 +0100 Subject: [PATCH 2/6] Help out type inference --- core/src/main/scala/cats/Composed.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/scala/cats/Composed.scala b/core/src/main/scala/cats/Composed.scala index 5fe40602f4..ec3b4f22d6 100644 --- a/core/src/main/scala/cats/Composed.scala +++ b/core/src/main/scala/cats/Composed.scala @@ -30,7 +30,7 @@ private[cats] trait ComposedApply[F[_], G[_]] extends Apply[λ[α => F[G[α]]]] def G: Apply[G] override def ap[A, B](fgf: F[G[A => B]])(fga: F[G[A]]): F[G[B]] = - F.ap(F.map(fgf)(gf => G.ap(gf)(_)))(fga) + F.ap(F.map(fgf)(gf => (ga: G[A]) => G.ap(gf)(ga)))(fga) override def product[A, B](fga: F[G[A]], fgb: F[G[B]]): F[G[(A, B)]] = F.map2(fga, fgb)(G.product) From 038726d840fbe4fe698ddf99c8c17217a91bbc18 Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Mon, 2 Dec 2019 21:07:19 +0100 Subject: [PATCH 3/6] Another explicit type for Dotty --- core/src/main/scala/cats/data/Nested.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/scala/cats/data/Nested.scala b/core/src/main/scala/cats/data/Nested.scala index 5dc8e1304c..cb80670294 100644 --- a/core/src/main/scala/cats/data/Nested.scala +++ b/core/src/main/scala/cats/data/Nested.scala @@ -247,7 +247,7 @@ abstract private[data] class NestedApplicativeError[F[_], G[_], E] def FG: Applicative[λ[α => F[G[α]]]] = AEF.compose[G](G) - def raiseError[A](e: E): Nested[F, G, A] = Nested(AEF.map(AEF.raiseError(e))(G.pure)) + def raiseError[A](e: E): Nested[F, G, A] = Nested(AEF.map(AEF.raiseError[A](e))(G.pure)) def handleErrorWith[A](fa: Nested[F, G, A])(f: E => Nested[F, G, A]): Nested[F, G, A] = Nested(AEF.handleErrorWith(fa.value)(e => f(e).value)) From bd184ac6e7deea7e702d3e7c77b846e538d867e9 Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Mon, 2 Dec 2019 21:12:38 +0100 Subject: [PATCH 4/6] More explicit types for Dotty --- core/src/main/scala/cats/instances/map.scala | 6 +++--- core/src/main/scala/cats/instances/sortedMap.scala | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/main/scala/cats/instances/map.scala b/core/src/main/scala/cats/instances/map.scala index 4cfacff041..35f2813b33 100644 --- a/core/src/main/scala/cats/instances/map.scala +++ b/core/src/main/scala/cats/instances/map.scala @@ -146,13 +146,13 @@ private[instances] trait MapInstancesBinCompat0 { val functor: Functor[Map[K, *]] = cats.instances.map.catsStdInstancesForMap[K] def mapFilter[A, B](fa: Map[K, A])(f: A => Option[B]) = - fa.collect(scala.Function.unlift(t => f(t._2).map(t._1 -> _))) + fa.collect(scala.Function.unlift((t: (K, A)) => f(t._2).map(t._1 -> _))) override def collect[A, B](fa: Map[K, A])(f: PartialFunction[A, B]) = - fa.collect(scala.Function.unlift(t => f.lift(t._2).map(t._1 -> _))) + fa.collect(scala.Function.unlift((t: (K, A)) => f.lift(t._2).map(t._1 -> _))) override def flattenOption[A](fa: Map[K, Option[A]]) = - fa.collect(scala.Function.unlift(t => t._2.map(t._1 -> _))) + fa.collect(scala.Function.unlift((t: (K, Option[A])) => t._2.map(t._1 -> _))) override def filter[A](fa: Map[K, A])(f: A => Boolean) = fa.filter { case (_, v) => f(v) } diff --git a/core/src/main/scala/cats/instances/sortedMap.scala b/core/src/main/scala/cats/instances/sortedMap.scala index fc9b61cf90..ec201b2244 100644 --- a/core/src/main/scala/cats/instances/sortedMap.scala +++ b/core/src/main/scala/cats/instances/sortedMap.scala @@ -194,13 +194,13 @@ private[instances] trait SortedMapInstancesBinCompat0 { } override def mapFilter[A, B](fa: SortedMap[K, A])(f: (A) => Option[B]): SortedMap[K, B] = - fa.collect(scala.Function.unlift(t => f(t._2).map(t._1 -> _))) + fa.collect(scala.Function.unlift((t: (K, A)) => f(t._2).map(t._1 -> _))) override def collect[A, B](fa: SortedMap[K, A])(f: PartialFunction[A, B]): SortedMap[K, B] = - fa.collect(scala.Function.unlift(t => f.lift(t._2).map(t._1 -> _))) + fa.collect(scala.Function.unlift((t: (K, A)) => f.lift(t._2).map(t._1 -> _))) override def flattenOption[A](fa: SortedMap[K, Option[A]]): SortedMap[K, A] = - fa.collect(scala.Function.unlift(t => t._2.map(t._1 -> _))) + fa.collect(scala.Function.unlift((t: (K, Option[A])) => t._2.map(t._1 -> _))) override def filter[A](fa: SortedMap[K, A])(f: (A) => Boolean): SortedMap[K, A] = fa.filter { case (_, v) => f(v) } From de2deb8beda94bfc44971b90fec5c7c1ec080efc Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Mon, 2 Dec 2019 21:27:50 +0100 Subject: [PATCH 5/6] Call catsDataParallelForIor directly for Dotty --- core/src/main/scala/cats/data/IorT.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/scala/cats/data/IorT.scala b/core/src/main/scala/cats/data/IorT.scala index 89ef597a02..81aa07053f 100644 --- a/core/src/main/scala/cats/data/IorT.scala +++ b/core/src/main/scala/cats/data/IorT.scala @@ -472,7 +472,7 @@ abstract private[data] class IorTInstances1 extends IorTInstances2 { type F[x] = IorT[F0, E, x] private[this] val identityK: IorT[F0, E, *] ~> IorT[F0, E, *] = FunctionK.id private[this] val underlyingParallel: Parallel.Aux[Ior[E, *], Ior[E, *]] = - Parallel[Ior[E, *], Ior[E, *]] + Ior.catsDataParallelForIor[E] def parallel: IorT[F0, E, *] ~> IorT[F0, E, *] = identityK def sequential: IorT[F0, E, *] ~> IorT[F0, E, *] = identityK From a0ea859d295b97a7f6add4b69738b513073834f1 Mon Sep 17 00:00:00 2001 From: Travis Brown Date: Tue, 3 Dec 2019 03:27:33 -0600 Subject: [PATCH 6/6] Fix code on Scala 2 --- core/src/main/scala/cats/ApplicativeError.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/scala/cats/ApplicativeError.scala b/core/src/main/scala/cats/ApplicativeError.scala index 85881b8778..e9d9b6c811 100644 --- a/core/src/main/scala/cats/ApplicativeError.scala +++ b/core/src/main/scala/cats/ApplicativeError.scala @@ -92,7 +92,7 @@ trait ApplicativeError[F[_], E] extends Applicative[F] { * `F[A]` values. */ def recover[A](fa: F[A])(pf: PartialFunction[E, A]): F[A] = - handleErrorWith(fa)(e => (pf.andThen(pure(_))).applyOrElse(e, raiseError(_))) + handleErrorWith(fa)(e => (pf.andThen(pure(_))).applyOrElse(e, raiseError[A](_))) /** * Recover from certain errors by mapping them to an `F[A]` value.