Abstract Type Member Parallel Instances
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs/src/main/tut
par/shared/src
project
.gitignore
.scalafmt.conf
.travis.yml
CODE_OF_CONDUCT.md
LICENSE
README.md
build.sbt
version.sbt

README.md

cats-par Build Status Maven Central

Parallel has 2 types instead of 1 despite the second type generally having a canonical instance. This uses an abstract type member to allow using a single type rather than 2. As suggestions have made and plans in place for this in cats 2.0 this is an intermediate solution that will be deprecated upon its release.

Reasoning

Temporary Solution For typelevel/cats#2233

Initial Credit to @johnnek for the idea

Quick Start

To use cats-par in an existing SBT project with Scala 2.11 or a later version, add the following dependency to your build.sbt:

libraryDependencies += "io.chrisdavenport" %% "cats-par" % "<version>"

Examples

import cats._
import cats.implicits._
import cats.data._
import cats.temp.par._

// Without This You Require a second type parameter and to continue, this second
// param up the entire call stack
def withoutPar[F[_]: Monad, G[_], A, C, D](as: List[A], f: A => Kleisli[F, C, D])
                                        (implicit P: Parallel[F, G]): Kleisli[F, C, List[D]] =
  as.parTraverse(f)

// With This It Is Just Another Contstraint on your Abstract F
def withPar[F[_]: Monad : Par, A, C, D](as: List[A], f: A => Kleisli[F, C, D]): Kleisli[F, C, List[D]] =
  as.parTraverse(f)