diff --git a/core/src/main/scala/cats/Parallel.scala b/core/src/main/scala/cats/Parallel.scala index 82441c48d5..140176964c 100644 --- a/core/src/main/scala/cats/Parallel.scala +++ b/core/src/main/scala/cats/Parallel.scala @@ -23,6 +23,8 @@ trait Parallel[M[_], F[_]] { object Parallel extends ParallelArityFunctions { + def apply[M[_], F[_]](implicit P: Parallel[M, F]): Parallel[M, F] = P + /** * Like `Traverse[A].sequence`, but uses the applicative instance * corresponding to the Parallel instance instead. diff --git a/tests/src/test/scala/cats/tests/ParallelTests.scala b/tests/src/test/scala/cats/tests/ParallelTests.scala index 30c69b04c7..d79489dce1 100644 --- a/tests/src/test/scala/cats/tests/ParallelTests.scala +++ b/tests/src/test/scala/cats/tests/ParallelTests.scala @@ -3,12 +3,14 @@ package cats import cats.data._ import cats.tests.CatsSuite +import org.scalatest.FunSuite import cats.laws.discipline.{ApplicativeErrorTests, ParallelTests => ParallelTypeclassTests} import cats.laws.discipline.eq._ import cats.laws.discipline.arbitrary._ import org.scalacheck.Arbitrary +import org.typelevel.discipline.scalatest.Discipline -class ParallelTests extends CatsSuite { +class ParallelTests extends CatsSuite with ApplicativeErrorForEitherTest { test("ParTraversing Either should accumulate errors") { @@ -68,5 +70,20 @@ class ParallelTests extends CatsSuite { checkAll("Parallel[KlesliT[M, ?], Nested[F, Option, ?]]", ParallelTypeclassTests[Kleisli[Either[String, ?], Int, ?], Kleisli[Validated[String, ?], Int, ?], Int].parallel) } - checkAll("ApplicativeError[Either[String, Int]]", ApplicativeErrorTests[Either[String, ?], String].applicativeError[Int, Int, Int]) + +} + +trait ApplicativeErrorForEitherTest extends FunSuite with Discipline { + import cats.instances.parallel._ + import cats.instances.either._ + import cats.instances.string._ + import cats.instances.int._ + import cats.instances.unit._ + import cats.instances.tuple._ + + implicit def eqV[A: Eq,B: Eq]: Eq[Validated[A, B]] = cats.data.Validated.catsDataEqForValidated + + + + checkAll("ApplicativeError[Validated[String, Int]]", ApplicativeErrorTests[Validated[String, ?], String].applicativeError[Int, Int, Int]) }