diff --git a/.scalafmt.conf b/.scalafmt.conf
new file mode 100644
index 0000000000..d7103932f5
--- /dev/null
+++ b/.scalafmt.conf
@@ -0,0 +1,6 @@
+maxColumn = 120
+continuationIndent.defnSite = 2
+assumeStandardLibraryStripMargin = true
+danglingParentheses = true
+rewrite.rules = [AvoidInfix, SortImports, RedundantBraces, RedundantParens, SortModifiers]
+docstrings = JavaDoc
diff --git a/alleycats-core/src/main/scala/alleycats/ConsK.scala b/alleycats-core/src/main/scala/alleycats/ConsK.scala
index 021fddbb29..9511065c4b 100644
--- a/alleycats-core/src/main/scala/alleycats/ConsK.scala
+++ b/alleycats-core/src/main/scala/alleycats/ConsK.scala
@@ -17,4 +17,3 @@ object ConsK extends ConsK0 {
@imports[ConsK]
trait ConsK0
-
diff --git a/alleycats-core/src/main/scala/alleycats/std/map.scala b/alleycats-core/src/main/scala/alleycats/std/map.scala
index 4f12001978..63b9d7839d 100644
--- a/alleycats-core/src/main/scala/alleycats/std/map.scala
+++ b/alleycats-core/src/main/scala/alleycats/std/map.scala
@@ -9,13 +9,17 @@ trait MapInstances {
// toList is inconsistent. See https://github.com/typelevel/cats/issues/1831
implicit def alleycatsStdInstancesForMap[K]: Traverse[Map[K, ?]] =
- new Traverse[Map[K, ?]] {
+ new Traverse[Map[K, ?]] {
def traverse[G[_], A, B](fa: Map[K, A])(f: A => G[B])(implicit G: Applicative[G]): G[Map[K, B]] = {
val gba: Eval[G[Map[K, B]]] = Always(G.pure(Map.empty))
- val gbb = Foldable.iterateRight(fa, gba){ (kv, lbuf) =>
- G.map2Eval(f(kv._2), lbuf)({ (b, buf) => buf + (kv._1 -> b)})
- }.value
+ val gbb = Foldable
+ .iterateRight(fa, gba) { (kv, lbuf) =>
+ G.map2Eval(f(kv._2), lbuf)({ (b, buf) =>
+ buf + (kv._1 -> b)
+ })
+ }
+ .value
G.map(gbb)(_.toMap)
}
@@ -23,7 +27,7 @@ trait MapInstances {
fa.map { case (k, a) => (k, f(a)) }
def foldLeft[A, B](fa: Map[K, A], b: B)(f: (B, A) => B): B =
- fa.foldLeft(b) { case (x, (k, a)) => f(x, a)}
+ fa.foldLeft(b) { case (x, (k, a)) => f(x, a) }
def foldRight[A, B](fa: Map[K, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
Foldable.iterateRight(fa.values, lb)(f)
@@ -45,11 +49,13 @@ trait MapInstances {
override def toList[A](fa: Map[K, A]): List[A] = fa.values.toList
- override def collectFirst[A, B](fa: Map[K, A])(pf: PartialFunction[A, B]): Option[B] = fa.collectFirst(new PartialFunction[(K, A), B] {
- override def isDefinedAt(x: (K, A)) = pf.isDefinedAt(x._2)
- override def apply(v1: (K, A)) = pf(v1._2)
- })
+ override def collectFirst[A, B](fa: Map[K, A])(pf: PartialFunction[A, B]): Option[B] =
+ fa.collectFirst(new PartialFunction[(K, A), B] {
+ override def isDefinedAt(x: (K, A)) = pf.isDefinedAt(x._2)
+ override def apply(v1: (K, A)) = pf(v1._2)
+ })
- override def collectFirstSome[A, B](fa: Map[K, A])(f: A => Option[B]): Option[B] = collectFirst(fa)(Function.unlift(f))
+ override def collectFirstSome[A, B](fa: Map[K, A])(f: A => Option[B]): Option[B] =
+ collectFirst(fa)(Function.unlift(f))
}
}
diff --git a/alleycats-core/src/main/scala/alleycats/std/set.scala b/alleycats-core/src/main/scala/alleycats/std/set.scala
index 9eaa6a0304..3477d946ed 100644
--- a/alleycats-core/src/main/scala/alleycats/std/set.scala
+++ b/alleycats-core/src/main/scala/alleycats/std/set.scala
@@ -80,15 +80,15 @@ object SetInstances {
override def get[A](fa: Set[A])(idx: Long): Option[A] = {
@tailrec
- def go(idx: Int, it: Iterator[A]): Option[A] = {
+ def go(idx: Int, it: Iterator[A]): Option[A] =
if (it.hasNext) {
- if (idx == 0) Some(it.next) else {
+ if (idx == 0) Some(it.next)
+ else {
it.next
go(idx - 1, it)
}
} else None
- }
- if (idx < Int.MaxValue && idx >= 0L) go(idx.toInt, fa.toIterator) else None
+ if (idx < Int.MaxValue && idx >= 0L) go(idx.toInt, fa.toIterator) else None
}
override def size[A](fa: Set[A]): Long = fa.size.toLong
diff --git a/alleycats-core/src/main/scala/alleycats/std/try.scala b/alleycats-core/src/main/scala/alleycats/std/try.scala
index 1594c5c9cb..a0b8689022 100644
--- a/alleycats-core/src/main/scala/alleycats/std/try.scala
+++ b/alleycats-core/src/main/scala/alleycats/std/try.scala
@@ -42,7 +42,8 @@ object TryInstances {
def coflatMap[A, B](fa: Try[A])(f: Try[A] => B): Try[B] = Try(f(fa))
def extract[A](p: Try[A]): A = p.get
- def tailRecM[A, B](a: A)(f: (A) => Try[Either[A, B]]): Try[B] = cats.instances.try_.catsStdInstancesForTry.tailRecM(a)(f)
+ def tailRecM[A, B](a: A)(f: (A) => Try[Either[A, B]]): Try[B] =
+ cats.instances.try_.catsStdInstancesForTry.tailRecM(a)(f)
}
}
diff --git a/alleycats-core/src/main/scala/alleycats/syntax/all.scala b/alleycats-core/src/main/scala/alleycats/syntax/all.scala
index cb1e438c68..6347619726 100644
--- a/alleycats-core/src/main/scala/alleycats/syntax/all.scala
+++ b/alleycats-core/src/main/scala/alleycats/syntax/all.scala
@@ -1,5 +1,3 @@
package alleycats.syntax
-object all
- extends EmptySyntax
- with FoldableSyntax
+object all extends EmptySyntax with FoldableSyntax
diff --git a/alleycats-core/src/main/scala/alleycats/syntax/foldable.scala b/alleycats-core/src/main/scala/alleycats/syntax/foldable.scala
index ddcbce70b2..f4e4c9a115 100644
--- a/alleycats-core/src/main/scala/alleycats/syntax/foldable.scala
+++ b/alleycats-core/src/main/scala/alleycats/syntax/foldable.scala
@@ -9,6 +9,8 @@ object foldable extends FoldableSyntax
trait FoldableSyntax {
implicit class ExtraFoldableOps[F[_]: Foldable, A](fa: F[A]) {
def foreach(f: A => Unit): Unit =
- fa.foldLeft(()) { (_, a) => f(a) }
+ fa.foldLeft(()) { (_, a) =>
+ f(a)
+ }
}
}
diff --git a/alleycats-laws/src/main/scala/alleycats/laws/discipline/FlatMapRecTests.scala b/alleycats-laws/src/main/scala/alleycats/laws/discipline/FlatMapRecTests.scala
index 1bfc8333b8..9c4a34ef63 100644
--- a/alleycats-laws/src/main/scala/alleycats/laws/discipline/FlatMapRecTests.scala
+++ b/alleycats-laws/src/main/scala/alleycats/laws/discipline/FlatMapRecTests.scala
@@ -7,20 +7,18 @@ import org.scalacheck.Arbitrary
import org.scalacheck.Prop._
import org.typelevel.discipline.Laws
-
trait FlatMapRecTests[F[_]] extends Laws {
def laws: FlatMapLaws[F]
def tailRecM[A: Arbitrary](implicit
ArbFA: Arbitrary[F[A]],
ArbAFA: Arbitrary[A => F[A]],
- EqFA: Eq[F[A]]
- ): RuleSet = {
+ EqFA: Eq[F[A]]): RuleSet =
new DefaultRuleSet(
name = "flatMapTailRec",
parent = None,
- "tailRecM consistent flatMap" -> forAll(laws.tailRecMConsistentFlatMap[A] _))
- }
+ "tailRecM consistent flatMap" -> forAll(laws.tailRecMConsistentFlatMap[A] _)
+ )
}
object FlatMapRecTests {
diff --git a/alleycats-tests/src/test/scala/alleycats/tests/AlleycatsSuite.scala b/alleycats-tests/src/test/scala/alleycats/tests/AlleycatsSuite.scala
index c076904711..e545d71d43 100644
--- a/alleycats-tests/src/test/scala/alleycats/tests/AlleycatsSuite.scala
+++ b/alleycats-tests/src/test/scala/alleycats/tests/AlleycatsSuite.scala
@@ -1,7 +1,6 @@
package alleycats
package tests
-
import alleycats.std.MapInstances
import catalysts.Platform
import cats._
@@ -25,7 +24,8 @@ trait TestSettings extends Configuration with Matchers {
maxDiscardedFactor = if (Platform.isJvm) PosZDouble(5.0) else PosZDouble(50.0),
minSize = PosZInt(0),
sizeRange = if (Platform.isJvm) PosZInt(10) else PosZInt(5),
- workers = PosInt(1))
+ workers = PosInt(1)
+ )
lazy val slowCheckConfiguration: PropertyCheckConfiguration =
if (Platform.isJvm) checkConfiguration
@@ -36,7 +36,17 @@ trait TestSettings extends Configuration with Matchers {
* An opinionated stack of traits to improve consistency and reduce
* boilerplate in Alleycats tests. Derived from Cats.
*/
-trait AlleycatsSuite extends FunSuite with Matchers with GeneratorDrivenPropertyChecks with Discipline with TestSettings with AllInstances with AllSyntax with TestInstances with StrictCatsEquality with MapInstances {
+trait AlleycatsSuite
+ extends FunSuite
+ with Matchers
+ with GeneratorDrivenPropertyChecks
+ with Discipline
+ with TestSettings
+ with AllInstances
+ with AllSyntax
+ with TestInstances
+ with StrictCatsEquality
+ with MapInstances {
implicit override val generatorDrivenConfig: PropertyCheckConfiguration =
checkConfiguration
@@ -48,7 +58,5 @@ trait AlleycatsSuite extends FunSuite with Matchers with GeneratorDrivenProperty
sealed trait TestInstances {
// To be replaced by https://github.com/rickynils/scalacheck/pull/170
implicit def arbitraryTry[A: Arbitrary]: Arbitrary[Try[A]] =
- Arbitrary(Gen.oneOf(
- arbitrary[A].map(Success(_)),
- arbitrary[Throwable].map(Failure(_))))
+ Arbitrary(Gen.oneOf(arbitrary[A].map(Success(_)), arbitrary[Throwable].map(Failure(_))))
}
diff --git a/alleycats-tests/src/test/scala/alleycats/tests/IterableTests.scala b/alleycats-tests/src/test/scala/alleycats/tests/IterableTests.scala
index 157e637f14..7ac5f2d6ef 100644
--- a/alleycats-tests/src/test/scala/alleycats/tests/IterableTests.scala
+++ b/alleycats-tests/src/test/scala/alleycats/tests/IterableTests.scala
@@ -6,18 +6,20 @@ import alleycats.std.all._
class IterableTests extends AlleycatsSuite {
- test("foldLeft sum == sum"){
+ test("foldLeft sum == sum") {
val it = Iterable(1, 2, 3)
- Foldable[Iterable].foldLeft(it, 0){
+ Foldable[Iterable].foldLeft(it, 0) {
case (b, a) => a + b
- } shouldEqual(it.sum)
+ } shouldEqual (it.sum)
}
- test("foldRight early termination"){
- Foldable[Iterable].foldRight(Iterable(1, 2, 3), Eval.now("KO")){
+ test("foldRight early termination") {
+ Foldable[Iterable]
+ .foldRight(Iterable(1, 2, 3), Eval.now("KO")) {
case (2, _) => Eval.now("OK")
case (a, b) => b
- }.value shouldEqual(Eval.now("OK").value)
- }
+ }
+ .value shouldEqual (Eval.now("OK").value)
+ }
}
diff --git a/alleycats-tests/src/test/scala/alleycats/tests/SetSuite.scala b/alleycats-tests/src/test/scala/alleycats/tests/SetSuite.scala
index 6f1136d383..02ae856d55 100644
--- a/alleycats-tests/src/test/scala/alleycats/tests/SetSuite.scala
+++ b/alleycats-tests/src/test/scala/alleycats/tests/SetSuite.scala
@@ -11,6 +11,3 @@ class SetSuite extends AlleycatsSuite {
checkAll("Foldable[Set]", SerializableTests.serializable(Foldable[Set]))
}
-
-
-
diff --git a/build.sbt b/build.sbt
index 3381bbdd59..a615d80cdf 100644
--- a/build.sbt
+++ b/build.sbt
@@ -17,7 +17,7 @@ lazy val commonSettings = Seq(
Compile / unmanagedSourceDirectories ++= {
val bd = baseDirectory.value
def extraDirs(suffix: String) =
- CrossType.Pure.sharedSrcDir(bd, "main").toList map (f => file(f.getPath + suffix))
+ CrossType.Pure.sharedSrcDir(bd, "main").toList.map(f => file(f.getPath + suffix))
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, y)) if y <= 12 =>
extraDirs("-2.12-")
@@ -27,21 +27,19 @@ lazy val commonSettings = Seq(
}
},
coverageEnabled := {
- if(priorTo2_13(scalaVersion.value))
+ if (priorTo2_13(scalaVersion.value))
coverageEnabled.value
else
false
- } ,
- resolvers ++= Seq(
- Resolver.sonatypeRepo("releases"),
- Resolver.sonatypeRepo("snapshots")),
+ },
+ resolvers ++= Seq(Resolver.sonatypeRepo("releases"), Resolver.sonatypeRepo("snapshots")),
fork in test := true,
parallelExecution in Test := false,
scalacOptions in (Compile, doc) := (scalacOptions in (Compile, doc)).value.filter(_ != "-Xfatal-warnings"),
//todo: reenable doctests on 2.13 once it's officially released. it's disabled for now due to changes to the `toString` impl of collections
doctestGenTests := {
val unchanged = doctestGenTests.value
- if(priorTo2_13(scalaVersion.value)) unchanged else Nil
+ if (priorTo2_13(scalaVersion.value)) unchanged else Nil
},
//todo: re-enable disable scaladoc on 2.13 due to https://github.com/scala/bug/issues/11045
sources in (Compile, doc) := {
@@ -50,45 +48,44 @@ lazy val commonSettings = Seq(
}
) ++ warnUnusedImport ++ update2_12 ++ xlint
-
def macroDependencies(scalaVersion: String) =
CrossVersion.partialVersion(scalaVersion) match {
- case Some((2, minor)) if minor < 13 => Seq(
- compilerPlugin("org.scalamacros" %% "paradise" % "2.1.0" cross CrossVersion.patch)
- )
+ case Some((2, minor)) if minor < 13 =>
+ Seq(
+ compilerPlugin(("org.scalamacros" %% "paradise" % "2.1.0").cross(CrossVersion.patch))
+ )
case _ => Seq()
}
-
lazy val catsSettings = Seq(
incOptions := incOptions.value.withLogRecompileOnMacro(false),
resolvers ++= Seq(
- "bintray/non" at "http://dl.bintray.com/non/maven"
+ "bintray/non".at("http://dl.bintray.com/non/maven")
),
libraryDependencies ++= Seq(
"org.typelevel" %%% "machinist" % "0.6.5",
- compilerPlugin("org.spire-math" %% "kind-projector" % "0.9.7")) ++ macroDependencies(scalaVersion.value),
-
+ compilerPlugin("org.spire-math" %% "kind-projector" % "0.9.7")
+ ) ++ macroDependencies(scalaVersion.value),
) ++ commonSettings ++ publishSettings ++ scoverageSettings ++ simulacrumSettings
-
lazy val simulacrumSettings = Seq(
libraryDependencies += "com.github.mpilquist" %%% "simulacrum" % "0.13.0" % Provided,
pomPostProcess := { (node: xml.Node) =>
new RuleTransformer(new RewriteRule {
override def transform(node: xml.Node): Seq[xml.Node] = node match {
case e: xml.Elem
- if e.label == "dependency" &&
- e.child.exists(child => child.label == "groupId" && child.text == "com.github.mpilquist") &&
- e.child.exists(child => child.label == "artifactId" && child.text.startsWith("simulacrum_")) => Nil
+ if e.label == "dependency" &&
+ e.child.exists(child => child.label == "groupId" && child.text == "com.github.mpilquist") &&
+ e.child.exists(child => child.label == "artifactId" && child.text.startsWith("simulacrum_")) =>
+ Nil
case _ => Seq(node)
}
}).transform(node).head
}
)
-lazy val tagName = Def.setting{
- s"v${if (releaseUseGlobalVersion.value) (version in ThisBuild).value else version.value}"
+lazy val tagName = Def.setting {
+ s"v${if (releaseUseGlobalVersion.value) (version in ThisBuild).value else version.value}"
}
lazy val commonJsSettings = Seq(
@@ -132,8 +129,6 @@ lazy val includeGeneratedSrc: Setting[_] = {
}
}
-
-
// 2.13.0-M4 workarounds
def catalystsVersion(scalaVersion: String): String =
if (priorTo2_13(scalaVersion)) "0.6" else "0.7"
@@ -149,14 +144,16 @@ def disciplineVersion(scalaVersion: String): String =
lazy val disciplineDependencies = Seq(
libraryDependencies += "org.scalacheck" %%% "scalacheck" % scalaCheckVersion(scalaVersion.value),
- libraryDependencies += "org.typelevel" %%% "discipline" % disciplineVersion(scalaVersion.value))
+ libraryDependencies += "org.typelevel" %%% "discipline" % disciplineVersion(scalaVersion.value)
+)
lazy val testingDependencies = Seq(
libraryDependencies += "org.typelevel" %%% "catalysts-platform" % catalystsVersion(scalaVersion.value),
libraryDependencies += "org.typelevel" %%% "catalysts-macros" % catalystsVersion(scalaVersion.value) % "test",
// 2.13.0-M3 workaround
// libraryDependencies += "org.scalatest" %%% "scalatest" % scalaTestVersion % "test")
- libraryDependencies += "org.scalatest" %%% "scalatest" % scalatestVersion(scalaVersion.value) % "test")
+ libraryDependencies += "org.scalatest" %%% "scalatest" % scalatestVersion(scalaVersion.value) % "test"
+)
lazy val docsMappingsAPIDir = settingKey[String]("Name of subdirectory in site target directory for api docs")
@@ -168,7 +165,8 @@ lazy val docSettings = Seq(
"""
|
© 2017 The Cats Maintainers
|Website built with sbt-microsites © 2016 47 Degrees
- |""".stripMargin),
+ |""".stripMargin
+ ),
micrositeHighlightTheme := "atom-one-light",
micrositeHomepage := "http://typelevel.org/cats/",
micrositeBaseUrl := "cats",
@@ -179,7 +177,7 @@ lazy val docSettings = Seq(
file("CONTRIBUTING.md") -> ExtraMdFileConfig(
"contributing.md",
"home",
- Map("title" -> "Contributing", "section" -> "contributing", "position" -> "50")
+ Map("title" -> "Contributing", "section" -> "contributing", "position" -> "50")
),
file("README.md") -> ExtraMdFileConfig(
"index.md",
@@ -196,7 +194,8 @@ lazy val docSettings = Seq(
"gray" -> "#7B7B7E",
"gray-light" -> "#E5E5E6",
"gray-lighter" -> "#F4F3F4",
- "white-color" -> "#FFFFFF"),
+ "white-color" -> "#FFFFFF"
+ ),
autoAPIMappings := true,
unidocProjectFilter in (ScalaUnidoc, unidoc) := inProjects(kernelJVM, coreJVM, freeJVM),
docsMappingsAPIDir := "api",
@@ -207,14 +206,15 @@ lazy val docSettings = Seq(
scalacOptions in (ScalaUnidoc, unidoc) ++= Seq(
"-Xfatal-warnings",
"-groups",
- "-doc-source-url", scmInfo.value.get.browseUrl + "/tree/master€{FILE_PATH}.scala",
- "-sourcepath", baseDirectory.in(LocalRootProject).value.getAbsolutePath,
+ "-doc-source-url",
+ scmInfo.value.get.browseUrl + "/tree/master€{FILE_PATH}.scala",
+ "-sourcepath",
+ baseDirectory.in(LocalRootProject).value.getAbsolutePath,
"-diagrams"
- ) ++ (if(priorTo2_13(scalaVersion.value)) Seq(
- "-Yno-adapted-args",
- ) else Seq(
- "-Ymacro-annotations"
- )),
+ ) ++ (if (priorTo2_13(scalaVersion.value))
+ Seq("-Yno-adapted-args")
+ else
+ Seq("-Ymacro-annotations")),
scalacOptions in Tut ~= (_.filterNot(Set("-Ywarn-unused-import", "-Ywarn-dead-code"))),
git.remoteRepo := "git@github.com:typelevel/cats.git",
includeFilter in makeSite := "*.html" | "*.css" | "*.png" | "*.jpg" | "*.gif" | "*.js" | "*.swf" | "*.yml" | "*.md" | "*.svg",
@@ -226,7 +226,7 @@ def mimaPrevious(moduleName: String, scalaVer: String, ver: String): List[Module
def semverBinCompatVersions(major: Int, minor: Int, patch: Int): List[(Int, Int, Int)] = {
val majorVersions: List[Int] = List(major)
- val minorVersions : List[Int] =
+ val minorVersions: List[Int] =
if (major >= 1) Range(0, minor).inclusive.toList
else List(minor)
def patchVersions(currentMinVersion: Int): List[Int] =
@@ -246,7 +246,7 @@ def mimaPrevious(moduleName: String, scalaVer: String, ver: String): List[Module
Version(ver) match {
case Some(Version(major, Seq(minor, patch), _)) =>
semverBinCompatVersions(major.toInt, minor.toInt, patch.toInt)
- .map{case (maj, min, pat) => s"${maj}.${min}.${pat}"}
+ .map { case (maj, min, pat) => s"${maj}.${min}.${pat}" }
case _ =>
List.empty[String]
}
@@ -257,8 +257,7 @@ def mimaPrevious(moduleName: String, scalaVer: String, ver: String): List[Module
// Safety Net for Inclusions
lazy val extraVersions: List[String] = List()
-
- if(priorTo2_13(scalaVer)) {
+ if (priorTo2_13(scalaVer)) {
(mimaVersions ++ extraVersions)
.filterNot(excludedVersions.contains(_))
.map(v => "org.typelevel" %% moduleName % v)
@@ -266,11 +265,9 @@ def mimaPrevious(moduleName: String, scalaVer: String, ver: String): List[Module
}
-def mimaSettings(moduleName: String) = {
-
+def mimaSettings(moduleName: String) =
Seq(
mimaPreviousArtifacts := mimaPrevious(moduleName, scalaVersion.value, version.value).toSet,
-
mimaBinaryIssueFilters ++= {
import com.typesafe.tools.mima.core._
import com.typesafe.tools.mima.core.ProblemFilters._
@@ -286,16 +283,14 @@ def mimaSettings(moduleName: String) = {
exclude[DirectMissingMethodProblem]("cats.data.IRWSTInstances1.catsDataStrongForIRWST"),
exclude[DirectMissingMethodProblem]("cats.data.OptionTInstances1.catsDataMonadErrorMonadForOptionT")
) ++ // Only compile-time abstractions (macros) allowed here
- Seq(
- exclude[IncompatibleMethTypeProblem]("cats.arrow.FunctionKMacros.lift"),
- exclude[MissingTypesProblem]("cats.arrow.FunctionKMacros$"),
- exclude[IncompatibleMethTypeProblem]("cats.arrow.FunctionKMacros#Lifter.this"),
- exclude[IncompatibleResultTypeProblem]("cats.arrow.FunctionKMacros#Lifter.c")
- )
+ Seq(
+ exclude[IncompatibleMethTypeProblem]("cats.arrow.FunctionKMacros.lift"),
+ exclude[MissingTypesProblem]("cats.arrow.FunctionKMacros$"),
+ exclude[IncompatibleMethTypeProblem]("cats.arrow.FunctionKMacros#Lifter.this"),
+ exclude[IncompatibleResultTypeProblem]("cats.arrow.FunctionKMacros#Lifter.c")
+ )
}
)
-}
-
lazy val docs = project
.enablePlugins(MicrositesPlugin)
@@ -307,31 +302,82 @@ lazy val docs = project
.settings(commonJvmSettings)
.dependsOn(coreJVM, freeJVM, kernelLawsJVM, lawsJVM, testkitJVM)
-lazy val cats = project.in(file("."))
+lazy val cats = project
+ .in(file("."))
.settings(moduleName := "root")
.settings(catsSettings)
.settings(noPublishSettings)
.aggregate(catsJVM, catsJS)
.dependsOn(catsJVM, catsJS, testsJVM % "test-internal -> test")
-lazy val catsJVM = project.in(file(".catsJVM"))
+lazy val catsJVM = project
+ .in(file(".catsJVM"))
.settings(moduleName := "cats")
.settings(noPublishSettings)
.settings(catsSettings)
.settings(commonJvmSettings)
- .aggregate(macrosJVM, kernelJVM, kernelLawsJVM, coreJVM, lawsJVM, freeJVM, testkitJVM, testsJVM, alleycatsCoreJVM, alleycatsLawsJVM, alleycatsTestsJVM, jvm, docs)
- .dependsOn(macrosJVM, kernelJVM, kernelLawsJVM, coreJVM, lawsJVM, freeJVM, testkitJVM, testsJVM % "test-internal -> test", alleycatsCoreJVM, alleycatsLawsJVM, alleycatsTestsJVM % "test-internal -> test", jvm)
+ .aggregate(macrosJVM,
+ kernelJVM,
+ kernelLawsJVM,
+ coreJVM,
+ lawsJVM,
+ freeJVM,
+ testkitJVM,
+ testsJVM,
+ alleycatsCoreJVM,
+ alleycatsLawsJVM,
+ alleycatsTestsJVM,
+ jvm,
+ docs)
+ .dependsOn(
+ macrosJVM,
+ kernelJVM,
+ kernelLawsJVM,
+ coreJVM,
+ lawsJVM,
+ freeJVM,
+ testkitJVM,
+ testsJVM % "test-internal -> test",
+ alleycatsCoreJVM,
+ alleycatsLawsJVM,
+ alleycatsTestsJVM % "test-internal -> test",
+ jvm
+ )
-lazy val catsJS = project.in(file(".catsJS"))
+lazy val catsJS = project
+ .in(file(".catsJS"))
.settings(moduleName := "cats")
.settings(noPublishSettings)
.settings(catsSettings)
.settings(commonJsSettings)
- .aggregate(macrosJS, kernelJS, kernelLawsJS, coreJS, lawsJS, freeJS, testkitJS, testsJS, alleycatsCoreJS, alleycatsLawsJS, alleycatsTestsJS, js)
- .dependsOn(macrosJS, kernelJS, kernelLawsJS, coreJS, lawsJS, freeJS, testkitJS, testsJS % "test-internal -> test", alleycatsCoreJS, alleycatsLawsJS, alleycatsTestsJS % "test-internal -> test", js)
+ .aggregate(macrosJS,
+ kernelJS,
+ kernelLawsJS,
+ coreJS,
+ lawsJS,
+ freeJS,
+ testkitJS,
+ testsJS,
+ alleycatsCoreJS,
+ alleycatsLawsJS,
+ alleycatsTestsJS,
+ js)
+ .dependsOn(
+ macrosJS,
+ kernelJS,
+ kernelLawsJS,
+ coreJS,
+ lawsJS,
+ freeJS,
+ testkitJS,
+ testsJS % "test-internal -> test",
+ alleycatsCoreJS,
+ alleycatsLawsJS,
+ alleycatsTestsJS % "test-internal -> test",
+ js
+ )
.enablePlugins(ScalaJSPlugin)
-
lazy val macros = crossProject(JSPlatform, JVMPlatform)
.crossType(CrossType.Pure)
.settings(moduleName := "cats-macros", name := "Cats macros")
@@ -344,7 +390,6 @@ lazy val macros = crossProject(JSPlatform, JVMPlatform)
lazy val macrosJVM = macros.jvm
lazy val macrosJS = macros.js
-
lazy val kernel = crossProject(JSPlatform, JVMPlatform, NativePlatform)
.crossType(CrossType.Pure)
.in(file("kernel"))
@@ -389,7 +434,7 @@ lazy val core = crossProject(JSPlatform, JVMPlatform)
.settings(includeGeneratedSrc)
.settings(libraryDependencies += "org.scalacheck" %%% "scalacheck" % scalaCheckVersion(scalaVersion.value) % "test")
.jsSettings(commonJsSettings)
- .jvmSettings(commonJvmSettings ++ mimaSettings("cats-core") )
+ .jvmSettings(commonJvmSettings ++ mimaSettings("cats-core"))
lazy val coreJVM = core.jvm
lazy val coreJS = core.js
@@ -431,7 +476,6 @@ lazy val tests = crossProject(JSPlatform, JVMPlatform)
lazy val testsJVM = tests.jvm
lazy val testsJS = tests.js
-
lazy val testkit = crossProject(JSPlatform, JVMPlatform)
.crossType(CrossType.Pure)
.dependsOn(macros, core, laws)
@@ -452,17 +496,18 @@ lazy val alleycatsCore = crossProject(JSPlatform, JVMPlatform)
.in(file("alleycats-core"))
.dependsOn(core)
.settings(moduleName := "alleycats-core", name := "Alleycats core")
- .settings(libraryDependencies ++= Seq(
- "org.typelevel" %% "export-hook" % "1.2.0"
- ))
+ .settings(
+ libraryDependencies ++= Seq(
+ "org.typelevel" %% "export-hook" % "1.2.0"
+ )
+ )
.settings(catsSettings)
.settings(publishSettings)
.settings(scoverageSettings)
.settings(includeGeneratedSrc)
.jsSettings(commonJsSettings)
.jvmSettings(commonJvmSettings)
- .settings(scalacOptions ~= {_.filterNot("-Ywarn-unused-import" == _)}) //export-hook triggers unused import
-
+ .settings(scalacOptions ~= { _.filterNot("-Ywarn-unused-import" == _) }) //export-hook triggers unused import
lazy val alleycatsCoreJVM = alleycatsCore.jvm
lazy val alleycatsCoreJS = alleycatsCore.js
@@ -498,23 +543,24 @@ lazy val alleycatsTests = crossProject(JSPlatform, JVMPlatform)
lazy val alleycatsTestsJVM = alleycatsTests.jvm
lazy val alleycatsTestsJS = alleycatsTests.js
-
// bench is currently JVM-only
-lazy val bench = project.dependsOn(macrosJVM, coreJVM, freeJVM, lawsJVM)
+lazy val bench = project
+ .dependsOn(macrosJVM, coreJVM, freeJVM, lawsJVM)
.settings(moduleName := "cats-bench")
.settings(catsSettings)
.settings(noPublishSettings)
.settings(commonJvmSettings)
.settings(coverageEnabled := false)
- .settings(libraryDependencies ++= Seq(
- "org.scalaz" %% "scalaz-core" % "7.2.23",
- "org.spire-math" %% "chain" % "0.3.0",
- "co.fs2" %% "fs2-core" % "0.10.4"
- ))
+ .settings(
+ libraryDependencies ++= Seq(
+ "org.scalaz" %% "scalaz-core" % "7.2.23",
+ "org.spire-math" %% "chain" % "0.3.0",
+ "co.fs2" %% "fs2-core" % "0.10.4"
+ )
+ )
.enablePlugins(JmhPlugin)
-
lazy val binCompatTest = project
.disablePlugins(CoursierPlugin)
.settings(noPublishSettings)
@@ -532,7 +578,6 @@ lazy val binCompatTest = project
)
.dependsOn(coreJVM % Test)
-
// cats-js is JS-only
lazy val js = project
.dependsOn(macrosJS, coreJS, testsJS % "test-internal -> test")
@@ -541,7 +586,6 @@ lazy val js = project
.settings(commonJsSettings)
.enablePlugins(ScalaJSPlugin)
-
// cats-jvm is JVM-only
lazy val jvm = project
.dependsOn(macrosJVM, coreJVM, testsJVM % "test-internal -> test")
@@ -636,30 +680,22 @@ lazy val publishSettings = Seq(
)
) ++ credentialSettings ++ sharedPublishSettings ++ sharedReleaseProcess
-// These aliases serialise the build for the benefit of Travis-CI.
+// Scalafmt
+addCommandAlias("fmt", "; compile:scalafmt; test:scalafmt; scalafmtSbt")
+addCommandAlias("fmtCheck", "; compile:scalafmtCheck; test:scalafmtCheck; scalafmtSbtCheck")
+// These aliases serialise the build for the benefit of Travis-CI.
addCommandAlias("buildKernelJVM", ";kernelJVM/test;kernelLawsJVM/test")
-
addCommandAlias("buildCoreJVM", ";macrosJVM/test;coreJVM/test")
-
addCommandAlias("buildTestsJVM", ";lawsJVM/test;testkitJVM/test;testsJVM/test;jvm/test")
-
addCommandAlias("buildFreeJVM", ";freeJVM/test")
-
addCommandAlias("buildAlleycatsJVM", ";alleycatsCoreJVM/test;alleycatsLawsJVM/test;alleycatsTestsJVM/test")
-
addCommandAlias("buildJVM", ";buildKernelJVM;buildCoreJVM;buildTestsJVM;buildFreeJVM;buildAlleycatsJVM")
-
addCommandAlias("validateBC", ";binCompatTest/test;mimaReportBinaryIssues")
-
-addCommandAlias("validateJVM", ";scalastyle;buildJVM;bench/test;validateBC;makeMicrosite")
-
+addCommandAlias("validateJVM", ";scalastyle;fmtCheck;buildJVM;bench/test;validateBC;makeMicrosite")
addCommandAlias("validateJS", ";catsJS/compile;testsJS/test;js/test")
-
addCommandAlias("validateKernelJS", "kernelLawsJS/test")
-
addCommandAlias("validateFreeJS", "freeJS/test") //separated due to memory constraint on travis
-
addCommandAlias("validate", ";clean;validateJS;validateKernelJS;validateFreeJS;validateJVM")
////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -679,36 +715,41 @@ lazy val noPublishSettings = Seq(
lazy val crossVersionSharedSources: Seq[Setting[_]] =
Seq(Compile, Test).map { sc =>
(unmanagedSourceDirectories in sc) ++= {
- (unmanagedSourceDirectories in sc ).value.map {
- dir:File => new File(dir.getPath + "_" + scalaBinaryVersion.value)
+ (unmanagedSourceDirectories in sc).value.map { dir: File =>
+ new File(dir.getPath + "_" + scalaBinaryVersion.value)
}
}
}
-def commonScalacOptions(scalaVersion: String) = Seq(
- "-encoding", "UTF-8",
- "-feature",
- "-language:existentials",
- "-language:higherKinds",
- "-language:implicitConversions",
- "-language:experimental.macros",
- "-unchecked",
- "-Ywarn-dead-code",
- "-Ywarn-numeric-widen",
- "-Ywarn-value-discard",
- "-Xfuture"
-) ++ (if(priorTo2_13(scalaVersion)) Seq(
- "-Yno-adapted-args",
- "-Xfatal-warnings", //todo: add the following two back to 2.13
- "-deprecation"
-) else Seq(
- "-Ymacro-annotations"
-))
+def commonScalacOptions(scalaVersion: String) =
+ Seq(
+ "-encoding",
+ "UTF-8",
+ "-feature",
+ "-language:existentials",
+ "-language:higherKinds",
+ "-language:implicitConversions",
+ "-language:experimental.macros",
+ "-unchecked",
+ "-Ywarn-dead-code",
+ "-Ywarn-numeric-widen",
+ "-Ywarn-value-discard",
+ "-Xfuture"
+ ) ++ (if (priorTo2_13(scalaVersion))
+ Seq(
+ "-Yno-adapted-args",
+ "-Xfatal-warnings", //todo: add the following two back to 2.13
+ "-deprecation"
+ )
+ else
+ Seq(
+ "-Ymacro-annotations"
+ ))
def priorTo2_13(scalaVersion: String): Boolean =
CrossVersion.partialVersion(scalaVersion) match {
case Some((2, minor)) if minor < 13 => true
- case _ => false
+ case _ => false
}
lazy val sharedPublishSettings = Seq(
@@ -716,16 +757,16 @@ lazy val sharedPublishSettings = Seq(
releaseTagName := tagName.value,
releasePublishArtifactsAction := PgpKeys.publishSigned.value,
releaseVcsSign := true,
- useGpg := true, // bouncycastle has bugs with subkeys, so we use gpg instead
+ useGpg := true, // bouncycastle has bugs with subkeys, so we use gpg instead
publishMavenStyle := true,
publishArtifact in Test := false,
pomIncludeRepository := Function.const(false),
publishTo := {
val nexus = "https://oss.sonatype.org/"
if (isSnapshot.value)
- Some("Snapshots" at nexus + "content/repositories/snapshots")
+ Some("Snapshots".at(nexus + "content/repositories/snapshots"))
else
- Some("Releases" at nexus + "service/local/staging/deploy/maven2")
+ Some("Releases".at(nexus + "service/local/staging/deploy/maven2"))
}
)
@@ -742,12 +783,13 @@ lazy val sharedReleaseProcess = Seq(
setNextVersion,
commitNextVersion,
releaseStepCommand("sonatypeReleaseAll"),
- pushChanges)
+ pushChanges
+ )
)
lazy val warnUnusedImport = Seq(
scalacOptions ++= Seq("-Ywarn-unused-import"),
- scalacOptions in (Compile, console) ~= {_.filterNot("-Ywarn-unused-import" == _)},
+ scalacOptions in (Compile, console) ~= { _.filterNot("-Ywarn-unused-import" == _) },
scalacOptions in (Test, console) := (scalacOptions in (Compile, console)).value
)
@@ -759,12 +801,11 @@ lazy val credentialSettings = Seq(
} yield Credentials("Sonatype Nexus Repository Manager", "oss.sonatype.org", username, password)).toSeq
)
-
lazy val update2_12 = Seq(
scalacOptions -= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, scalaMajor)) if scalaMajor >= 12 => "-Yinline-warnings"
- case _ => ""
+ case _ => ""
}
}
)
@@ -773,7 +814,7 @@ lazy val xlint = Seq(
scalacOptions += {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, scalaMajor)) if scalaMajor >= 12 => "-Xlint:-unused,_"
- case _ => "-Xlint"
+ case _ => "-Xlint"
}
}
)
diff --git a/core/src/main/scala-2.12-/cats/compat/SortedSet.scala b/core/src/main/scala-2.12-/cats/compat/SortedSet.scala
index f732921b56..6bfe60fd50 100644
--- a/core/src/main/scala-2.12-/cats/compat/SortedSet.scala
+++ b/core/src/main/scala-2.12-/cats/compat/SortedSet.scala
@@ -3,7 +3,6 @@ package compat
import scala.collection.immutable
-
private[cats] object SortedSet {
def zipWithIndex[A](s: immutable.SortedSet[A])(implicit A: Ordering[A]): immutable.SortedSet[(A, Int)] =
s.zipWithIndex
diff --git a/core/src/main/scala/cats/Alternative.scala b/core/src/main/scala/cats/Alternative.scala
index 126436115d..d6ddff1f77 100644
--- a/core/src/main/scala/cats/Alternative.scala
+++ b/core/src/main/scala/cats/Alternative.scala
@@ -3,21 +3,22 @@ package cats
import simulacrum.typeclass
@typeclass trait Alternative[F[_]] extends Applicative[F] with MonoidK[F] { self =>
+
/**
- * Fold over the inner structure to combine all of the values with
- * our combine method inherited from MonoidK. The result is for us
- * to accumulate all of the "interesting" values of the inner G, so
- * if G is Option, we collect all the Some values, if G is Either,
- * we collect all the Right values, etc.
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> val x: List[Vector[Int]] = List(Vector(1, 2), Vector(3, 4))
- * scala> Alternative[List].unite(x)
- * res0: List[Int] = List(1, 2, 3, 4)
- * }}}
- */
+ * Fold over the inner structure to combine all of the values with
+ * our combine method inherited from MonoidK. The result is for us
+ * to accumulate all of the "interesting" values of the inner G, so
+ * if G is Option, we collect all the Some values, if G is Either,
+ * we collect all the Right values, etc.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val x: List[Vector[Int]] = List(Vector(1, 2), Vector(3, 4))
+ * scala> Alternative[List].unite(x)
+ * res0: List[Int] = List(1, 2, 3, 4)
+ * }}}
+ */
def unite[G[_], A](fga: F[G[A]])(implicit FM: Monad[F], G: Foldable[G]): F[A] =
FM.flatMap(fga) { ga =>
G.foldLeft(ga, empty[A])((acc, a) => combineK(acc, pure(a)))
diff --git a/core/src/main/scala/cats/Applicative.scala b/core/src/main/scala/cats/Applicative.scala
index fd9d0c6b0c..72fcbd6078 100644
--- a/core/src/main/scala/cats/Applicative.scala
+++ b/core/src/main/scala/cats/Applicative.scala
@@ -16,8 +16,6 @@ import simulacrum.typeclass
*/
@typeclass trait Applicative[F[_]] extends Apply[F] with InvariantMonoidal[F] { self =>
-
-
/**
* `pure` lifts any value into the Applicative Functor.
*
@@ -211,7 +209,6 @@ object Applicative {
implicit def catsApplicativeForArrow[F[_, _], A](implicit F: Arrow[F]): Applicative[F[A, ?]] =
new ArrowApplicative[F, A](F)
-
/**
* Creates a CoflatMap for an Applicative `F`.
* Cannot be implicit in 1.0 for Binary Compatibility Reasons
@@ -234,7 +231,9 @@ object Applicative {
}
-private[cats] class ApplicativeMonoid[F[_], A](f: Applicative[F], monoid: Monoid[A]) extends ApplySemigroup(f, monoid) with Monoid[F[A]] {
+private[cats] class ApplicativeMonoid[F[_], A](f: Applicative[F], monoid: Monoid[A])
+ extends ApplySemigroup(f, monoid)
+ with Monoid[F[A]] {
def empty: F[A] = f.pure(monoid.empty)
}
diff --git a/core/src/main/scala/cats/ApplicativeError.scala b/core/src/main/scala/cats/ApplicativeError.scala
index 5b0dc72b08..8c8cd7566e 100644
--- a/core/src/main/scala/cats/ApplicativeError.scala
+++ b/core/src/main/scala/cats/ApplicativeError.scala
@@ -1,7 +1,7 @@
package cats
import cats.data.EitherT
-import scala.util.{ Failure, Success, Try }
+import scala.util.{Failure, Success, Try}
import scala.util.control.NonFatal
/**
@@ -53,7 +53,7 @@ trait ApplicativeError[F[_], E] extends Applicative[F] {
*
* @see [[recover]] to only recover from certain errors.
*/
- def handleError[A](fa: F[A])(f: E => A): F[A] = handleErrorWith(fa)(f andThen pure)
+ def handleError[A](fa: F[A])(f: E => A): F[A] = handleErrorWith(fa)(f.andThen(pure))
/**
* Handle errors by turning them into [[scala.util.Either]] values.
@@ -62,9 +62,10 @@ trait ApplicativeError[F[_], E] extends Applicative[F] {
*
* All non-fatal errors should be handled by this method.
*/
- def attempt[A](fa: F[A]): F[Either[E, A]] = handleErrorWith(
- map(fa)(Right(_): Either[E, A])
- )(e => pure(Left(e)))
+ def attempt[A](fa: F[A]): F[Either[E, A]] =
+ handleErrorWith(
+ map(fa)(Right(_): Either[E, A])
+ )(e => pure(Left(e)))
/**
* Similar to [[attempt]], but wraps the result in a [[cats.data.EitherT]] for
@@ -81,8 +82,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.
@@ -93,8 +93,7 @@ trait ApplicativeError[F[_], E] extends Applicative[F] {
* values.
*/
def recoverWith[A](fa: F[A])(pf: PartialFunction[E, F[A]]): F[A] =
- handleErrorWith(fa)(e =>
- pf applyOrElse(e, raiseError))
+ handleErrorWith(fa)(e => pf.applyOrElse(e, raiseError))
/**
* Execute a callback on certain errors, then rethrow them.
@@ -127,8 +126,7 @@ trait ApplicativeError[F[_], E] extends Applicative[F] {
* }}}
*/
def onError[A](fa: F[A])(pf: PartialFunction[E, F[Unit]]): F[A] =
- handleErrorWith(fa)(e =>
- (pf andThen (map2(_, raiseError[A](e))((_, b) => b))) applyOrElse(e, raiseError))
+ handleErrorWith(fa)(e => (pf.andThen(map2(_, raiseError[A](e))((_, b) => b))).applyOrElse(e, raiseError))
/**
* Often E is Throwable. Here we try to call pure or catch
@@ -180,35 +178,33 @@ trait ApplicativeError[F[_], E] extends Applicative[F] {
case Left(e) => raiseError(e)
}
-
}
object ApplicativeError {
def apply[F[_], E](implicit F: ApplicativeError[F, E]): ApplicativeError[F, E] = F
- private[cats] final class LiftFromOptionPartially[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[cats] class LiftFromOptionPartially[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[E, A](oa: Option[A], ifEmpty: => E)(implicit F: ApplicativeError[F, _ >: E]): F[A] =
oa match {
case Some(a) => F.pure(a)
- case None => F.raiseError(ifEmpty)
+ case None => F.raiseError(ifEmpty)
}
}
-
/**
- * lift from scala.Option[A] to a F[A]
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.ApplicativeError
- *
- * scala> ApplicativeError.liftFromOption[Either[String, ?]](Some(1), "Empty")
- * res0: scala.Either[String, Int] = Right(1)
- *
- * scala> ApplicativeError.liftFromOption[Either[String, ?]](Option.empty[Int], "Empty")
- * res1: scala.Either[String, Int] = Left(Empty)
- * }}}
- */
+ * lift from scala.Option[A] to a F[A]
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.ApplicativeError
+ *
+ * scala> ApplicativeError.liftFromOption[Either[String, ?]](Some(1), "Empty")
+ * res0: scala.Either[String, Int] = Right(1)
+ *
+ * scala> ApplicativeError.liftFromOption[Either[String, ?]](Option.empty[Int], "Empty")
+ * res1: scala.Either[String, Int] = Left(Empty)
+ * }}}
+ */
def liftFromOption[F[_]]: LiftFromOptionPartially[F] = new LiftFromOptionPartially[F]
}
diff --git a/core/src/main/scala/cats/Bifoldable.scala b/core/src/main/scala/cats/Bifoldable.scala
index d02cb34fcd..ae49e72d32 100644
--- a/core/src/main/scala/cats/Bifoldable.scala
+++ b/core/src/main/scala/cats/Bifoldable.scala
@@ -6,6 +6,7 @@ import simulacrum.typeclass
* A type class abstracting over types that give rise to two independent [[cats.Foldable]]s.
*/
@typeclass trait Bifoldable[F[_, _]] { self =>
+
/** Collapse the structure with a left-associative function */
def bifoldLeft[A, B, C](fab: F[A, B], c: C)(f: (C, A) => C, g: (C, B) => C): C
@@ -36,7 +37,8 @@ private[cats] trait ComposedBifoldable[F[_, _], G[_, _]] extends Bifoldable[λ[(
(c: C, gab: G[A, B]) => G.bifoldLeft(gab, c)(f, g)
)
- override def bifoldRight[A, B, C](fab: F[G[A, B], G[A, B]], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ override def bifoldRight[A, B, C](fab: F[G[A, B], G[A, B]], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
F.bifoldRight(fab, c)(
(gab: G[A, B], c: Eval[C]) => G.bifoldRight(gab, c)(f, g),
(gab: G[A, B], c: Eval[C]) => G.bifoldRight(gab, c)(f, g)
diff --git a/core/src/main/scala/cats/Bifunctor.scala b/core/src/main/scala/cats/Bifunctor.scala
index d77176c636..2f7c657225 100644
--- a/core/src/main/scala/cats/Bifunctor.scala
+++ b/core/src/main/scala/cats/Bifunctor.scala
@@ -1,5 +1,6 @@
package cats
import simulacrum.typeclass
+
/**
* A type class of types which give rise to two independent, covariant
* functors.
@@ -22,10 +23,10 @@ import simulacrum.typeclass
def bimap[A, B, C, D](fab: F[A, B])(f: A => C, g: B => D): F[C, D]
def rightFunctor[X]: Functor[F[X, ?]] =
- new RightFunctor[F, X] {val F = self}
+ new RightFunctor[F, X] { val F = self }
def leftFunctor[X]: Functor[F[?, X]] =
- new LeftFunctor[F, X] {val F = self}
+ new LeftFunctor[F, X] { val F = self }
// derived methods
/**
@@ -54,8 +55,7 @@ import simulacrum.typeclass
def leftWiden[A, B, AA >: A](fab: F[A, B]): F[AA, B] = fab.asInstanceOf[F[AA, B]]
}
-private[cats] trait ComposedBifunctor[F[_, _], G[_, _]]
- extends Bifunctor[λ[(A, B) => F[G[A, B], G[A, B]]]] {
+private[cats] trait ComposedBifunctor[F[_, _], G[_, _]] extends Bifunctor[λ[(A, B) => F[G[A, B], G[A, B]]]] {
def F: Bifunctor[F]
def G: Bifunctor[G]
@@ -65,14 +65,14 @@ private[cats] trait ComposedBifunctor[F[_, _], G[_, _]]
}
}
-private abstract class LeftFunctor[F[_, _], X] extends Functor[F[?, X]] {
+abstract private class LeftFunctor[F[_, _], X] extends Functor[F[?, X]] {
implicit val F: Bifunctor[F]
override def map[A, C](fax: F[A, X])(f: A => C): F[C, X] =
F.bimap(fax)(f, identity)
}
-private abstract class RightFunctor[F[_, _], X] extends Functor[F[X, ?]] {
+abstract private class RightFunctor[F[_, _], X] extends Functor[F[X, ?]] {
implicit val F: Bifunctor[F]
override def map[A, C](fxa: F[X, A])(f: A => C): F[X, C] =
diff --git a/core/src/main/scala/cats/Bitraverse.scala b/core/src/main/scala/cats/Bitraverse.scala
index 0d75d160f7..dd521cf236 100644
--- a/core/src/main/scala/cats/Bitraverse.scala
+++ b/core/src/main/scala/cats/Bitraverse.scala
@@ -1,7 +1,5 @@
package cats
-
-
import simulacrum.typeclass
/**
@@ -67,14 +65,14 @@ import simulacrum.typeclass
private[cats] trait ComposedBitraverse[F[_, _], G[_, _]]
extends Bitraverse[λ[(α, β) => F[G[α, β], G[α, β]]]]
- with ComposedBifoldable[F, G]
- with ComposedBifunctor[F, G] {
+ with ComposedBifoldable[F, G]
+ with ComposedBifunctor[F, G] {
def F: Bitraverse[F]
def G: Bitraverse[G]
- override def bitraverse[H[_]: Applicative, A, B, C, D](
- fab: F[G[A, B], G[A, B]])(
- f: A => H[C], g: B => H[D]
+ override def bitraverse[H[_]: Applicative, A, B, C, D](fab: F[G[A, B], G[A, B]])(
+ f: A => H[C],
+ g: B => H[D]
): H[F[G[C, D], G[C, D]]] =
F.bitraverse(fab)(
gab => G.bitraverse(gab)(f, g),
diff --git a/core/src/main/scala/cats/CommutativeApplicative.scala b/core/src/main/scala/cats/CommutativeApplicative.scala
index 99ca3fcdfc..c00b743331 100644
--- a/core/src/main/scala/cats/CommutativeApplicative.scala
+++ b/core/src/main/scala/cats/CommutativeApplicative.scala
@@ -3,12 +3,12 @@ package cats
import simulacrum.typeclass
/**
- * Commutative Applicative.
- *
- * Further than an Applicative, which just allows composition of independent effectful functions,
- * in a Commutative Applicative those functions can be composed in any order, which guarantees
- * that their effects do not interfere.
- *
- * Must obey the laws defined in cats.laws.CommutativeApplicativeLaws.
- */
+ * Commutative Applicative.
+ *
+ * Further than an Applicative, which just allows composition of independent effectful functions,
+ * in a Commutative Applicative those functions can be composed in any order, which guarantees
+ * that their effects do not interfere.
+ *
+ * Must obey the laws defined in cats.laws.CommutativeApplicativeLaws.
+ */
@typeclass trait CommutativeApplicative[F[_]] extends Applicative[F] with CommutativeApply[F]
diff --git a/core/src/main/scala/cats/CommutativeApply.scala b/core/src/main/scala/cats/CommutativeApply.scala
index 13a1974211..d0036fbd8c 100644
--- a/core/src/main/scala/cats/CommutativeApply.scala
+++ b/core/src/main/scala/cats/CommutativeApply.scala
@@ -3,12 +3,12 @@ package cats
import simulacrum.typeclass
/**
- * Commutative Apply.
- *
- * Further than an Apply, which just allows composition of independent effectful functions,
- * in a Commutative Apply those functions can be composed in any order, which guarantees
- * that their effects do not interfere.
- *
- * Must obey the laws defined in cats.laws.CommutativeApplyLaws.
- */
+ * Commutative Apply.
+ *
+ * Further than an Apply, which just allows composition of independent effectful functions,
+ * in a Commutative Apply those functions can be composed in any order, which guarantees
+ * that their effects do not interfere.
+ *
+ * Must obey the laws defined in cats.laws.CommutativeApplyLaws.
+ */
@typeclass trait CommutativeApply[F[_]] extends Apply[F]
diff --git a/core/src/main/scala/cats/Comonad.scala b/core/src/main/scala/cats/Comonad.scala
index 2a931db9b2..7bf47d0b7c 100644
--- a/core/src/main/scala/cats/Comonad.scala
+++ b/core/src/main/scala/cats/Comonad.scala
@@ -2,7 +2,6 @@ package cats
import simulacrum.typeclass
-
/**
* Comonad
*
diff --git a/core/src/main/scala/cats/Composed.scala b/core/src/main/scala/cats/Composed.scala
index 8c21b76771..5cf97bbcd5 100644
--- a/core/src/main/scala/cats/Composed.scala
+++ b/core/src/main/scala/cats/Composed.scala
@@ -1,7 +1,7 @@
package cats
-
-private[cats] trait ComposedDistributive[F[_], G[_]] extends Distributive[λ[α => F[G[α]]]] with ComposedFunctor[F, G] { outer =>
+private[cats] trait ComposedDistributive[F[_], G[_]] extends Distributive[λ[α => F[G[α]]]] with ComposedFunctor[F, G] {
+ outer =>
def F: Distributive[F]
def G: Distributive[G]
@@ -36,7 +36,8 @@ private[cats] trait ComposedApply[F[_], G[_]] extends Apply[λ[α => F[G[α]]]]
F.map2(fga, fgb)(G.product)
}
-private[cats] trait ComposedApplicative[F[_], G[_]] extends Applicative[λ[α => F[G[α]]]] with ComposedApply[F, G] { outer =>
+private[cats] trait ComposedApplicative[F[_], G[_]] extends Applicative[λ[α => F[G[α]]]] with ComposedApply[F, G] {
+ outer =>
def F: Applicative[F]
def G: Applicative[G]
@@ -55,7 +56,10 @@ private[cats] trait ComposedMonoidK[F[_], G[_]] extends MonoidK[λ[α => F[G[α]
override def empty[A]: F[G[A]] = F.empty
}
-private[cats] trait ComposedAlternative[F[_], G[_]] extends Alternative[λ[α => F[G[α]]]] with ComposedApplicative[F, G] with ComposedMonoidK[F, G] { outer =>
+private[cats] trait ComposedAlternative[F[_], G[_]]
+ extends Alternative[λ[α => F[G[α]]]]
+ with ComposedApplicative[F, G]
+ with ComposedMonoidK[F, G] { outer =>
def F: Alternative[F]
}
@@ -70,7 +74,10 @@ private[cats] trait ComposedFoldable[F[_], G[_]] extends Foldable[λ[α => F[G[
F.foldRight(fga, lb)((ga, lb) => G.foldRight(ga, lb)(f))
}
-private[cats] trait ComposedTraverse[F[_], G[_]] extends Traverse[λ[α => F[G[α]]]] with ComposedFoldable[F, G] with ComposedFunctor[F, G] {
+private[cats] trait ComposedTraverse[F[_], G[_]]
+ extends Traverse[λ[α => F[G[α]]]]
+ with ComposedFoldable[F, G]
+ with ComposedFunctor[F, G] {
def F: Traverse[F]
def G: Traverse[G]
@@ -78,7 +85,10 @@ private[cats] trait ComposedTraverse[F[_], G[_]] extends Traverse[λ[α => F[G[
F.traverse(fga)(ga => G.traverse(ga)(f))
}
-private[cats] trait ComposedNonEmptyTraverse[F[_], G[_]] extends NonEmptyTraverse[λ[α => F[G[α]]]] with ComposedTraverse[F, G] with ComposedReducible[F, G] {
+private[cats] trait ComposedNonEmptyTraverse[F[_], G[_]]
+ extends NonEmptyTraverse[λ[α => F[G[α]]]]
+ with ComposedTraverse[F, G]
+ with ComposedReducible[F, G] {
def F: NonEmptyTraverse[F]
def G: NonEmptyTraverse[G]
@@ -121,7 +131,8 @@ private[cats] trait ComposedContravariantCovariant[F[_], G[_]] extends Contravar
F.contramap(fga)(gb => G.map(gb)(f))
}
-private[cats] trait ComposedApplicativeContravariantMonoidal[F[_], G[_]] extends ContravariantMonoidal[λ[α => F[G[α]]]] { outer =>
+private[cats] trait ComposedApplicativeContravariantMonoidal[F[_], G[_]]
+ extends ContravariantMonoidal[λ[α => F[G[α]]]] { outer =>
def F: Applicative[F]
def G: ContravariantMonoidal[G]
@@ -134,7 +145,9 @@ private[cats] trait ComposedApplicativeContravariantMonoidal[F[_], G[_]] extends
F.map2(fa, fb)(G.product(_, _))
}
-private[cats] trait ComposedSemigroupal[F[_], G[_]] extends ContravariantSemigroupal[λ[α => F[G[α]]]] with ComposedContravariantCovariant[F, G] { outer =>
+private[cats] trait ComposedSemigroupal[F[_], G[_]]
+ extends ContravariantSemigroupal[λ[α => F[G[α]]]]
+ with ComposedContravariantCovariant[F, G] { outer =>
def F: ContravariantSemigroupal[F]
def G: Functor[G]
@@ -144,13 +157,16 @@ private[cats] trait ComposedSemigroupal[F[_], G[_]] extends ContravariantSemigro
}
}
-private[cats] trait ComposedInvariantApplySemigroupal[F[_], G[_]] extends InvariantSemigroupal[λ[α => F[G[α]]]] with ComposedInvariantCovariant[F, G] { outer =>
+private[cats] trait ComposedInvariantApplySemigroupal[F[_], G[_]]
+ extends InvariantSemigroupal[λ[α => F[G[α]]]]
+ with ComposedInvariantCovariant[F, G] { outer =>
def F: InvariantSemigroupal[F]
def G: Apply[G]
def product[A, B](fa: F[G[A]], fb: F[G[B]]): F[G[(A, B)]] =
- F.imap(F.product(fa, fb)) { case (ga, gb) =>
- G.map2(ga, gb)(_ -> _)
+ F.imap(F.product(fa, fb)) {
+ case (ga, gb) =>
+ G.map2(ga, gb)(_ -> _)
} { g: G[(A, B)] =>
(G.map(g)(_._1), G.map(g)(_._2))
}
diff --git a/core/src/main/scala/cats/Contravariant.scala b/core/src/main/scala/cats/Contravariant.scala
index 1b08fb61f2..3924822748 100644
--- a/core/src/main/scala/cats/Contravariant.scala
+++ b/core/src/main/scala/cats/Contravariant.scala
@@ -1,5 +1,6 @@
package cats
import simulacrum.typeclass
+
/**
* Must obey the laws defined in cats.laws.ContravariantLaws.
*/
diff --git a/core/src/main/scala/cats/ContravariantMonoidal.scala b/core/src/main/scala/cats/ContravariantMonoidal.scala
index 276a7ce31e..069357f32b 100644
--- a/core/src/main/scala/cats/ContravariantMonoidal.scala
+++ b/core/src/main/scala/cats/ContravariantMonoidal.scala
@@ -12,6 +12,7 @@ import simulacrum.typeclass
* https://hackage.haskell.org/package/contravariant-1.4/docs/Data-Functor-Contravariant-Divisible.html
*/
@typeclass trait ContravariantMonoidal[F[_]] extends ContravariantSemigroupal[F] with InvariantMonoidal[F] {
+
/**
* `trivial` produces an instance of `F` for any type `A`
* that is trivial with respect to `contramap2` along
@@ -25,6 +26,8 @@ object ContravariantMonoidal extends SemigroupalArityFunctions {
new ContravariantMonoidalMonoid[F, A](f)
}
-private[cats] class ContravariantMonoidalMonoid[F[_], A](f: ContravariantMonoidal[F]) extends ContravariantSemigroupalSemigroup[F, A](f) with Monoid[F[A]] {
+private[cats] class ContravariantMonoidalMonoid[F[_], A](f: ContravariantMonoidal[F])
+ extends ContravariantSemigroupalSemigroup[F, A](f)
+ with Monoid[F[A]] {
def empty: F[A] = f.trivial
}
diff --git a/core/src/main/scala/cats/Eval.scala b/core/src/main/scala/cats/Eval.scala
index ca4898ae55..bed77150de 100644
--- a/core/src/main/scala/cats/Eval.scala
+++ b/core/src/main/scala/cats/Eval.scala
@@ -84,7 +84,7 @@ sealed abstract class Eval[+A] extends Serializable { self =>
type Start = A
val start = () => c.run(s)
val run = f
- }
+ }
}
case c: Eval.Defer[A] =>
new Eval.FlatMap[B] {
@@ -122,7 +122,6 @@ final case class Now[A](value: A) extends Eval[A] {
def memoize: Eval[A] = this
}
-
/**
* Construct a lazy Eval[A] instance.
*
@@ -321,7 +320,6 @@ object Eval extends EvalInstances {
}
}
-
private def evaluate[A](e: Eval[A]): A = {
type L = Eval[Any]
type M = Memoize[Any]
@@ -337,10 +335,8 @@ object Eval extends EvalInstances {
case c: FlatMap[_] =>
c.start() match {
case cc: FlatMap[_] =>
- loop(
- cc.start().asInstanceOf[L],
- cc.run.asInstanceOf[C] :: c.run.asInstanceOf[C] :: fs)
- case mm@Memoize(eval) =>
+ loop(cc.start().asInstanceOf[L], cc.run.asInstanceOf[C] :: c.run.asInstanceOf[C] :: fs)
+ case mm @ Memoize(eval) =>
mm.result match {
case Some(a) =>
loop(Now(a), c.run.asInstanceOf[C] :: fs)
@@ -352,12 +348,12 @@ object Eval extends EvalInstances {
}
case call: Defer[_] =>
loop(advance(call), fs)
- case m@Memoize(eval) =>
+ case m @ Memoize(eval) =>
m.result match {
case Some(a) =>
fs match {
case f :: fs => loop(f(a), fs)
- case Nil => a
+ case Nil => a
}
case None =>
loop(eval, addToMemo(m) :: fs)
@@ -365,7 +361,7 @@ object Eval extends EvalInstances {
case x =>
fs match {
case f :: fs => loop(f(x.value), fs)
- case Nil => x.value
+ case Nil => x.value
}
}
@@ -373,7 +369,7 @@ object Eval extends EvalInstances {
}
}
-private[cats] sealed abstract class EvalInstances extends EvalInstances0 {
+sealed abstract private[cats] class EvalInstances extends EvalInstances0 {
implicit val catsBimonadForEval: Bimonad[Eval] with CommutativeMonad[Eval] =
new Bimonad[Eval] with StackSafeMonad[Eval] with CommutativeMonad[Eval] {
@@ -410,14 +406,16 @@ private[cats] sealed abstract class EvalInstances extends EvalInstances0 {
override def reduceRightOption[A](fa: Eval[A])(f: (A, Eval[A]) => Eval[A]): Eval[Option[A]] =
fa.map(Some(_))
override def reduceRightToOption[A, B](fa: Eval[A])(f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[Option[B]] =
- fa.map { a => Some(f(a)) }
+ fa.map { a =>
+ Some(f(a))
+ }
override def size[A](f: Eval[A]): Long = 1L
}
implicit def catsOrderForEval[A: Order]: Order[Eval[A]] =
new Order[Eval[A]] {
def compare(lx: Eval[A], ly: Eval[A]): Int =
- lx.value compare ly.value
+ lx.value.compare(ly.value)
}
implicit def catsGroupForEval[A: Group]: Group[Eval[A]] =
@@ -440,18 +438,18 @@ private[cats] sealed abstract class EvalInstances extends EvalInstances0 {
}
}
-private[cats] sealed abstract class EvalInstances0 extends EvalInstances1 {
+sealed abstract private[cats] class EvalInstances0 extends EvalInstances1 {
implicit def catsPartialOrderForEval[A: PartialOrder]: PartialOrder[Eval[A]] =
new PartialOrder[Eval[A]] {
def partialCompare(lx: Eval[A], ly: Eval[A]): Double =
- lx.value partialCompare ly.value
+ lx.value.partialCompare(ly.value)
}
implicit def catsMonoidForEval[A: Monoid]: Monoid[Eval[A]] =
new EvalMonoid[A] { val algebra = Monoid[A] }
}
-private[cats] sealed abstract class EvalInstances1 {
+sealed abstract private[cats] class EvalInstances1 {
implicit def catsEqForEval[A: Eq]: Eq[Eval[A]] =
new Eq[Eval[A]] {
def eqv(lx: Eval[A], ly: Eval[A]): Boolean =
diff --git a/core/src/main/scala/cats/FlatMap.scala b/core/src/main/scala/cats/FlatMap.scala
index c7c3cb5024..3eed2777f2 100644
--- a/core/src/main/scala/cats/FlatMap.scala
+++ b/core/src/main/scala/cats/FlatMap.scala
@@ -40,8 +40,6 @@ import simulacrum.noop
def flatten[A](ffa: F[F[A]]): F[A] =
flatMap(ffa)(fa => fa)
-
-
/**
* Sequentially compose two actions, discarding any value produced by the first. This variant of
* [[productR]] also lets you define the evaluation strategy of the second action. For instance
@@ -61,8 +59,6 @@ import simulacrum.noop
@deprecated("Use productREval instead.", "1.0.0-RC2")
@noop def followedByEval[A, B](fa: F[A])(fb: Eval[F[B]]): F[B] = productREval(fa)(fb)
-
-
/**
* Sequentially compose two actions, discarding any value produced by the second. This variant of
* [[productL]] also lets you define the evaluation strategy of the second action. For instance
@@ -123,22 +119,22 @@ import simulacrum.noop
def tailRecM[A, B](a: A)(f: A => F[Either[A, B]]): F[B]
/**
- * Apply a monadic function and discard the result while keeping the effect.
- *
- * {{{
- * scala> import cats._, implicits._
- * scala> Option(1).flatTap(_ => None)
- * res0: Option[Int] = None
- * scala> Option(1).flatTap(_ => Some("123"))
- * res1: Option[Int] = Some(1)
- * scala> def nCats(n: Int) = List.fill(n)("cat")
- * nCats: (n: Int)List[String]
- * scala> List[Int](0).flatTap(nCats)
- * res2: List[Int] = List()
- * scala> List[Int](4).flatTap(nCats)
- * res3: List[Int] = List(4, 4, 4, 4)
- * }}}
- */
+ * Apply a monadic function and discard the result while keeping the effect.
+ *
+ * {{{
+ * scala> import cats._, implicits._
+ * scala> Option(1).flatTap(_ => None)
+ * res0: Option[Int] = None
+ * scala> Option(1).flatTap(_ => Some("123"))
+ * res1: Option[Int] = Some(1)
+ * scala> def nCats(n: Int) = List.fill(n)("cat")
+ * nCats: (n: Int)List[String]
+ * scala> List[Int](0).flatTap(nCats)
+ * res2: List[Int] = List()
+ * scala> List[Int](4).flatTap(nCats)
+ * res3: List[Int] = List(4, 4, 4, 4)
+ * }}}
+ */
def flatTap[A, B](fa: F[A])(f: A => F[B]): F[A] =
flatMap(fa)(a => as(f(a), a))
}
diff --git a/core/src/main/scala/cats/Foldable.scala b/core/src/main/scala/cats/Foldable.scala
index cd0047debf..f425611302 100644
--- a/core/src/main/scala/cats/Foldable.scala
+++ b/core/src/main/scala/cats/Foldable.scala
@@ -56,7 +56,6 @@ import Foldable.sentinel
*/
def foldLeft[A, B](fa: F[A], b: B)(f: (B, A) => B): B
-
/**
* Right associative lazy fold on `F` using the folding function 'f'.
*
@@ -99,14 +98,14 @@ import Foldable.sentinel
def reduceLeftToOption[A, B](fa: F[A])(f: A => B)(g: (B, A) => B): Option[B] =
foldLeft(fa, Option.empty[B]) {
case (Some(b), a) => Some(g(b, a))
- case (None, a) => Some(f(a))
+ case (None, a) => Some(f(a))
}
def reduceRightToOption[A, B](fa: F[A])(f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[Option[B]] =
foldRight(fa, Now(Option.empty[B])) { (a, lb) =>
lb.flatMap {
case Some(b) => g(a, Now(b)).map(Some(_))
- case None => Later(Some(f(a)))
+ case None => Later(Some(f(a)))
}
}
@@ -195,15 +194,15 @@ import Foldable.sentinel
reduceLeftOption(fa)(A.max)
/**
- * Get the element at the index of the `Foldable`.
- */
+ * Get the element at the index of the `Foldable`.
+ */
def get[A](fa: F[A])(idx: Long): Option[A] =
if (idx < 0L) None
else
foldM[Either[A, ?], A, Long](fa, 0L) { (i, a) =>
if (i == idx) Left(a) else Right(i + 1L)
} match {
- case Left(a) => Some(a)
+ case Left(a) => Some(a)
case Right(_) => None
}
@@ -215,7 +214,6 @@ import Foldable.sentinel
else lb
}.value
-
/**
* Like `collectFirst` from `scala.collection.Traversable` but takes `A => Option[B]`
* instead of `PartialFunction`s.
@@ -271,10 +269,13 @@ import Foldable.sentinel
*/
def foldM[G[_], A, B](fa: F[A], z: B)(f: (B, A) => G[B])(implicit G: Monad[G]): G[B] = {
val src = Foldable.Source.fromFoldable(fa)(self)
- G.tailRecM((z, src)) { case (b, src) => src.uncons match {
- case Some((a, src)) => G.map(f(b, a))(b => Left((b, src.value)))
- case None => G.pure(Right(b))
- }}
+ G.tailRecM((z, src)) {
+ case (b, src) =>
+ src.uncons match {
+ case Some((a, src)) => G.map(f(b, a))(b => Left((b, src.value)))
+ case None => G.pure(Right(b))
+ }
+ }
}
/**
@@ -328,7 +329,9 @@ import Foldable.sentinel
*/
def traverse_[G[_], A, B](fa: F[A])(f: A => G[B])(implicit G: Applicative[G]): G[Unit] =
foldRight(fa, Always(G.pure(()))) { (a, acc) =>
- G.map2Eval(f(a), acc) { (_, _) => () }
+ G.map2Eval(f(a), acc) { (_, _) =>
+ ()
+ }
}.value
/**
@@ -398,76 +401,74 @@ import Foldable.sentinel
}.value
/**
- * Check whether at least one element satisfies the effectful predicate.
- *
- * If there are no elements, the result is `false`. `existsM` short-circuits,
- * i.e. once a `true` result is encountered, no further effects are produced.
- *
- * For example:
- *
- * {{{
- * scala> import cats.implicits._
- * scala> val F = Foldable[List]
- * scala> F.existsM(List(1,2,3,4))(n => Option(n <= 4))
- * res0: Option[Boolean] = Some(true)
- *
- * scala> F.existsM(List(1,2,3,4))(n => Option(n > 4))
- * res1: Option[Boolean] = Some(false)
- *
- * scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) Option(true) else Option(false))
- * res2: Option[Boolean] = Some(true)
- *
- * scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) Option(true) else None)
- * res3: Option[Boolean] = Some(true)
- *
- * scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) None else Option(true))
- * res4: Option[Boolean] = None
- * }}}
- */
- def existsM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Boolean] = {
- G.tailRecM(Foldable.Source.fromFoldable(fa)(self)) {
- src => src.uncons match {
+ * Check whether at least one element satisfies the effectful predicate.
+ *
+ * If there are no elements, the result is `false`. `existsM` short-circuits,
+ * i.e. once a `true` result is encountered, no further effects are produced.
+ *
+ * For example:
+ *
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val F = Foldable[List]
+ * scala> F.existsM(List(1,2,3,4))(n => Option(n <= 4))
+ * res0: Option[Boolean] = Some(true)
+ *
+ * scala> F.existsM(List(1,2,3,4))(n => Option(n > 4))
+ * res1: Option[Boolean] = Some(false)
+ *
+ * scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) Option(true) else Option(false))
+ * res2: Option[Boolean] = Some(true)
+ *
+ * scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) Option(true) else None)
+ * res3: Option[Boolean] = Some(true)
+ *
+ * scala> F.existsM(List(1,2,3,4))(n => if (n <= 2) None else Option(true))
+ * res4: Option[Boolean] = None
+ * }}}
+ */
+ def existsM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Boolean] =
+ G.tailRecM(Foldable.Source.fromFoldable(fa)(self)) { src =>
+ src.uncons match {
case Some((a, src)) => G.map(p(a))(bb => if (bb) Right(true) else Left(src.value))
- case None => G.pure(Right(false))
+ case None => G.pure(Right(false))
}
}
- }
/**
- * Check whether all elements satisfy the effectful predicate.
- *
- * If there are no elements, the result is `true`. `forallM` short-circuits,
- * i.e. once a `false` result is encountered, no further effects are produced.
- *
- * For example:
- *
- * {{{
- * scala> import cats.implicits._
- * scala> val F = Foldable[List]
- * scala> F.forallM(List(1,2,3,4))(n => Option(n <= 4))
- * res0: Option[Boolean] = Some(true)
- *
- * scala> F.forallM(List(1,2,3,4))(n => Option(n <= 1))
- * res1: Option[Boolean] = Some(false)
- *
- * scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) Option(true) else Option(false))
- * res2: Option[Boolean] = Some(false)
- *
- * scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) Option(false) else None)
- * res3: Option[Boolean] = Some(false)
- *
- * scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) None else Option(false))
- * res4: Option[Boolean] = None
- * }}}
- */
- def forallM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Boolean] = {
- G.tailRecM(Foldable.Source.fromFoldable(fa)(self)) {
- src => src.uncons match {
+ * Check whether all elements satisfy the effectful predicate.
+ *
+ * If there are no elements, the result is `true`. `forallM` short-circuits,
+ * i.e. once a `false` result is encountered, no further effects are produced.
+ *
+ * For example:
+ *
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val F = Foldable[List]
+ * scala> F.forallM(List(1,2,3,4))(n => Option(n <= 4))
+ * res0: Option[Boolean] = Some(true)
+ *
+ * scala> F.forallM(List(1,2,3,4))(n => Option(n <= 1))
+ * res1: Option[Boolean] = Some(false)
+ *
+ * scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) Option(true) else Option(false))
+ * res2: Option[Boolean] = Some(false)
+ *
+ * scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) Option(false) else None)
+ * res3: Option[Boolean] = Some(false)
+ *
+ * scala> F.forallM(List(1,2,3,4))(n => if (n <= 2) None else Option(false))
+ * res4: Option[Boolean] = None
+ * }}}
+ */
+ def forallM[G[_], A](fa: F[A])(p: A => G[Boolean])(implicit G: Monad[G]): G[Boolean] =
+ G.tailRecM(Foldable.Source.fromFoldable(fa)(self)) { src =>
+ src.uncons match {
case Some((a, src)) => G.map(p(a))(bb => if (!bb) Right(false) else Left(src.value))
- case None => G.pure(Right(true))
+ case None => G.pure(Right(true))
}
}
- }
/**
* Convert F[A] to a List[A].
@@ -478,28 +479,31 @@ import Foldable.sentinel
}.toList
/**
- * Separate this Foldable into a Tuple by a separating function `A => Either[B, C]`
- * Equivalent to `Functor#map` and then `Alternative#separate`.
- *
- * {{{
- * scala> import cats.implicits._
- * scala> val list = List(1,2,3,4)
- * scala> Foldable[List].partitionEither(list)(a => if (a % 2 == 0) Left(a.toString) else Right(a))
- * res0: (List[String], List[Int]) = (List(2, 4),List(1, 3))
- * scala> Foldable[List].partitionEither(list)(a => Right(a * 4))
- * res1: (List[Nothing], List[Int]) = (List(),List(4, 8, 12, 16))
- * }}}
- */
+ * Separate this Foldable into a Tuple by a separating function `A => Either[B, C]`
+ * Equivalent to `Functor#map` and then `Alternative#separate`.
+ *
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val list = List(1,2,3,4)
+ * scala> Foldable[List].partitionEither(list)(a => if (a % 2 == 0) Left(a.toString) else Right(a))
+ * res0: (List[String], List[Int]) = (List(2, 4),List(1, 3))
+ * scala> Foldable[List].partitionEither(list)(a => Right(a * 4))
+ * res1: (List[Nothing], List[Int]) = (List(),List(4, 8, 12, 16))
+ * }}}
+ */
def partitionEither[A, B, C](fa: F[A])(f: A => Either[B, C])(implicit A: Alternative[F]): (F[B], F[C]) = {
import cats.instances.tuple._
implicit val mb: Monoid[F[B]] = A.algebra[B]
implicit val mc: Monoid[F[C]] = A.algebra[C]
- foldMap(fa)(a => f(a) match {
- case Right(c) => (A.empty[B], A.pure(c))
- case Left(b) => (A.pure(b), A.empty[C])
- })
+ foldMap(fa)(
+ a =>
+ f(a) match {
+ case Right(c) => (A.empty[B], A.pure(c))
+ case Left(b) => (A.pure(b), A.empty[C])
+ }
+ )
}
/**
@@ -560,7 +564,7 @@ import Foldable.sentinel
val it = xs.iterator
if (it.hasNext) {
bld += it.next
- while(it.hasNext) {
+ while (it.hasNext) {
bld += x
bld += it.next
}
@@ -581,7 +585,7 @@ import Foldable.sentinel
}
object Foldable {
- private val sentinel: Function1[Any, Any] = new scala.runtime.AbstractFunction1[Any, Any]{ def apply(a: Any) = this }
+ private val sentinel: Function1[Any, Any] = new scala.runtime.AbstractFunction1[Any, Any] { def apply(a: Any) = this }
def iterateRight[A, B](iterable: Iterable[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] = {
def loop(it: Iterator[A]): Eval[B] =
@@ -590,7 +594,6 @@ object Foldable {
Eval.always(iterable.iterator).flatMap(loop)
}
-
/**
* Isomorphic to
*
@@ -601,7 +604,7 @@ object Foldable {
* It could be made a value class after
* https://github.com/scala/bug/issues/9600 is resolved.
*/
- private[cats] sealed abstract class Source[+A] {
+ sealed abstract private[cats] class Source[+A] {
def uncons: Option[(A, Eval[Source[A]])]
}
@@ -615,8 +618,6 @@ object Foldable {
}
def fromFoldable[F[_], A](fa: F[A])(implicit F: Foldable[F]): Source[A] =
- F.foldRight[A, Source[A]](fa, Now(Empty))((a, evalSrc) =>
- Later(cons(a, evalSrc))
- ).value
+ F.foldRight[A, Source[A]](fa, Now(Empty))((a, evalSrc) => Later(cons(a, evalSrc))).value
}
}
diff --git a/core/src/main/scala/cats/Inject.scala b/core/src/main/scala/cats/Inject.scala
index 04c075eb46..0bce716249 100644
--- a/core/src/main/scala/cats/Inject.scala
+++ b/core/src/main/scala/cats/Inject.scala
@@ -1,20 +1,20 @@
package cats
/**
- * Inject is a type class providing an injection from type `A` into
- * type `B`. An injection is a function `inj` which does not destroy
- * any information: for every `b: B` there is at most one `a: A` such
- * that `inj(a) = b`.
- *
- * Because of this all injections admit partial inverses `prj` which
- * pair a value `b: B` back with a single value `a: A`.
- *
- * @since 1.0
- * @note Prior to cats 1.0, Inject handled injection for type
- * constructors. For injection of type constructors, use [[InjectK]].
- *
- * @see [[InjectK]] for injection for [[cats.data.EitherK]]
- */
+ * Inject is a type class providing an injection from type `A` into
+ * type `B`. An injection is a function `inj` which does not destroy
+ * any information: for every `b: B` there is at most one `a: A` such
+ * that `inj(a) = b`.
+ *
+ * Because of this all injections admit partial inverses `prj` which
+ * pair a value `b: B` back with a single value `a: A`.
+ *
+ * @since 1.0
+ * @note Prior to cats 1.0, Inject handled injection for type
+ * constructors. For injection of type constructors, use [[InjectK]].
+ *
+ * @see [[InjectK]] for injection for [[cats.data.EitherK]]
+ */
abstract class Inject[A, B] {
def inj: A => B
@@ -25,7 +25,7 @@ abstract class Inject[A, B] {
final def unapply(b: B): Option[A] = prj(b)
}
-private[cats] sealed abstract class InjectInstances {
+sealed abstract private[cats] class InjectInstances {
implicit def catsReflexiveInjectInstance[A]: Inject[A, A] =
new Inject[A, A] {
val inj = identity(_: A)
diff --git a/core/src/main/scala/cats/InjectK.scala b/core/src/main/scala/cats/InjectK.scala
index f2b8d80559..a5e22ade58 100644
--- a/core/src/main/scala/cats/InjectK.scala
+++ b/core/src/main/scala/cats/InjectK.scala
@@ -4,24 +4,24 @@ import cats.arrow.FunctionK
import cats.data.EitherK
/**
- * InjectK is a type class providing an injection from type
- * constructor `F` into type constructor `G`. An injection is a
- * functor transformation `inj` which does not destroy any
- * information: for every `ga: G[A]` there is at most one `fa: F[A]`
- * such that `inj(fa) = ga`.
- *
- * Because of this all injections admit partial inverses `prj` which
- * pair a value `ga: G[A]` back with a single value `fa: F[A]`.
- *
- * The behavior of the default instances for the InjectK type class
- * are described thoroughly in "Data types a la carte" (Swierstra
- * 2008).
- *
- * @note Prior to cats 1.0, InjectK was known as [[Inject]].
- *
- * @see [[http://www.staff.science.uu.nl/~swier004/publications/2008-jfp.pdf]]
- * @see [[Inject]] for injection for `Either`
- */
+ * InjectK is a type class providing an injection from type
+ * constructor `F` into type constructor `G`. An injection is a
+ * functor transformation `inj` which does not destroy any
+ * information: for every `ga: G[A]` there is at most one `fa: F[A]`
+ * such that `inj(fa) = ga`.
+ *
+ * Because of this all injections admit partial inverses `prj` which
+ * pair a value `ga: G[A]` back with a single value `fa: F[A]`.
+ *
+ * The behavior of the default instances for the InjectK type class
+ * are described thoroughly in "Data types a la carte" (Swierstra
+ * 2008).
+ *
+ * @note Prior to cats 1.0, InjectK was known as [[Inject]].
+ *
+ * @see [[http://www.staff.science.uu.nl/~swier004/publications/2008-jfp.pdf]]
+ * @see [[Inject]] for injection for `Either`
+ */
abstract class InjectK[F[_], G[_]] {
def inj: FunctionK[F, G]
@@ -32,7 +32,7 @@ abstract class InjectK[F[_], G[_]] {
final def unapply[A](ga: G[A]): Option[F[A]] = prj(ga)
}
-private[cats] sealed abstract class InjectKInstances {
+sealed abstract private[cats] class InjectKInstances {
implicit def catsReflexiveInjectKInstance[F[_]]: InjectK[F, F] =
new InjectK[F, F] {
val inj = FunctionK.id[F]
@@ -49,7 +49,7 @@ private[cats] sealed abstract class InjectKInstances {
implicit def catsRightInjectKInstance[F[_], G[_], H[_]](implicit I: InjectK[F, G]): InjectK[F, EitherK[H, G, ?]] =
new InjectK[F, EitherK[H, G, ?]] {
- val inj = λ[FunctionK[G, EitherK[H, G, ?]]](EitherK.rightc(_)) compose I.inj
+ val inj = λ[FunctionK[G, EitherK[H, G, ?]]](EitherK.rightc(_)).compose(I.inj)
val prj = λ[FunctionK[EitherK[H, G, ?], λ[α => Option[F[α]]]]](_.run.right.toOption.flatMap(I.prj(_)))
}
diff --git a/core/src/main/scala/cats/Invariant.scala b/core/src/main/scala/cats/Invariant.scala
index ccaf7af388..1960f1f240 100644
--- a/core/src/main/scala/cats/Invariant.scala
+++ b/core/src/main/scala/cats/Invariant.scala
@@ -2,6 +2,7 @@ package cats
import cats.kernel._
import simulacrum.typeclass
+
/**
* Must obey the laws defined in cats.laws.InvariantLaws.
*/
@@ -73,8 +74,6 @@ object Invariant {
}
-
-
implicit val catsInvariantCommutativeMonoid: Invariant[CommutativeMonoid] = new Invariant[CommutativeMonoid] {
def imap[A, B](fa: CommutativeMonoid[A])(f: A => B)(g: B => A): CommutativeMonoid[B] = new CommutativeMonoid[B] {
@@ -97,7 +96,6 @@ object Invariant {
}
-
implicit val catsInvariantGroup: Invariant[Group] = new Invariant[Group] {
def imap[A, B](fa: Group[A])(f: A => B)(g: B => A): Group[B] = new Group[B] {
diff --git a/core/src/main/scala/cats/InvariantMonoidal.scala b/core/src/main/scala/cats/InvariantMonoidal.scala
index d5eeb5498c..7195ad4c8b 100644
--- a/core/src/main/scala/cats/InvariantMonoidal.scala
+++ b/core/src/main/scala/cats/InvariantMonoidal.scala
@@ -8,33 +8,35 @@ import simulacrum.typeclass
* Must obey the laws defined in cats.laws.InvariantMonoidalLaws.
*/
@typeclass trait InvariantMonoidal[F[_]] extends InvariantSemigroupal[F] {
+
/**
- * `point` lifts any value into a Monoidal Functor.
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- *
- * scala> InvariantMonoidal[Option].point(10)
- * res0: Option[Int] = Some(10)
- * }}}
- */
+ * `point` lifts any value into a Monoidal Functor.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ *
+ * scala> InvariantMonoidal[Option].point(10)
+ * res0: Option[Int] = Some(10)
+ * }}}
+ */
def point[A](a: A): F[A] = imap(unit)(_ => a)(_ => ())
def unit: F[Unit]
-
}
object InvariantMonoidal {
+
/**
- * Gives a `Monoid` instance if A itself has a `Monoid` instance.
- */
+ * Gives a `Monoid` instance if A itself has a `Monoid` instance.
+ */
def monoid[F[_], A](implicit F: InvariantMonoidal[F], A: Monoid[A]): Monoid[F[A]] =
new InvariantMonoidalMonoid[F, A](F, A)
}
-
-private[cats] class InvariantMonoidalMonoid[F[_], A](f: InvariantMonoidal[F], monoid: Monoid[A]) extends InvariantSemigroupalSemigroup(f, monoid) with Monoid[F[A]] {
+private[cats] class InvariantMonoidalMonoid[F[_], A](f: InvariantMonoidal[F], monoid: Monoid[A])
+ extends InvariantSemigroupalSemigroup(f, monoid)
+ with Monoid[F[A]] {
def empty: F[A] = f.point(monoid.empty)
}
diff --git a/core/src/main/scala/cats/InvariantSemigroupal.scala b/core/src/main/scala/cats/InvariantSemigroupal.scala
index a323f933a7..bb2b28b8c6 100644
--- a/core/src/main/scala/cats/InvariantSemigroupal.scala
+++ b/core/src/main/scala/cats/InvariantSemigroupal.scala
@@ -3,28 +3,30 @@ package cats
import simulacrum.typeclass
/**
- * [[InvariantSemigroupal]] is nothing more than something both invariant
- * and Semigroupal. It comes up enough to be useful, and composes well
- */
+ * [[InvariantSemigroupal]] is nothing more than something both invariant
+ * and Semigroupal. It comes up enough to be useful, and composes well
+ */
@typeclass trait InvariantSemigroupal[F[_]] extends Semigroupal[F] with Invariant[F] { self =>
- def composeApply[G[_]: Apply]: InvariantSemigroupal[λ[α => F[G[α]]]] =
- new ComposedInvariantApplySemigroupal[F, G] {
- def F = self
- def G = Apply[G]
- }
+ def composeApply[G[_]: Apply]: InvariantSemigroupal[λ[α => F[G[α]]]] =
+ new ComposedInvariantApplySemigroupal[F, G] {
+ def F = self
+ def G = Apply[G]
+ }
}
object InvariantSemigroupal extends SemigroupalArityFunctions {
+
/**
- * Gives a `Semigroup` instance if A itself has a `Semigroup` instance.
- */
+ * Gives a `Semigroup` instance if A itself has a `Semigroup` instance.
+ */
def semigroup[F[_], A](implicit F: InvariantSemigroupal[F], A: Semigroup[A]): Semigroup[F[A]] =
new InvariantSemigroupalSemigroup[F, A](F, A)
}
-private[cats] class InvariantSemigroupalSemigroup[F[_], A](f: InvariantSemigroupal[F], sg: Semigroup[A]) extends Semigroup[F[A]] {
+private[cats] class InvariantSemigroupalSemigroup[F[_], A](f: InvariantSemigroupal[F], sg: Semigroup[A])
+ extends Semigroup[F[A]] {
def combine(a: F[A], b: F[A]): F[A] =
InvariantSemigroupal.imap2(a, b)(sg.combine)(a => (a, a))(f, f)
}
diff --git a/core/src/main/scala/cats/Monad.scala b/core/src/main/scala/cats/Monad.scala
index fa4d05079c..e04ddba097 100644
--- a/core/src/main/scala/cats/Monad.scala
+++ b/core/src/main/scala/cats/Monad.scala
@@ -21,17 +21,20 @@ import simulacrum.typeclass
* Collects the results into an arbitrary `Alternative` value, such as a `Vector`.
* This implementation uses append on each evaluation result,
* so avoid data structures with non-constant append performance, e.g. `List`.
- */
+ */
def whileM[G[_], A](p: F[Boolean])(body: => F[A])(implicit G: Alternative[G]): F[G[A]] = {
val b = Eval.later(body)
- tailRecM[G[A], G[A]](G.empty)(xs => ifM(p)(
- ifTrue = {
- map(b.value) { bv =>
- Left(G.combineK(xs, G.pure(bv)))
- }
- },
- ifFalse = pure(Right(xs))
- ))
+ tailRecM[G[A], G[A]](G.empty)(
+ xs =>
+ ifM(p)(
+ ifTrue = {
+ map(b.value) { bv =>
+ Left(G.combineK(xs, G.pure(bv)))
+ }
+ },
+ ifFalse = pure(Right(xs))
+ )
+ )
}
/**
@@ -43,12 +46,15 @@ import simulacrum.typeclass
val continue: Either[Unit, Unit] = Left(())
val stop: F[Either[Unit, Unit]] = pure(Right(()))
val b = Eval.later(body)
- tailRecM(())(_ => ifM(p)(
- ifTrue = {
- map(b.value)(_ => continue)
- },
- ifFalse = stop
- ))
+ tailRecM(())(
+ _ =>
+ ifM(p)(
+ ifTrue = {
+ map(b.value)(_ => continue)
+ },
+ ifFalse = stop
+ )
+ )
}
/**
@@ -91,9 +97,9 @@ import simulacrum.typeclass
}
/**
- * Apply a monadic function iteratively until its result fails
- * to satisfy the given predicate and return that result.
- */
+ * Apply a monadic function iteratively until its result fails
+ * to satisfy the given predicate and return that result.
+ */
def iterateWhileM[A](init: A)(f: A => F[A])(p: A => Boolean): F[A] =
tailRecM(init) { a =>
if (p(a))
@@ -103,9 +109,9 @@ import simulacrum.typeclass
}
/**
- * Apply a monadic function iteratively until its result satisfies
- * the given predicate and return that result.
- */
+ * Apply a monadic function iteratively until its result satisfies
+ * the given predicate and return that result.
+ */
def iterateUntilM[A](init: A)(f: A => F[A])(p: A => Boolean): F[A] =
iterateWhileM(init)(f)(!p(_))
diff --git a/core/src/main/scala/cats/MonadError.scala b/core/src/main/scala/cats/MonadError.scala
index f861f82803..6b8b4ddfb1 100644
--- a/core/src/main/scala/cats/MonadError.scala
+++ b/core/src/main/scala/cats/MonadError.scala
@@ -14,8 +14,8 @@ trait MonadError[F[_], E] extends ApplicativeError[F, E] with Monad[F] {
flatMap(fa)(a => if (predicate(a)) pure(a) else raiseError(error))
/**
- * Turns a successful value into an error specified by the `error` function if it does not satisfy a given predicate.
- */
+ * Turns a successful value into an error specified by the `error` function if it does not satisfy a given predicate.
+ */
def ensureOr[A](fa: F[A])(error: A => E)(predicate: A => Boolean): F[A] =
flatMap(fa)(a => if (predicate(a)) pure(a) else raiseError(error(a)))
diff --git a/core/src/main/scala/cats/NonEmptyTraverse.scala b/core/src/main/scala/cats/NonEmptyTraverse.scala
index 100d731bc5..d774f6eb88 100644
--- a/core/src/main/scala/cats/NonEmptyTraverse.scala
+++ b/core/src/main/scala/cats/NonEmptyTraverse.scala
@@ -3,84 +3,83 @@ package cats
import simulacrum.typeclass
/**
- * NonEmptyTraverse, also known as Traversable1.
- *
- * `NonEmptyTraverse` is like a non-empty `Traverse`. In addition to the traverse and sequence
- * methods it provides nonEmptyTraverse and nonEmptySequence methods which require an `Apply` instance instead of `Applicative`.
- */
+ * NonEmptyTraverse, also known as Traversable1.
+ *
+ * `NonEmptyTraverse` is like a non-empty `Traverse`. In addition to the traverse and sequence
+ * methods it provides nonEmptyTraverse and nonEmptySequence methods which require an `Apply` instance instead of `Applicative`.
+ */
@typeclass trait NonEmptyTraverse[F[_]] extends Traverse[F] with Reducible[F] { self =>
/**
- * Given a function which returns a G effect, thread this effect
- * through the running of this function on all the values in F,
- * returning an F[B] in a G context.
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.data.NonEmptyList
- * scala> def countWords(words: List[String]): Map[String, Int] = words.groupBy(identity).map { case (k, v) => (k, v.length) }
- * scala> NonEmptyList.of(List("How", "do", "you", "fly"), List("What", "do", "you", "do")).nonEmptyTraverse(countWords)
- * res0: Map[String,cats.data.NonEmptyList[Int]] = Map(do -> NonEmptyList(1, 2), you -> NonEmptyList(1, 1))
- * }}}
- */
+ * Given a function which returns a G effect, thread this effect
+ * through the running of this function on all the values in F,
+ * returning an F[B] in a G context.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.data.NonEmptyList
+ * scala> def countWords(words: List[String]): Map[String, Int] = words.groupBy(identity).map { case (k, v) => (k, v.length) }
+ * scala> NonEmptyList.of(List("How", "do", "you", "fly"), List("What", "do", "you", "do")).nonEmptyTraverse(countWords)
+ * res0: Map[String,cats.data.NonEmptyList[Int]] = Map(do -> NonEmptyList(1, 2), you -> NonEmptyList(1, 1))
+ * }}}
+ */
def nonEmptyTraverse[G[_]: Apply, A, B](fa: F[A])(f: A => G[B]): G[F[B]]
/**
- * Thread all the G effects through the F structure to invert the
- * structure from F[G[A]] to G[F[A]].
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.data.NonEmptyList
- * scala> val x = NonEmptyList.of(Map("do" -> 1, "you" -> 1), Map("do" -> 2, "you" -> 1))
- * scala> val y = NonEmptyList.of(Map("How" -> 3, "do" -> 1, "you" -> 1), Map[String,Int]())
- * scala> x.nonEmptySequence
- * res0: Map[String,NonEmptyList[Int]] = Map(do -> NonEmptyList(1, 2), you -> NonEmptyList(1, 1))
- * scala> y.nonEmptySequence
- * res1: Map[String,NonEmptyList[Int]] = Map()
- * }}}
- */
+ * Thread all the G effects through the F structure to invert the
+ * structure from F[G[A]] to G[F[A]].
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.data.NonEmptyList
+ * scala> val x = NonEmptyList.of(Map("do" -> 1, "you" -> 1), Map("do" -> 2, "you" -> 1))
+ * scala> val y = NonEmptyList.of(Map("How" -> 3, "do" -> 1, "you" -> 1), Map[String,Int]())
+ * scala> x.nonEmptySequence
+ * res0: Map[String,NonEmptyList[Int]] = Map(do -> NonEmptyList(1, 2), you -> NonEmptyList(1, 1))
+ * scala> y.nonEmptySequence
+ * res1: Map[String,NonEmptyList[Int]] = Map()
+ * }}}
+ */
def nonEmptySequence[G[_]: Apply, A](fga: F[G[A]]): G[F[A]] =
nonEmptyTraverse(fga)(identity)
-
/**
- * A nonEmptyTraverse followed by flattening the inner result.
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.data.NonEmptyList
- * scala> val x = NonEmptyList.of(List("How", "do", "you", "fly"), List("What", "do", "you", "do"))
- * scala> x.nonEmptyFlatTraverse(_.groupByNel(identity) : Map[String, NonEmptyList[String]])
- * res0: Map[String,cats.data.NonEmptyList[String]] = Map(do -> NonEmptyList(do, do, do), you -> NonEmptyList(you, you))
- * }}}
- */
+ * A nonEmptyTraverse followed by flattening the inner result.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.data.NonEmptyList
+ * scala> val x = NonEmptyList.of(List("How", "do", "you", "fly"), List("What", "do", "you", "do"))
+ * scala> x.nonEmptyFlatTraverse(_.groupByNel(identity) : Map[String, NonEmptyList[String]])
+ * res0: Map[String,cats.data.NonEmptyList[String]] = Map(do -> NonEmptyList(do, do, do), you -> NonEmptyList(you, you))
+ * }}}
+ */
def nonEmptyFlatTraverse[G[_], A, B](fa: F[A])(f: A => G[F[B]])(implicit G: Apply[G], F: FlatMap[F]): G[F[B]] =
G.map(nonEmptyTraverse(fa)(f))(F.flatten)
/**
- * Thread all the G effects through the F structure and flatten to invert the
- * structure from F[G[F[A]]] to G[F[A]].
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.data.NonEmptyList
- * scala> val x = NonEmptyList.of(Map(0 ->NonEmptyList.of(1, 2)), Map(0 -> NonEmptyList.of(3)))
- * scala> val y: NonEmptyList[Map[Int, NonEmptyList[Int]]] = NonEmptyList.of(Map(), Map(1 -> NonEmptyList.of(3)))
- * scala> x.nonEmptyFlatSequence
- * res0: Map[Int,cats.data.NonEmptyList[Int]] = Map(0 -> NonEmptyList(1, 2, 3))
- * scala> y.nonEmptyFlatSequence
- * res1: Map[Int,cats.data.NonEmptyList[Int]] = Map()
- * }}}
- */
+ * Thread all the G effects through the F structure and flatten to invert the
+ * structure from F[G[F[A]]] to G[F[A]].
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.data.NonEmptyList
+ * scala> val x = NonEmptyList.of(Map(0 ->NonEmptyList.of(1, 2)), Map(0 -> NonEmptyList.of(3)))
+ * scala> val y: NonEmptyList[Map[Int, NonEmptyList[Int]]] = NonEmptyList.of(Map(), Map(1 -> NonEmptyList.of(3)))
+ * scala> x.nonEmptyFlatSequence
+ * res0: Map[Int,cats.data.NonEmptyList[Int]] = Map(0 -> NonEmptyList(1, 2, 3))
+ * scala> y.nonEmptyFlatSequence
+ * res1: Map[Int,cats.data.NonEmptyList[Int]] = Map()
+ * }}}
+ */
def nonEmptyFlatSequence[G[_], A](fgfa: F[G[F[A]]])(implicit G: Apply[G], F: FlatMap[F]): G[F[A]] =
G.map(nonEmptyTraverse(fgfa)(identity))(F.flatten)
- override def traverse[G[_] : Applicative, A, B](fa: F[A])(f: (A) => G[B]): G[F[B]] =
+ override def traverse[G[_]: Applicative, A, B](fa: F[A])(f: (A) => G[B]): G[F[B]] =
nonEmptyTraverse(fa)(f)
def compose[G[_]: NonEmptyTraverse]: NonEmptyTraverse[λ[α => F[G[α]]]] =
@@ -89,5 +88,4 @@ import simulacrum.typeclass
val G = NonEmptyTraverse[G]
}
-
}
diff --git a/core/src/main/scala/cats/NotNull.scala b/core/src/main/scala/cats/NotNull.scala
index 39dbba6691..ec0e308a63 100644
--- a/core/src/main/scala/cats/NotNull.scala
+++ b/core/src/main/scala/cats/NotNull.scala
@@ -16,15 +16,20 @@ package cats
sealed trait NotNull[A]
object NotNull {
+
/**
* Since NotNull is just a marker trait with no functionality, it's safe to
* reuse a single instance of it. This helps prevent unnecessary allocations.
*/
private[this] val singleton: NotNull[Any] = new NotNull[Any] {}
- private[this] def ambiguousException: Exception = new Exception("An instance of NotNull[Null] was used. This should never happen. Both ambiguous NotNull[Null] instances should always be in scope if one of them is.")
+ private[this] def ambiguousException: Exception =
+ new Exception(
+ "An instance of NotNull[Null] was used. This should never happen. Both ambiguous NotNull[Null] instances should always be in scope if one of them is."
+ )
- implicit def `If you are seeing this, you probably need to add an explicit type parameter somewhere, because Null is being inferred.`: NotNull[Null] = throw ambiguousException
+ implicit def `If you are seeing this, you probably need to add an explicit type parameter somewhere, because Null is being inferred.`
+ : NotNull[Null] = throw ambiguousException
implicit def catsAmbiguousNotNullNull2: NotNull[Null] = throw ambiguousException
diff --git a/core/src/main/scala/cats/Parallel.scala b/core/src/main/scala/cats/Parallel.scala
index 3d48d4fe03..7c36aa599e 100644
--- a/core/src/main/scala/cats/Parallel.scala
+++ b/core/src/main/scala/cats/Parallel.scala
@@ -3,46 +3,45 @@ package cats
import cats.arrow.FunctionK
/**
- * Some types that form a FlatMap, are also capable of forming an Apply that supports parallel composition.
- * The NonEmptyParallel type class allows us to represent this relationship.
- */
+ * Some types that form a FlatMap, are also capable of forming an Apply that supports parallel composition.
+ * The NonEmptyParallel type class allows us to represent this relationship.
+ */
trait NonEmptyParallel[M[_], F[_]] extends Serializable {
+
/**
- * The Apply instance for F[_]
- */
+ * The Apply instance for F[_]
+ */
def apply: Apply[F]
/**
- * The FlatMap instance for M[_]
- */
+ * The FlatMap instance for M[_]
+ */
def flatMap: FlatMap[M]
/**
- * Natural Transformation from the parallel Apply F[_] to the sequential FlatMap M[_].
- */
+ * Natural Transformation from the parallel Apply F[_] to the sequential FlatMap M[_].
+ */
def sequential: F ~> M
/**
- * Natural Transformation from the sequential FlatMap M[_] to the parallel Apply F[_].
- */
+ * Natural Transformation from the sequential FlatMap M[_] to the parallel Apply F[_].
+ */
def parallel: M ~> F
-
/**
- * Like [[Apply.productR]], but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
+ * Like [[Apply.productR]], but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
def parProductR[A, B](ma: M[A])(mb: M[B]): M[B] =
Parallel.parMap2(ma, mb)((_, b) => b)(this)
@deprecated("Use parProductR instead.", "1.0.0-RC2")
@inline def parFollowedBy[A, B](ma: M[A])(mb: M[B]): M[B] = parProductR(ma)(mb)
-
/**
- * Like [[Apply.productL]], but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
+ * Like [[Apply.productL]], but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
def parProductL[A, B](ma: M[A])(mb: M[B]): M[A] =
Parallel.parMap2(ma, mb)((a, _) => a)(this)
@@ -52,18 +51,19 @@ trait NonEmptyParallel[M[_], F[_]] extends Serializable {
}
/**
- * Some types that form a Monad, are also capable of forming an Applicative that supports parallel composition.
- * The Parallel type class allows us to represent this relationship.
- */
+ * Some types that form a Monad, are also capable of forming an Applicative that supports parallel composition.
+ * The Parallel type class allows us to represent this relationship.
+ */
trait Parallel[M[_], F[_]] extends NonEmptyParallel[M, F] {
+
/**
- * The applicative instance for F[_]
- */
+ * The applicative instance for F[_]
+ */
def applicative: Applicative[F]
/**
- * The monad instance for M[_]
- */
+ * The monad instance for M[_]
+ */
def monad: Monad[M]
override def apply: Apply[F] = applicative
@@ -71,18 +71,18 @@ trait Parallel[M[_], F[_]] extends NonEmptyParallel[M, F] {
override def flatMap: FlatMap[M] = monad
/**
- * Provides an `ApplicativeError[F, E]` instance for any F, that has a `Parallel[M, F]`
- * and a `MonadError[M, E]` instance.
- * I.e. if you have a type M[_], that supports parallel composition through type F[_],
- * then you can get `ApplicativeError[F, E]` from `MonadError[M, E]`.
- */
+ * Provides an `ApplicativeError[F, E]` instance for any F, that has a `Parallel[M, F]`
+ * and a `MonadError[M, E]` instance.
+ * I.e. if you have a type M[_], that supports parallel composition through type F[_],
+ * then you can get `ApplicativeError[F, E]` from `MonadError[M, E]`.
+ */
def applicativeError[E](implicit E: MonadError[M, E]): ApplicativeError[F, E] = new ApplicativeError[F, E] {
def raiseError[A](e: E): F[A] =
parallel(MonadError[M, E].raiseError(e))
def handleErrorWith[A](fa: F[A])(f: (E) => F[A]): F[A] = {
- val ma = MonadError[M, E].handleErrorWith(sequential(fa))(f andThen sequential.apply)
+ val ma = MonadError[M, E].handleErrorWith(sequential(fa))(f.andThen(sequential.apply))
parallel(ma)
}
@@ -114,170 +114,165 @@ object Parallel extends ParallelArityFunctions2 {
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.
- */
- def parSequence[T[_]: Traverse, M[_], F[_], A]
- (tma: T[M[A]])(implicit P: Parallel[M, F]): M[T[A]] = {
+ * Like `Traverse[A].sequence`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parSequence[T[_]: Traverse, M[_], F[_], A](tma: T[M[A]])(implicit P: Parallel[M, F]): M[T[A]] = {
val fta: F[T[A]] = Traverse[T].traverse(tma)(P.parallel.apply)(P.applicative)
P.sequential(fta)
}
/**
- * Like `Traverse[A].traverse`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parTraverse[T[_]: Traverse, M[_], F[_], A, B]
- (ta: T[A])(f: A => M[B])(implicit P: Parallel[M, F]): M[T[B]] = {
- val gtb: F[T[B]] = Traverse[T].traverse(ta)(f andThen P.parallel.apply)(P.applicative)
+ * Like `Traverse[A].traverse`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parTraverse[T[_]: Traverse, M[_], F[_], A, B](ta: T[A])(f: A => M[B])(implicit P: Parallel[M, F]): M[T[B]] = {
+ val gtb: F[T[B]] = Traverse[T].traverse(ta)(f.andThen(P.parallel.apply))(P.applicative)
P.sequential(gtb)
}
/**
- * Like `Traverse[A].flatTraverse`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parFlatTraverse[T[_]: Traverse: FlatMap, M[_], F[_], A, B]
- (ta: T[A])(f: A => M[T[B]])(implicit P: Parallel[M, F]): M[T[B]] = {
- val gtb: F[T[B]] = Traverse[T].flatTraverse(ta)(f andThen P.parallel.apply)(P.applicative, FlatMap[T])
+ * Like `Traverse[A].flatTraverse`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parFlatTraverse[T[_]: Traverse: FlatMap, M[_], F[_], A, B](
+ ta: T[A]
+ )(f: A => M[T[B]])(implicit P: Parallel[M, F]): M[T[B]] = {
+ val gtb: F[T[B]] = Traverse[T].flatTraverse(ta)(f.andThen(P.parallel.apply))(P.applicative, FlatMap[T])
P.sequential(gtb)
}
/**
- * Like `Traverse[A].flatSequence`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parFlatSequence[T[_]: Traverse: FlatMap, M[_], F[_], A]
- (tma: T[M[T[A]]])(implicit P: Parallel[M, F]): M[T[A]] = {
+ * Like `Traverse[A].flatSequence`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parFlatSequence[T[_]: Traverse: FlatMap, M[_], F[_], A](tma: T[M[T[A]]])(implicit P: Parallel[M, F]): M[T[A]] = {
val fta: F[T[A]] = Traverse[T].flatTraverse(tma)(P.parallel.apply)(P.applicative, FlatMap[T])
P.sequential(fta)
}
/**
- * Like `Foldable[A].sequence_`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parSequence_[T[_]: Foldable, M[_], F[_], A]
- (tma: T[M[A]])(implicit P: Parallel[M, F]): M[Unit] = {
+ * Like `Foldable[A].sequence_`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parSequence_[T[_]: Foldable, M[_], F[_], A](tma: T[M[A]])(implicit P: Parallel[M, F]): M[Unit] = {
val fu: F[Unit] = Foldable[T].traverse_(tma)(P.parallel.apply)(P.applicative)
P.sequential(fu)
}
/**
- * Like `Foldable[A].traverse_`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parTraverse_[T[_]: Foldable, M[_], F[_], A, B]
- (ta: T[A])(f: A => M[B])(implicit P: Parallel[M, F]): M[Unit] = {
- val gtb: F[Unit] = Foldable[T].traverse_(ta)(f andThen P.parallel.apply)(P.applicative)
+ * Like `Foldable[A].traverse_`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parTraverse_[T[_]: Foldable, M[_], F[_], A, B](ta: T[A])(f: A => M[B])(implicit P: Parallel[M, F]): M[Unit] = {
+ val gtb: F[Unit] = Foldable[T].traverse_(ta)(f.andThen(P.parallel.apply))(P.applicative)
P.sequential(gtb)
}
/**
- * Like `NonEmptyTraverse[A].nonEmptySequence`, but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
- def parNonEmptySequence[T[_]: NonEmptyTraverse, M[_], F[_], A]
- (tma: T[M[A]])(implicit P: NonEmptyParallel[M, F]): M[T[A]] = {
+ * Like `NonEmptyTraverse[A].nonEmptySequence`, but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parNonEmptySequence[T[_]: NonEmptyTraverse, M[_], F[_], A](
+ tma: T[M[A]]
+ )(implicit P: NonEmptyParallel[M, F]): M[T[A]] = {
val fta: F[T[A]] = NonEmptyTraverse[T].nonEmptyTraverse(tma)(P.parallel.apply)(P.apply)
P.sequential(fta)
}
/**
- * Like `NonEmptyTraverse[A].nonEmptyTraverse`, but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
- def parNonEmptyTraverse[T[_]: NonEmptyTraverse, M[_], F[_], A, B]
- (ta: T[A])(f: A => M[B])(implicit P: NonEmptyParallel[M, F]): M[T[B]] = {
- val gtb: F[T[B]] = NonEmptyTraverse[T].nonEmptyTraverse(ta)(f andThen P.parallel.apply)(P.apply)
+ * Like `NonEmptyTraverse[A].nonEmptyTraverse`, but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parNonEmptyTraverse[T[_]: NonEmptyTraverse, M[_], F[_], A, B](
+ ta: T[A]
+ )(f: A => M[B])(implicit P: NonEmptyParallel[M, F]): M[T[B]] = {
+ val gtb: F[T[B]] = NonEmptyTraverse[T].nonEmptyTraverse(ta)(f.andThen(P.parallel.apply))(P.apply)
P.sequential(gtb)
}
-
/**
- * Like `NonEmptyTraverse[A].nonEmptyFlatTraverse`, but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
- def parNonEmptyFlatTraverse[T[_]: NonEmptyTraverse: FlatMap, M[_], F[_], A, B]
- (ta: T[A])(f: A => M[T[B]])(implicit P: NonEmptyParallel[M, F]): M[T[B]] = {
- val gtb: F[T[B]] = NonEmptyTraverse[T].nonEmptyFlatTraverse(ta)(f andThen P.parallel.apply)(P.apply, FlatMap[T])
+ * Like `NonEmptyTraverse[A].nonEmptyFlatTraverse`, but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parNonEmptyFlatTraverse[T[_]: NonEmptyTraverse: FlatMap, M[_], F[_], A, B](
+ ta: T[A]
+ )(f: A => M[T[B]])(implicit P: NonEmptyParallel[M, F]): M[T[B]] = {
+ val gtb: F[T[B]] = NonEmptyTraverse[T].nonEmptyFlatTraverse(ta)(f.andThen(P.parallel.apply))(P.apply, FlatMap[T])
P.sequential(gtb)
}
-
/**
- * Like `NonEmptyTraverse[A].nonEmptyFlatSequence`, but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
- def parNonEmptyFlatSequence[T[_]: NonEmptyTraverse: FlatMap, M[_], F[_], A]
- (tma: T[M[T[A]]])(implicit P: NonEmptyParallel[M, F]): M[T[A]] = {
+ * Like `NonEmptyTraverse[A].nonEmptyFlatSequence`, but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parNonEmptyFlatSequence[T[_]: NonEmptyTraverse: FlatMap, M[_], F[_], A](
+ tma: T[M[T[A]]]
+ )(implicit P: NonEmptyParallel[M, F]): M[T[A]] = {
val fta: F[T[A]] = NonEmptyTraverse[T].nonEmptyFlatTraverse(tma)(P.parallel.apply)(P.apply, FlatMap[T])
P.sequential(fta)
}
/**
- * Like `Reducible[A].nonEmptySequence_`, but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
- def parNonEmptySequence_[T[_]: Reducible, M[_], F[_], A]
- (tma: T[M[A]])(implicit P: NonEmptyParallel[M, F]): M[Unit] = {
+ * Like `Reducible[A].nonEmptySequence_`, but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parNonEmptySequence_[T[_]: Reducible, M[_], F[_], A](
+ tma: T[M[A]]
+ )(implicit P: NonEmptyParallel[M, F]): M[Unit] = {
val fu: F[Unit] = Reducible[T].nonEmptyTraverse_(tma)(P.parallel.apply)(P.apply)
P.sequential(fu)
}
/**
- * Like `Reducible[A].nonEmptyTraverse_`, but uses the apply instance
- * corresponding to the Parallel instance instead.
- */
- def parNonEmptyTraverse_[T[_]: Reducible, M[_], F[_], A, B]
- (ta: T[A])(f: A => M[B])(implicit P: NonEmptyParallel[M, F]): M[Unit] = {
- val gtb: F[Unit] = Reducible[T].nonEmptyTraverse_(ta)(f andThen P.parallel.apply)(P.apply)
+ * Like `Reducible[A].nonEmptyTraverse_`, but uses the apply instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parNonEmptyTraverse_[T[_]: Reducible, M[_], F[_], A, B](
+ ta: T[A]
+ )(f: A => M[B])(implicit P: NonEmptyParallel[M, F]): M[Unit] = {
+ val gtb: F[Unit] = Reducible[T].nonEmptyTraverse_(ta)(f.andThen(P.parallel.apply))(P.apply)
P.sequential(gtb)
}
/**
- * Like `Applicative[F].ap`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parAp[M[_], F[_], A, B](mf: M[A => B])
- (ma: M[A])
- (implicit P: NonEmptyParallel[M, F]): M[B] =
+ * Like `Applicative[F].ap`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parAp[M[_], F[_], A, B](mf: M[A => B])(ma: M[A])(implicit P: NonEmptyParallel[M, F]): M[B] =
P.sequential(P.apply.ap(P.parallel(mf))(P.parallel(ma)))
/**
- * Like `Applicative[F].product`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parProduct[M[_], F[_], A, B](ma: M[A], mb: M[B])
- (implicit P: NonEmptyParallel[M, F]): M[(A, B)] =
+ * Like `Applicative[F].product`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parProduct[M[_], F[_], A, B](ma: M[A], mb: M[B])(implicit P: NonEmptyParallel[M, F]): M[(A, B)] =
P.sequential(P.apply.product(P.parallel(ma), P.parallel(mb)))
/**
- * Like `Applicative[F].ap2`, but uses the applicative instance
- * corresponding to the Parallel instance instead.
- */
- def parAp2[M[_], F[_], A, B, Z](ff: M[(A, B) => Z])
- (ma: M[A], mb: M[B])
- (implicit P: NonEmptyParallel[M, F]): M[Z] =
+ * Like `Applicative[F].ap2`, but uses the applicative instance
+ * corresponding to the Parallel instance instead.
+ */
+ def parAp2[M[_], F[_], A, B, Z](ff: M[(A, B) => Z])(ma: M[A], mb: M[B])(implicit P: NonEmptyParallel[M, F]): M[Z] =
P.sequential(
P.apply.ap2(P.parallel(ff))(P.parallel(ma), P.parallel(mb))
)
/**
- * Provides an `ApplicativeError[F, E]` instance for any F, that has a `Parallel[M, F]`
- * and a `MonadError[M, E]` instance.
- * I.e. if you have a type M[_], that supports parallel composition through type F[_],
- * then you can get `ApplicativeError[F, E]` from `MonadError[M, E]`.
- */
- def applicativeError[M[_], F[_], E]
- (implicit P: Parallel[M, F], E: MonadError[M, E]): ApplicativeError[F, E] = P.applicativeError
+ * Provides an `ApplicativeError[F, E]` instance for any F, that has a `Parallel[M, F]`
+ * and a `MonadError[M, E]` instance.
+ * I.e. if you have a type M[_], that supports parallel composition through type F[_],
+ * then you can get `ApplicativeError[F, E]` from `MonadError[M, E]`.
+ */
+ def applicativeError[M[_], F[_], E](implicit P: Parallel[M, F], E: MonadError[M, E]): ApplicativeError[F, E] =
+ P.applicativeError
/**
- * A Parallel instance for any type `M[_]` that supports parallel composition through itself.
- * Can also be used for giving `Parallel` instances to types that do not support parallel composition,
- * but are required to have an instance of `Parallel` defined,
- * in which case parallel composition will actually be sequential.
- */
+ * A Parallel instance for any type `M[_]` that supports parallel composition through itself.
+ * Can also be used for giving `Parallel` instances to types that do not support parallel composition,
+ * but are required to have an instance of `Parallel` defined,
+ * in which case parallel composition will actually be sequential.
+ */
def identity[M[_]: Monad]: Parallel[M, M] = new Parallel[M, M] {
val monad: Monad[M] = implicitly[Monad[M]]
diff --git a/core/src/main/scala/cats/Reducible.scala b/core/src/main/scala/cats/Reducible.scala
index 7a7a6173a6..284972eaf1 100644
--- a/core/src/main/scala/cats/Reducible.scala
+++ b/core/src/main/scala/cats/Reducible.scala
@@ -177,29 +177,30 @@ import simulacrum.typeclass
}
/**
- * Partition this Reducible by a separating function `A => Either[B, C]`
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> val nel = NonEmptyList.of(1,2,3,4)
- * scala> Reducible[NonEmptyList].nonEmptyPartition(nel)(a => if (a % 2 == 0) Left(a.toString) else Right(a))
- * res0: cats.data.Ior[cats.data.NonEmptyList[String],cats.data.NonEmptyList[Int]] = Both(NonEmptyList(2, 4),NonEmptyList(1, 3))
- * scala> Reducible[NonEmptyList].nonEmptyPartition(nel)(a => Right(a * 4))
- * res1: cats.data.Ior[cats.data.NonEmptyList[Nothing],cats.data.NonEmptyList[Int]] = Right(NonEmptyList(4, 8, 12, 16))
- * }}}
- */
+ * Partition this Reducible by a separating function `A => Either[B, C]`
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> val nel = NonEmptyList.of(1,2,3,4)
+ * scala> Reducible[NonEmptyList].nonEmptyPartition(nel)(a => if (a % 2 == 0) Left(a.toString) else Right(a))
+ * res0: cats.data.Ior[cats.data.NonEmptyList[String],cats.data.NonEmptyList[Int]] = Both(NonEmptyList(2, 4),NonEmptyList(1, 3))
+ * scala> Reducible[NonEmptyList].nonEmptyPartition(nel)(a => Right(a * 4))
+ * res1: cats.data.Ior[cats.data.NonEmptyList[Nothing],cats.data.NonEmptyList[Int]] = Right(NonEmptyList(4, 8, 12, 16))
+ * }}}
+ */
def nonEmptyPartition[A, B, C](fa: F[A])(f: A => Either[B, C]): Ior[NonEmptyList[B], NonEmptyList[C]] = {
import cats.syntax.either._
- def g(a: A, eval: Eval[Ior[NonEmptyList[B], NonEmptyList[C]]]): Eval[Ior[NonEmptyList[B], NonEmptyList[C]]] = {
- eval.map(ior =>
- (f(a), ior) match {
- case (Right(c), Ior.Left(_)) => ior.putRight(NonEmptyList.one(c))
- case (Right(c), _) => ior.map(c :: _)
- case (Left(b), Ior.Right(r)) => Ior.bothNel(b, r)
- case (Left(b), _) => ior.leftMap(b :: _)
- })
- }
+ def g(a: A, eval: Eval[Ior[NonEmptyList[B], NonEmptyList[C]]]): Eval[Ior[NonEmptyList[B], NonEmptyList[C]]] =
+ eval.map(
+ ior =>
+ (f(a), ior) match {
+ case (Right(c), Ior.Left(_)) => ior.putRight(NonEmptyList.one(c))
+ case (Right(c), _) => ior.map(c :: _)
+ case (Left(b), Ior.Right(r)) => Ior.bothNel(b, r)
+ case (Left(b), _) => ior.leftMap(b :: _)
+ }
+ )
reduceRightTo(fa)(a => f(a).bimap(NonEmptyList.one, NonEmptyList.one).toIor)(g).value
}
@@ -231,8 +232,9 @@ abstract class NonEmptyReducible[F[_], G[_]](implicit G: Foldable[G]) extends Re
}
def foldRight[A, B](fa: F[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
- Always(split(fa)).flatMap { case (a, ga) =>
- f(a, G.foldRight(ga, lb)(f))
+ Always(split(fa)).flatMap {
+ case (a, ga) =>
+ f(a, G.foldRight(ga, lb)(f))
}
def reduceLeftTo[A, B](fa: F[A])(f: A => B)(g: (B, A) => B): B = {
@@ -241,11 +243,12 @@ abstract class NonEmptyReducible[F[_], G[_]](implicit G: Foldable[G]) extends Re
}
def reduceRightTo[A, B](fa: F[A])(f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[B] =
- Always(split(fa)).flatMap { case (a, ga) =>
- G.reduceRightToOption(ga)(f)(g).flatMap {
- case Some(b) => g(a, Now(b))
- case None => Later(f(a))
- }
+ Always(split(fa)).flatMap {
+ case (a, ga) =>
+ G.reduceRightToOption(ga)(f)(g).flatMap {
+ case Some(b) => g(a, Now(b))
+ case None => Later(f(a))
+ }
}
override def size[A](fa: F[A]): Long = {
diff --git a/core/src/main/scala/cats/Representable.scala b/core/src/main/scala/cats/Representable.scala
index 8fb7dd3005..223f1c1154 100644
--- a/core/src/main/scala/cats/Representable.scala
+++ b/core/src/main/scala/cats/Representable.scala
@@ -69,18 +69,17 @@ private trait RepresentableMonad[F[_], R] extends Monad[F] {
override def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B] =
R.tabulate(a => R.index(f(R.index(fa)(a)))(a))
- override def tailRecM[A, B](a: A)(f: A => F[Either[A, B]]): F[B] = {
+ override def tailRecM[A, B](a: A)(f: A => F[Either[A, B]]): F[B] =
R.tabulate { r: R =>
@annotation.tailrec
def loop(a: A): B =
R.index(f(a))(r) match {
case Right(b) => b
- case Left(a) => loop(a)
+ case Left(a) => loop(a)
}
loop(a)
}
- }
}
private trait RepresentableBimonad[F[_], R] extends RepresentableMonad[F, R] with Bimonad[F] {
@@ -123,8 +122,9 @@ object Representable {
* Derives a `Bimonad` instance for any `Representable` functor whos representation
* has a `Monoid` instance.
*/
- def bimonad[F[_], R](implicit Rep: Representable.Aux[F, R], Mon: Monoid[R]): Bimonad[F] = new RepresentableBimonad[F, R] {
- override def R: Representable.Aux[F, R] = Rep
- override def M: Monoid[R] = Mon
- }
+ def bimonad[F[_], R](implicit Rep: Representable.Aux[F, R], Mon: Monoid[R]): Bimonad[F] =
+ new RepresentableBimonad[F, R] {
+ override def R: Representable.Aux[F, R] = Rep
+ override def M: Monoid[R] = Mon
+ }
}
diff --git a/core/src/main/scala/cats/Show.scala b/core/src/main/scala/cats/Show.scala
index 80cdf17797..08033ea072 100644
--- a/core/src/main/scala/cats/Show.scala
+++ b/core/src/main/scala/cats/Show.scala
@@ -45,15 +45,15 @@ object Show {
final case class Shown(override val toString: String) extends AnyVal
object Shown {
- implicit def mat[A](x: A)(implicit z: ContravariantShow[A]): Shown = Shown(z show x)
+ implicit def mat[A](x: A)(implicit z: ContravariantShow[A]): Shown = Shown(z.show(x))
}
final case class ShowInterpolator(_sc: StringContext) extends AnyVal {
- def show(args: Shown*): String = _sc s (args: _*)
+ def show(args: Shown*): String = _sc.s(args: _*)
}
implicit val catsContravariantForShow: Contravariant[Show] = new Contravariant[Show] {
def contramap[A, B](fa: Show[A])(f: B => A): Show[B] =
- show[B](fa.show _ compose f)
+ show[B]((fa.show _).compose(f))
}
}
diff --git a/core/src/main/scala/cats/StackSafeMonad.scala b/core/src/main/scala/cats/StackSafeMonad.scala
index b2f8afb20a..505b65ceba 100644
--- a/core/src/main/scala/cats/StackSafeMonad.scala
+++ b/core/src/main/scala/cats/StackSafeMonad.scala
@@ -13,7 +13,7 @@ import scala.util.{Either, Left, Right}
trait StackSafeMonad[F[_]] extends Monad[F] {
override def tailRecM[A, B](a: A)(f: A => F[Either[A, B]]): F[B] = flatMap(f(a)) {
- case Left(a) => tailRecM(a)(f)
+ case Left(a) => tailRecM(a)(f)
case Right(b) => pure(b)
}
}
diff --git a/core/src/main/scala/cats/Traverse.scala b/core/src/main/scala/cats/Traverse.scala
index 3e1f1ac5fb..17fc0a5a75 100644
--- a/core/src/main/scala/cats/Traverse.scala
+++ b/core/src/main/scala/cats/Traverse.scala
@@ -100,8 +100,7 @@ import simulacrum.typeclass
* F when calling the function.
*/
def mapWithIndex[A, B](fa: F[A])(f: (A, Int) => B): F[B] =
- traverse(fa)(a =>
- State((s: Int) => (s + 1, f(a, s)))).runA(0).value
+ traverse(fa)(a => State((s: Int) => (s + 1, f(a, s)))).runA(0).value
/**
* Akin to [[traverse]], but also provides the value's index in
@@ -112,8 +111,7 @@ import simulacrum.typeclass
* two passes using [[zipWithIndex]] followed by [[traverse]].
*/
def traverseWithIndexM[G[_], A, B](fa: F[A])(f: (A, Int) => G[B])(implicit G: Monad[G]): G[F[B]] =
- traverse(fa)(a =>
- StateT((s: Int) => G.map(f(a, s))(b => (s + 1, b)))).runA(0)
+ traverse(fa)(a => StateT((s: Int) => G.map(f(a, s))(b => (s + 1, b)))).runA(0)
/**
* Traverses through the structure F, pairing the values with
@@ -125,9 +123,9 @@ import simulacrum.typeclass
def zipWithIndex[A](fa: F[A]): F[(A, Int)] =
mapWithIndex(fa)((a, i) => (a, i))
- override def unorderedTraverse[G[_] : CommutativeApplicative, A, B](sa: F[A])(f: (A) => G[B]): G[F[B]] =
+ override def unorderedTraverse[G[_]: CommutativeApplicative, A, B](sa: F[A])(f: (A) => G[B]): G[F[B]] =
traverse(sa)(f)
- override def unorderedSequence[G[_] : CommutativeApplicative, A](fga: F[G[A]]): G[F[A]] =
+ override def unorderedSequence[G[_]: CommutativeApplicative, A](fga: F[G[A]]): G[F[A]] =
sequence(fga)
}
diff --git a/core/src/main/scala/cats/UnorderedFoldable.scala b/core/src/main/scala/cats/UnorderedFoldable.scala
index 6076933a08..236333bc94 100644
--- a/core/src/main/scala/cats/UnorderedFoldable.scala
+++ b/core/src/main/scala/cats/UnorderedFoldable.scala
@@ -3,9 +3,10 @@ package cats
import cats.kernel.CommutativeMonoid
import simulacrum.typeclass
import cats.instances.long._
+
/**
- * `UnorderedFoldable` is like a `Foldable` for unordered containers.
- */
+ * `UnorderedFoldable` is like a `Foldable` for unordered containers.
+ */
@typeclass trait UnorderedFoldable[F[_]] {
def unorderedFoldMap[A, B: CommutativeMonoid](fa: F[A])(f: A => B): B
@@ -13,10 +14,9 @@ import cats.instances.long._
def unorderedFold[A: CommutativeMonoid](fa: F[A]): A =
unorderedFoldMap(fa)(identity)
-
/**
- * Returns true if there are no elements. Otherwise false.
- */
+ * Returns true if there are no elements. Otherwise false.
+ */
def isEmpty[A](fa: F[A]): Boolean =
exists(fa)(Function.const(true))
@@ -24,31 +24,29 @@ import cats.instances.long._
!isEmpty(fa)
/**
- * Check whether at least one element satisfies the predicate.
- *
- * If there are no elements, the result is `false`.
- */
+ * Check whether at least one element satisfies the predicate.
+ *
+ * If there are no elements, the result is `false`.
+ */
def exists[A](fa: F[A])(p: A => Boolean): Boolean =
- unorderedFoldMap(fa)(a => Eval.later(p(a)))(UnorderedFoldable.commutativeMonoidEval(UnorderedFoldable.orMonoid))
- .value
+ unorderedFoldMap(fa)(a => Eval.later(p(a)))(UnorderedFoldable.commutativeMonoidEval(UnorderedFoldable.orMonoid)).value
/**
- * Check whether all elements satisfy the predicate.
- *
- * If there are no elements, the result is `true`.
- */
+ * Check whether all elements satisfy the predicate.
+ *
+ * If there are no elements, the result is `true`.
+ */
def forall[A](fa: F[A])(p: A => Boolean): Boolean =
- unorderedFoldMap(fa)(a => Eval.later(p(a)))(UnorderedFoldable.commutativeMonoidEval(UnorderedFoldable.andMonoid))
- .value
+ unorderedFoldMap(fa)(a => Eval.later(p(a)))(UnorderedFoldable.commutativeMonoidEval(UnorderedFoldable.andMonoid)).value
/**
- * The size of this UnorderedFoldable.
- *
- * This is overridden in structures that have more efficient size implementations
- * (e.g. Vector, Set, Map).
- *
- * Note: will not terminate for infinite-sized collections.
- */
+ * The size of this UnorderedFoldable.
+ *
+ * This is overridden in structures that have more efficient size implementations
+ * (e.g. Vector, Set, Map).
+ *
+ * Note: will not terminate for infinite-sized collections.
+ */
def size[A](fa: F[A]): Long = unorderedFoldMap(fa)(_ => 1L)
}
diff --git a/core/src/main/scala/cats/UnorderedTraverse.scala b/core/src/main/scala/cats/UnorderedTraverse.scala
index 3fab6f1124..fb246f1d7a 100644
--- a/core/src/main/scala/cats/UnorderedTraverse.scala
+++ b/core/src/main/scala/cats/UnorderedTraverse.scala
@@ -3,8 +3,8 @@ package cats
import simulacrum.typeclass
/**
- * `UnorderedTraverse` is like a `Traverse` for unordered containers.
- */
+ * `UnorderedTraverse` is like a `Traverse` for unordered containers.
+ */
@typeclass trait UnorderedTraverse[F[_]] extends UnorderedFoldable[F] {
def unorderedTraverse[G[_]: CommutativeApplicative, A, B](sa: F[A])(f: A => G[B]): G[F[B]]
diff --git a/core/src/main/scala/cats/arrow/Arrow.scala b/core/src/main/scala/cats/arrow/Arrow.scala
index f607a65f27..017375b36b 100644
--- a/core/src/main/scala/cats/arrow/Arrow.scala
+++ b/core/src/main/scala/cats/arrow/Arrow.scala
@@ -66,7 +66,6 @@ import simulacrum.typeclass
* `f` and `g` in the context of F. This means that `f &&& g` may not be equivalent to `g &&& f`.
*/
@simulacrum.op("&&&", alias = true)
- def merge[A, B, C](f: F[A, B], g: F[A, C]): F[A, (B, C)] = {
+ def merge[A, B, C](f: F[A, B], g: F[A, C]): F[A, (B, C)] =
andThen(lift((x: A) => (x, x)), split(f, g))
- }
}
diff --git a/core/src/main/scala/cats/arrow/Choice.scala b/core/src/main/scala/cats/arrow/Choice.scala
index 768f7ce297..384d0149a6 100644
--- a/core/src/main/scala/cats/arrow/Choice.scala
+++ b/core/src/main/scala/cats/arrow/Choice.scala
@@ -4,6 +4,7 @@ package arrow
import simulacrum.typeclass
@typeclass trait Choice[F[_, _]] extends Category[F] {
+
/**
* Given two `F`s (`f` and `g`) with a common target type, create a new `F`
* with the same target type, but with a source type of either `f`'s source
diff --git a/core/src/main/scala/cats/arrow/CommutativeArrow.scala b/core/src/main/scala/cats/arrow/CommutativeArrow.scala
index d074298524..1e48aa71df 100644
--- a/core/src/main/scala/cats/arrow/CommutativeArrow.scala
+++ b/core/src/main/scala/cats/arrow/CommutativeArrow.scala
@@ -4,10 +4,9 @@ package arrow
import simulacrum.typeclass
/**
- * In a Commutative Arrow F[_, _], the split operation (or `***`) is commutative,
- * which means that there is non-interference between the effect of the paired arrows.
- *
- * Must obey the laws in CommutativeArrowLaws
- */
+ * In a Commutative Arrow F[_, _], the split operation (or `***`) is commutative,
+ * which means that there is non-interference between the effect of the paired arrows.
+ *
+ * Must obey the laws in CommutativeArrowLaws
+ */
@typeclass trait CommutativeArrow[F[_, _]] extends Arrow[F]
-
diff --git a/core/src/main/scala/cats/arrow/FunctionK.scala b/core/src/main/scala/cats/arrow/FunctionK.scala
index 2316a71ce6..019c27d232 100644
--- a/core/src/main/scala/cats/arrow/FunctionK.scala
+++ b/core/src/main/scala/cats/arrow/FunctionK.scala
@@ -6,43 +6,43 @@ import scala.reflect.macros.blackbox.Context
import cats.data.{EitherK, Tuple2K}
/**
- * `FunctionK[F[_], G[_]]` is a functor transformation from `F` to `G`
- * in the same manner that function `A => B` is a morphism from values
- * of type `A` to `B`.
- * An easy way to create a FunctionK instance is to use the Polymorphic
- * lambdas provided by non/kind-projector v0.9+. E.g.
- * {{{
- * val listToOption = λ[FunctionK[List, Option]](_.headOption)
- * }}}
- */
+ * `FunctionK[F[_], G[_]]` is a functor transformation from `F` to `G`
+ * in the same manner that function `A => B` is a morphism from values
+ * of type `A` to `B`.
+ * An easy way to create a FunctionK instance is to use the Polymorphic
+ * lambdas provided by non/kind-projector v0.9+. E.g.
+ * {{{
+ * val listToOption = λ[FunctionK[List, Option]](_.headOption)
+ * }}}
+ */
trait FunctionK[F[_], G[_]] extends Serializable { self =>
/**
- * Applies this functor transformation from `F` to `G`
- */
+ * Applies this functor transformation from `F` to `G`
+ */
def apply[A](fa: F[A]): G[A]
/**
- * Composes two instances of FunctionK into a new FunctionK with this
- * transformation applied last.
- */
+ * Composes two instances of FunctionK into a new FunctionK with this
+ * transformation applied last.
+ */
def compose[E[_]](f: FunctionK[E, F]): FunctionK[E, G] =
λ[FunctionK[E, G]](fa => self(f(fa)))
/**
- * Composes two instances of FunctionK into a new FunctionK with this
- * transformation applied first.
- */
+ * Composes two instances of FunctionK into a new FunctionK with this
+ * transformation applied first.
+ */
def andThen[H[_]](f: FunctionK[G, H]): FunctionK[F, H] =
f.compose(self)
/**
- * Composes two instances of FunctionK into a new FunctionK that transforms
- * a [[cats.data.EitherK]] to a single functor.
- *
- * This transformation will be used to transform left `F` values while
- * `h` will be used to transform right `H` values.
- */
+ * Composes two instances of FunctionK into a new FunctionK that transforms
+ * a [[cats.data.EitherK]] to a single functor.
+ *
+ * This transformation will be used to transform left `F` values while
+ * `h` will be used to transform right `H` values.
+ */
def or[H[_]](h: FunctionK[H, G]): FunctionK[EitherK[F, H, ?], G] =
λ[FunctionK[EitherK[F, H, ?], G]](fa => fa.fold(self, h))
@@ -66,30 +66,29 @@ trait FunctionK[F[_], G[_]] extends Serializable { self =>
object FunctionK {
/**
- * The identity transformation of `F` to `F`
- */
+ * The identity transformation of `F` to `F`
+ */
def id[F[_]]: FunctionK[F, F] = λ[FunctionK[F, F]](fa => fa)
-
/**
- * Lifts function `f` of `F[A] => G[A]` into a `FunctionK[F, G]`.
- *
- * {{{
- * def headOption[A](list: List[A]): Option[A] = list.headOption
- * val lifted: FunctionK[List, Option] = FunctionK.lift(headOption)
- * }}}
- *
- * Note: This method has a macro implementation that returns a new
- * `FunctionK` instance as follows:
- *
- * {{{
- * new FunctionK[F, G] {
- * def apply[A](fa: F[A]): G[A] = f(fa)
- * }
- * }}}
- *
- * Additionally, the type parameters on `f` must not be specified.
- */
+ * Lifts function `f` of `F[A] => G[A]` into a `FunctionK[F, G]`.
+ *
+ * {{{
+ * def headOption[A](list: List[A]): Option[A] = list.headOption
+ * val lifted: FunctionK[List, Option] = FunctionK.lift(headOption)
+ * }}}
+ *
+ * Note: This method has a macro implementation that returns a new
+ * `FunctionK` instance as follows:
+ *
+ * {{{
+ * new FunctionK[F, G] {
+ * def apply[A](fa: F[A]): G[A] = f(fa)
+ * }
+ * }}}
+ *
+ * Additionally, the type parameters on `f` must not be specified.
+ */
def lift[F[_], G[_]](f: (F[α] ⇒ G[α]) forSome { type α }): FunctionK[F, G] =
macro FunctionKMacros.lift[F, G]
@@ -100,25 +99,26 @@ private[arrow] object FunctionKMacros {
def lift[F[_], G[_]](c: Context)(
f: c.Expr[(F[α] ⇒ G[α]) forSome { type α }]
)(
- implicit evF: c.WeakTypeTag[F[_]], evG: c.WeakTypeTag[G[_]]
+ implicit evF: c.WeakTypeTag[F[_]],
+ evG: c.WeakTypeTag[G[_]]
): c.Expr[FunctionK[F, G]] =
- c.Expr[FunctionK[F, G]](new Lifter[c.type ](c).lift[F, G](f.tree))
- // ^^note: extra space after c.type to appease scalastyle
+ c.Expr[FunctionK[F, G]](new Lifter[c.type](c).lift[F, G](f.tree))
+ // ^^note: extra space after c.type to appease scalastyle
private[this] class Lifter[C <: Context](val c: C) {
import c.universe._
def lift[F[_], G[_]](tree: Tree)(
- implicit evF: c.WeakTypeTag[F[_]], evG: c.WeakTypeTag[G[_]]
+ implicit evF: c.WeakTypeTag[F[_]],
+ evG: c.WeakTypeTag[G[_]]
): Tree = unblock(tree) match {
- case q"($param) => $trans[..$typeArgs](${ arg: Ident })" if param.name == arg.name ⇒
-
+ case q"($param) => $trans[..$typeArgs](${arg: Ident})" if param.name == arg.name ⇒
typeArgs
.collect { case tt: TypeTree => tt }
.find(tt => Option(tt.original).isDefined)
- .foreach { param => c.abort(param.pos,
- s"type parameter $param must not be supplied when lifting function $trans to FunctionK")
- }
+ .foreach { param =>
+ c.abort(param.pos, s"type parameter $param must not be supplied when lifting function $trans to FunctionK")
+ }
val F = punchHole(evF.tpe)
val G = punchHole(evG.tpe)
@@ -134,7 +134,7 @@ private[arrow] object FunctionKMacros {
private[this] def unblock(tree: Tree): Tree = tree match {
case Block(Nil, expr) ⇒ expr
- case _ ⇒ tree
+ case _ ⇒ tree
}
private[this] def punchHole(tpe: Type): Tree = tpe match {
@@ -145,7 +145,7 @@ private[arrow] object FunctionKMacros {
else {
val args = typeRef.args.map {
case ref: TypeRef => rebind(ref)
- case arg => tq"$arg"
+ case arg => tq"$arg"
}
tq"${typeRef.sym}[..$args]"
}
diff --git a/core/src/main/scala/cats/data/AndThen.scala b/core/src/main/scala/cats/data/AndThen.scala
index 468382769f..57305d5ab8 100644
--- a/core/src/main/scala/cats/data/AndThen.scala
+++ b/core/src/main/scala/cats/data/AndThen.scala
@@ -4,7 +4,6 @@ package data
import java.io.Serializable
import cats.arrow.{ArrowChoice, CommutativeArrow}
-
/**
* A function type of a single input that can do function composition
* (via `andThen` and `compose`) in constant stack space with amortized
@@ -60,15 +59,14 @@ import cats.arrow.{ArrowChoice, CommutativeArrow}
* }
* }}}
*/
-sealed abstract class AndThen[-T, +R]
- extends (T => R) with Product with Serializable {
+sealed abstract class AndThen[-T, +R] extends (T => R) with Product with Serializable {
import AndThen._
final def apply(a: T): R =
runLoop(a)
- override def andThen[A](g: R => A): AndThen[T, A] = {
+ override def andThen[A](g: R => A): AndThen[T, A] =
// Fusing calls up to a certain threshold, using the fusion
// technique implemented for `cats.effect.IO#map`
this match {
@@ -77,9 +75,8 @@ sealed abstract class AndThen[-T, +R]
case _ =>
andThenF(AndThen(g))
}
- }
- override def compose[A](g: A => T): AndThen[A, R] = {
+ override def compose[A](g: A => T): AndThen[A, R] =
// Fusing calls up to a certain threshold, using the fusion
// technique implemented for `cats.effect.IO#map`
this match {
@@ -88,7 +85,6 @@ sealed abstract class AndThen[-T, +R]
case _ =>
composeF(AndThen(g))
}
- }
private def runLoop(start: T): R = {
var self: AndThen[Any, Any] = this.asInstanceOf[AndThen[Any, Any]]
@@ -112,13 +108,13 @@ sealed abstract class AndThen[-T, +R]
current.asInstanceOf[R]
}
- private final def andThenF[X](right: AndThen[R, X]): AndThen[T, X] =
+ final private def andThenF[X](right: AndThen[R, X]): AndThen[T, X] =
Concat(this, right)
- private final def composeF[X](right: AndThen[X, T]): AndThen[X, R] =
+ final private def composeF[X](right: AndThen[X, T]): AndThen[X, R] =
Concat(right, this)
// converts left-leaning to right-leaning
- protected final def rotateAccum[E](_right: AndThen[R, E]): AndThen[T, E] = {
+ final protected def rotateAccum[E](_right: AndThen[R, E]): AndThen[T, E] = {
var self: AndThen[Any, Any] = this.asInstanceOf[AndThen[Any, Any]]
var right: AndThen[Any, Any] = _right.asInstanceOf[AndThen[Any, Any]]
var continue = true
@@ -141,17 +137,16 @@ sealed abstract class AndThen[-T, +R]
}
object AndThen extends AndThenInstances0 {
+
/** Builds an [[AndThen]] reference by wrapping a plain function. */
def apply[A, B](f: A => B): AndThen[A, B] =
f match {
case ref: AndThen[A, B] @unchecked => ref
- case _ => Single(f, 0)
+ case _ => Single(f, 0)
}
- private final case class Single[-A, +B](f: A => B, index: Int)
- extends AndThen[A, B]
- private final case class Concat[-A, E, +B](left: AndThen[A, E], right: AndThen[E, B])
- extends AndThen[A, B]
+ final private case class Single[-A, +B](f: A => B, index: Int) extends AndThen[A, B]
+ final private case class Concat[-A, E, +B](left: AndThen[A, E], right: AndThen[E, B]) extends AndThen[A, B]
/**
* Establishes the maximum stack depth when fusing `andThen` or
@@ -165,10 +160,11 @@ object AndThen extends AndThenInstances0 {
* being enough to notice performance gains, but not big enough
* to be in danger of triggering a stack-overflow error.
*/
- private final val fusionMaxStackDepth = 127
+ final private val fusionMaxStackDepth = 127
}
-private[data] abstract class AndThenInstances0 extends AndThenInstances1 {
+abstract private[data] class AndThenInstances0 extends AndThenInstances1 {
+
/**
* [[cats.Monad]] instance for [[AndThen]].
*/
@@ -193,7 +189,7 @@ private[data] abstract class AndThenInstances0 extends AndThenInstances1 {
/**
* [[cats.ContravariantMonoidal]] instance for [[AndThen]].
*/
- implicit def catsDataContravariantMonoidalForAndThen[R : Monoid]: ContravariantMonoidal[AndThen[?, R]] =
+ implicit def catsDataContravariantMonoidalForAndThen[R: Monoid]: ContravariantMonoidal[AndThen[?, R]] =
new ContravariantMonoidal[AndThen[?, R]] {
// Piggybacking on the instance for Function1
private[this] val fn1 = instances.all.catsStdContravariantMonoidalForFunction1[R]
@@ -235,7 +231,8 @@ private[data] abstract class AndThenInstances0 extends AndThenInstances1 {
}
}
-private[data] abstract class AndThenInstances1 {
+abstract private[data] class AndThenInstances1 {
+
/**
* [[cats.Contravariant]] instance for [[AndThen]].
*/
diff --git a/core/src/main/scala/cats/data/Binested.scala b/core/src/main/scala/cats/data/Binested.scala
index 4dd732c11f..0f261a50ff 100644
--- a/core/src/main/scala/cats/data/Binested.scala
+++ b/core/src/main/scala/cats/data/Binested.scala
@@ -27,36 +27,45 @@ object Binested extends BinestedInstances
trait BinestedInstances extends BinestedInstances0 {
implicit def catsDataEqForBinested[F[_, _], G[_], H[_], A, B](
- implicit F: Eq[F[G[A], H[B]]]): Eq[Binested[F, G, H, A, B]] =
+ implicit F: Eq[F[G[A], H[B]]]
+ ): Eq[Binested[F, G, H, A, B]] =
Eq.by(_.value)
- implicit def catsDataProfunctorForBinested[F[_, _], G[_], H[_]](
- implicit F: Profunctor[F], G: Functor[G], H: Functor[H]): Profunctor[Binested[F, G, H, ?, ?]] =
+ implicit def catsDataProfunctorForBinested[F[_, _], G[_], H[_]](implicit F: Profunctor[F],
+ G: Functor[G],
+ H: Functor[H]): Profunctor[Binested[F, G, H, ?, ?]] =
new Profunctor[Binested[F, G, H, ?, ?]] {
def dimap[A, B, C, D](fab: Binested[F, G, H, A, B])(f: C => A)(g: B => D): Binested[F, G, H, C, D] =
Binested(F.dimap(fab.value)(G.map(_: G[C])(f))(H.map(_)(g)))
}
implicit def catsDataBitraverseForBinested[F[_, _], G[_], H[_]](
- implicit F0: Bitraverse[F], H0: Traverse[H], G0: Traverse[G]): Bitraverse[Binested[F, G, H, ?, ?]] =
+ implicit F0: Bitraverse[F],
+ H0: Traverse[H],
+ G0: Traverse[G]
+ ): Bitraverse[Binested[F, G, H, ?, ?]] =
new BinestedBitraverse[F, G, H] {
- override implicit def F: Bitraverse[F] = F0
- override implicit def G: Traverse[G] = G0
- override implicit def H: Traverse[H] = H0
+ implicit override def F: Bitraverse[F] = F0
+ implicit override def G: Traverse[G] = G0
+ implicit override def H: Traverse[H] = H0
}
}
trait BinestedInstances0 {
implicit def catsDataBifoldableForBinested[F[_, _], G[_], H[_]](
- implicit F0: Bifoldable[F], G0: Foldable[G], H0: Foldable[H]): Bifoldable[Binested[F, G, H, ?, ?]] =
+ implicit F0: Bifoldable[F],
+ G0: Foldable[G],
+ H0: Foldable[H]
+ ): Bifoldable[Binested[F, G, H, ?, ?]] =
new BinestedBifoldable[F, G, H] {
- override implicit def F: Bifoldable[F] = F0
- override implicit def G: Foldable[G] = G0
- override implicit def H: Foldable[H] = H0
+ implicit override def F: Bifoldable[F] = F0
+ implicit override def G: Foldable[G] = G0
+ implicit override def H: Foldable[H] = H0
}
- implicit def catsDataBifunctorForBinested[F[_, _], G[_], H[_]](
- implicit F: Bifunctor[F], G: Functor[G], H: Functor[H]): Bifunctor[Binested[F, G, H, ?, ?]] =
+ implicit def catsDataBifunctorForBinested[F[_, _], G[_], H[_]](implicit F: Bifunctor[F],
+ G: Functor[G],
+ H: Functor[H]): Bifunctor[Binested[F, G, H, ?, ?]] =
new Bifunctor[Binested[F, G, H, ?, ?]] {
def bimap[A, B, C, D](fab: Binested[F, G, H, A, B])(f: A => C, g: B => D): Binested[F, G, H, C, D] =
Binested(F.bimap(fab.value)(G.map(_)(f), H.map(_)(g)))
@@ -74,20 +83,23 @@ sealed abstract class BinestedBifoldable[F[_, _], G[_], H[_]] extends Bifoldable
(c, hb) => H.foldLeft(hb, c)(g)
)
-
- def bifoldRight[A, B, C](fab: Binested[F, G, H, A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ def bifoldRight[A, B, C](fab: Binested[F, G, H, A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
F.bifoldRight(fab.value, c)(
(ga, ec) => G.foldRight(ga, ec)(f),
(hb, ec) => H.foldRight(hb, ec)(g)
)
}
-sealed abstract class BinestedBitraverse[F[_, _], G[_], H[_]] extends BinestedBifoldable[F, G, H] with Bitraverse[Binested[F, G, H, ?, ?]] {
- override implicit def F: Bitraverse[F]
- override implicit def G: Traverse[G]
- override implicit def H: Traverse[H]
+sealed abstract class BinestedBitraverse[F[_, _], G[_], H[_]]
+ extends BinestedBifoldable[F, G, H]
+ with Bitraverse[Binested[F, G, H, ?, ?]] {
+ implicit override def F: Bitraverse[F]
+ implicit override def G: Traverse[G]
+ implicit override def H: Traverse[H]
- def bitraverse[I[_], A, B, C, D](fab: Binested[F, G, H, A, B])(f: A => I[C], g: B => I[D])(implicit I: Applicative[I]): I[Binested[F, G, H, C, D]] = {
+ def bitraverse[I[_], A, B, C, D](
+ fab: Binested[F, G, H, A, B]
+ )(f: A => I[C], g: B => I[D])(implicit I: Applicative[I]): I[Binested[F, G, H, C, D]] =
I.map(F.bitraverse(fab.value)(G.traverse(_)(f), H.traverse(_)(g)))(Binested(_))
- }
}
diff --git a/core/src/main/scala/cats/data/Chain.scala b/core/src/main/scala/cats/data/Chain.scala
index 904856852d..220562b7d5 100644
--- a/core/src/main/scala/cats/data/Chain.scala
+++ b/core/src/main/scala/cats/data/Chain.scala
@@ -97,7 +97,6 @@ sealed abstract class Chain[+A] {
final def map[B](f: A => B): Chain[B] =
fromSeq(iterator.map(f).toVector)
-
/**
* Applies the supplied function to each element and returns a new Chain from the concatenated results
*/
@@ -227,7 +226,7 @@ sealed abstract class Chain[+A] {
val k = f(elem)
m.get(k) match {
- case None => m += ((k, NonEmptyChain.one(elem))); ()
+ case None => m += ((k, NonEmptyChain.one(elem))); ()
case Some(cat) => m = m.updated(k, cat :+ elem)
}
}
@@ -240,7 +239,6 @@ sealed abstract class Chain[+A] {
def reverse: Chain[A] =
fromSeq(reverseIterator.toVector)
-
/**
* Yields to Some(a, Chain[A]) with `a` removed where `f` holds for the first time,
* otherwise yields None, if `a` was not found
@@ -262,13 +260,15 @@ sealed abstract class Chain[+A] {
/**
* Applies the supplied function to each element, left to right.
*/
- private final def foreach(f: A => Unit): Unit = foreachUntil { a => f(a); false }
+ final private def foreach(f: A => Unit): Unit = foreachUntil { a =>
+ f(a); false
+ }
/**
* Applies the supplied function to each element, left to right, but stops when true is returned
*/
// scalastyle:off null return cyclomatic.complexity
- private final def foreachUntil(f: A => Boolean): Unit = {
+ final private def foreachUntil(f: A => Boolean): Unit = {
var c: Chain[A] = this
val rights = new collection.mutable.ArrayBuffer[Chain[A]]
@@ -300,15 +300,14 @@ sealed abstract class Chain[+A] {
}
// scalastyle:on null return cyclomatic.complexity
-
final def iterator: Iterator[A] = this match {
case Wrap(seq) => seq.iterator
- case _ => new ChainIterator[A](this)
+ case _ => new ChainIterator[A](this)
}
final def reverseIterator: Iterator[A] = this match {
case Wrap(seq) => seq.reverseIterator
- case _ => new ChainReverseIterator[A](this)
+ case _ => new ChainReverseIterator[A](this)
}
/**
@@ -317,7 +316,7 @@ sealed abstract class Chain[+A] {
final def length: Long = {
val iter = iterator
var i: Long = 0
- while(iter.hasNext) { i += 1; iter.next; }
+ while (iter.hasNext) { i += 1; iter.next; }
i
}
@@ -326,7 +325,6 @@ sealed abstract class Chain[+A] {
*/
final def size: Long = length
-
/**
* Converts to a list.
*/
@@ -365,8 +363,7 @@ sealed abstract class Chain[+A] {
var first = true
foreach { a =>
- if (first) { builder ++= AA.show(a); first = false }
- else builder ++= ", " + AA.show(a)
+ if (first) { builder ++= AA.show(a); first = false } else builder ++= ", " + AA.show(a)
()
}
builder += ')'
@@ -378,20 +375,19 @@ sealed abstract class Chain[+A] {
object Chain extends ChainInstances {
- private val sentinel: Function1[Any, Any] = new scala.runtime.AbstractFunction1[Any, Any]{ def apply(a: Any) = this }
+ private val sentinel: Function1[Any, Any] = new scala.runtime.AbstractFunction1[Any, Any] { def apply(a: Any) = this }
- private[data] final case object Empty extends Chain[Nothing] {
+ final private[data] case object Empty extends Chain[Nothing] {
def isEmpty: Boolean = true
}
- private[data] final case class Singleton[A](a: A) extends Chain[A] {
+ final private[data] case class Singleton[A](a: A) extends Chain[A] {
def isEmpty: Boolean = false
}
- private[data] final case class Append[A](left: Chain[A], right: Chain[A])
- extends Chain[A] {
+ final private[data] case class Append[A](left: Chain[A], right: Chain[A]) extends Chain[A] {
def isEmpty: Boolean =
false // b/c `concat` constructor doesn't allow either branch to be empty
}
- private[data] final case class Wrap[A](seq: Seq[A]) extends Chain[A] {
+ final private[data] case class Wrap[A](seq: Seq[A]) extends Chain[A] {
override def isEmpty: Boolean =
false // b/c `fromSeq` constructor doesn't allow either branch to be empty
}
@@ -463,7 +459,6 @@ object Chain extends ChainInstances {
}
// scalastyle:on null
-
// scalastyle:off null
private class ChainReverseIterator[A](self: Chain[A]) extends Iterator[A] {
private[this] var c: Chain[A] = if (self.isEmpty) null else self
@@ -508,14 +503,14 @@ object Chain extends ChainInstances {
// scalastyle:on null
}
-private[data] sealed abstract class ChainInstances extends ChainInstances1 {
+sealed abstract private[data] class ChainInstances extends ChainInstances1 {
implicit def catsDataMonoidForChain[A]: Monoid[Chain[A]] = new Monoid[Chain[A]] {
def empty: Chain[A] = Chain.nil
def combine(c: Chain[A], c2: Chain[A]): Chain[A] = Chain.concat(c, c2)
}
- implicit val catsDataInstancesForChain: Traverse[Chain] with Alternative[Chain]
- with Monad[Chain] with CoflatMap[Chain] =
+ implicit val catsDataInstancesForChain
+ : Traverse[Chain] with Alternative[Chain] with Monad[Chain] with CoflatMap[Chain] =
new Traverse[Chain] with Alternative[Chain] with Monad[Chain] with CoflatMap[Chain] {
def foldLeft[A, B](fa: Chain[A], b: B)(f: (B, A) => B): B =
fa.foldLeft(b)(f)
@@ -536,7 +531,7 @@ private[data] sealed abstract class ChainInstances extends ChainInstances1 {
@tailrec def go(as: Chain[A], res: ListBuffer[B]): Chain[B] =
as.uncons match {
case Some((_, t)) => go(t, res += f(as))
- case None => Chain.fromSeq(res.result())
+ case None => Chain.fromSeq(res.result())
}
go(fa, ListBuffer.empty)
@@ -581,20 +576,22 @@ private[data] sealed abstract class ChainInstances extends ChainInstances1 {
implicit def catsDataOrderForChain[A](implicit A0: Order[A]): Order[Chain[A]] =
new Order[Chain[A]] with ChainPartialOrder[A] {
implicit def A: PartialOrder[A] = A0
- def compare(x: Chain[A], y: Chain[A]): Int = if (x eq y) 0 else {
- val iterX = x.iterator
- val iterY = y.iterator
- while (iterX.hasNext && iterY.hasNext) {
- val n = A0.compare(iterX.next, iterY.next)
- // scalastyle:off return
- if (n != 0) return n
- // scalastyle:on return
- }
+ def compare(x: Chain[A], y: Chain[A]): Int =
+ if (x eq y) 0
+ else {
+ val iterX = x.iterator
+ val iterY = y.iterator
+ while (iterX.hasNext && iterY.hasNext) {
+ val n = A0.compare(iterX.next, iterY.next)
+ // scalastyle:off return
+ if (n != 0) return n
+ // scalastyle:on return
+ }
- if (iterX.hasNext) 1
- else if (iterY.hasNext) -1
- else 0
- }
+ if (iterX.hasNext) 1
+ else if (iterY.hasNext) -1
+ else 0
+ }
}
implicit val catsDataTraverseFilterForChain: TraverseFilter[Chain] = new TraverseFilter[Chain] {
@@ -614,20 +611,18 @@ private[data] sealed abstract class ChainInstances extends ChainInstances1 {
)
override def filterA[G[_], A](fa: Chain[A])(f: A => G[Boolean])(implicit G: Applicative[G]): G[Chain[A]] =
- fa.foldRight(G.pure(Chain.empty[A]))(
- (a, gca) =>
- G.map2(f(a), gca)((b, chain) => if (b) a +: chain else chain))
+ fa.foldRight(G.pure(Chain.empty[A]))((a, gca) => G.map2(f(a), gca)((b, chain) => if (b) a +: chain else chain))
}
}
-private[data] sealed abstract class ChainInstances1 extends ChainInstances2 {
+sealed abstract private[data] class ChainInstances1 extends ChainInstances2 {
implicit def catsDataPartialOrderForChain[A](implicit A0: PartialOrder[A]): PartialOrder[Chain[A]] =
new ChainPartialOrder[A] { implicit def A: PartialOrder[A] = A0 }
}
-private[data] sealed abstract class ChainInstances2 {
+sealed abstract private[data] class ChainInstances2 {
implicit def catsDataEqForChain[A](implicit A: Eq[A]): Eq[Chain[A]] = new Eq[Chain[A]] {
def eqv(x: Chain[A], y: Chain[A]): Boolean = x === y
}
@@ -636,20 +631,22 @@ private[data] sealed abstract class ChainInstances2 {
private[data] trait ChainPartialOrder[A] extends PartialOrder[Chain[A]] {
implicit def A: PartialOrder[A]
- override def partialCompare(x: Chain[A], y: Chain[A]): Double = if (x eq y) 0.0 else {
- val iterX = x.iterator
- val iterY = y.iterator
- while (iterX.hasNext && iterY.hasNext) {
- val n = A.partialCompare(iterX.next, iterY.next)
- // scalastyle:off return
- if (n != 0.0) return n
- // scalastyle:on return
- }
+ override def partialCompare(x: Chain[A], y: Chain[A]): Double =
+ if (x eq y) 0.0
+ else {
+ val iterX = x.iterator
+ val iterY = y.iterator
+ while (iterX.hasNext && iterY.hasNext) {
+ val n = A.partialCompare(iterX.next, iterY.next)
+ // scalastyle:off return
+ if (n != 0.0) return n
+ // scalastyle:on return
+ }
- if (iterX.hasNext) 1.0
- else if (iterY.hasNext) -1.0
- else 0.0
- }
+ if (iterX.hasNext) 1.0
+ else if (iterY.hasNext) -1.0
+ else 0.0
+ }
override def eqv(x: Chain[A], y: Chain[A]): Boolean = x === y
}
diff --git a/core/src/main/scala/cats/data/Cokleisli.scala b/core/src/main/scala/cats/data/Cokleisli.scala
index 6f64e9b8d6..d2057e7f35 100644
--- a/core/src/main/scala/cats/data/Cokleisli.scala
+++ b/core/src/main/scala/cats/data/Cokleisli.scala
@@ -12,48 +12,48 @@ import scala.annotation.tailrec
final case class Cokleisli[F[_], A, B](run: F[A] => B) { self =>
/**
- * Example:
- * {{{
- * scala> import cats._, data._
- * scala> val f = Cokleisli((xs: NonEmptyList[Int]) => xs.reverse.head)
- * scala> def before(x: Double) = x.toInt
- * scala> def after(x: Int) = x.toString
- * scala> f.dimap(before)(after).run(NonEmptyList.of(1.0,2.0))
- * res0: String = 2
- * }}}
- */
+ * Example:
+ * {{{
+ * scala> import cats._, data._
+ * scala> val f = Cokleisli((xs: NonEmptyList[Int]) => xs.reverse.head)
+ * scala> def before(x: Double) = x.toInt
+ * scala> def after(x: Int) = x.toString
+ * scala> f.dimap(before)(after).run(NonEmptyList.of(1.0,2.0))
+ * res0: String = 2
+ * }}}
+ */
def dimap[C, D](f: C => A)(g: B => D)(implicit F: Functor[F]): Cokleisli[F, C, D] =
Cokleisli(fc => g(run(F.map(fc)(f))))
/**
- * Example:
- * {{{
- * scala> import cats._, data._, implicits._
- * scala> val f = Cokleisli((xs: NonEmptyList[Int]) => xs.reverse.head)
- * scala> def before(x: Double) = x.toInt
- * scala> def after(x: Int) = x.toString
- * scala> f.lmap(before).rmap(after).run(NonEmptyList.of(1.0,2.0))
- * res0: String = 2
- * }}}
- */
+ * Example:
+ * {{{
+ * scala> import cats._, data._, implicits._
+ * scala> val f = Cokleisli((xs: NonEmptyList[Int]) => xs.reverse.head)
+ * scala> def before(x: Double) = x.toInt
+ * scala> def after(x: Int) = x.toString
+ * scala> f.lmap(before).rmap(after).run(NonEmptyList.of(1.0,2.0))
+ * res0: String = 2
+ * }}}
+ */
def lmap[C](f: C => A)(implicit F: Functor[F]): Cokleisli[F, C, B] =
Cokleisli(fc => run(F.map(fc)(f)))
def map[C](f: B => C): Cokleisli[F, A, C] =
- Cokleisli(f compose run)
+ Cokleisli(f.compose(run))
/**
- * Example:
- * {{{
- * scala> import cats._, data._
- * scala> val sum = Cokleisli((xs: NonEmptyList[Int]) => xs.reduceLeft(_ + _))
- *
- * scala> sum.contramapValue((xs: NonEmptyList[String]) => xs.map(_.toInt)).run(NonEmptyList.of("1","2","3"))
- * res4: Int = 6
- * }}}
- */
+ * Example:
+ * {{{
+ * scala> import cats._, data._
+ * scala> val sum = Cokleisli((xs: NonEmptyList[Int]) => xs.reduceLeft(_ + _))
+ *
+ * scala> sum.contramapValue((xs: NonEmptyList[String]) => xs.map(_.toInt)).run(NonEmptyList.of("1","2","3"))
+ * res4: Int = 6
+ * }}}
+ */
def contramapValue[C](f: F[C] => F[A]): Cokleisli[F, C, B] =
- Cokleisli(run compose f)
+ Cokleisli(run.compose(f))
def flatMap[C](f: B => Cokleisli[F, A, C]): Cokleisli[F, A, C] =
Cokleisli(fa => f(self.run(fa)).run(fa))
@@ -62,7 +62,7 @@ final case class Cokleisli[F[_], A, B](run: F[A] => B) { self =>
Cokleisli(fc => run(F.coflatMap(fc)(c.run)))
def andThen[C](c: Cokleisli[F, B, C])(implicit F: CoflatMap[F]): Cokleisli[F, A, C] =
- c compose this
+ c.compose(this)
def first[C](implicit F: Comonad[F]): Cokleisli[F, (A, C), (B, C)] =
Cokleisli(fac => run(F.map(fac)(_._1)) -> F.extract(F.map(fac)(_._2)))
@@ -76,12 +76,12 @@ object Cokleisli extends CokleisliInstances {
Cokleisli(_ => x)
}
-private[data] sealed abstract class CokleisliInstances extends CokleisliInstances0 {
+sealed abstract private[data] class CokleisliInstances extends CokleisliInstances0 {
implicit val catsDataCommutativeArrowForCokleisliId: CommutativeArrow[Cokleisli[Id, ?, ?]] =
new CokleisliArrow[Id] with CommutativeArrow[Cokleisli[Id, ?, ?]] {
def F: Comonad[Id] = Comonad[Id]
- }
+ }
implicit def catsDataMonadForCokleisli[F[_], A]: Monad[Cokleisli[F, A, ?]] =
new CokleisliMonad[F, A]
@@ -90,12 +90,12 @@ private[data] sealed abstract class CokleisliInstances extends CokleisliInstance
Category[Cokleisli[F, ?, ?]].algebraK
}
-private[data] sealed abstract class CokleisliInstances0 extends CokleisliInstances1 {
+sealed abstract private[data] class CokleisliInstances0 extends CokleisliInstances1 {
implicit def catsDataArrowForCokleisli[F[_]](implicit ev: Comonad[F]): Arrow[Cokleisli[F, ?, ?]] =
new CokleisliArrow[F] { def F: Comonad[F] = ev }
}
-private[data] sealed abstract class CokleisliInstances1 {
+sealed abstract private[data] class CokleisliInstances1 {
implicit def catsDataComposeForCokleisli[F[_]](implicit ev: CoflatMap[F]): Compose[Cokleisli[F, ?, ?]] =
new CokleisliCompose[F] { def F: CoflatMap[F] = ev }
@@ -111,8 +111,6 @@ private[data] sealed abstract class CokleisliInstances1 {
}
}
-
-
private[data] class CokleisliMonad[F[_], A] extends Monad[Cokleisli[F, A, ?]] {
def pure[B](x: B): Cokleisli[F, A, B] =
@@ -136,7 +134,10 @@ private[data] class CokleisliMonad[F[_], A] extends Monad[Cokleisli[F, A, ?]] {
}
-private trait CokleisliArrow[F[_]] extends Arrow[Cokleisli[F, ?, ?]] with CokleisliCompose[F] with CokleisliProfunctor[F] {
+private trait CokleisliArrow[F[_]]
+ extends Arrow[Cokleisli[F, ?, ?]]
+ with CokleisliCompose[F]
+ with CokleisliProfunctor[F] {
implicit def F: Comonad[F]
def lift[A, B](f: A => B): Cokleisli[F, A, B] =
diff --git a/core/src/main/scala/cats/data/Const.scala b/core/src/main/scala/cats/data/Const.scala
index 61e513027a..107e0352dc 100644
--- a/core/src/main/scala/cats/data/Const.scala
+++ b/core/src/main/scala/cats/data/Const.scala
@@ -9,6 +9,7 @@ import cats.kernel.{CommutativeMonoid, CommutativeSemigroup}
* [[Const]] can be seen as a type level version of `Function.const[A, B]: A => B => A`
*/
final case class Const[A, B](getConst: A) {
+
/**
* changes the type of the second type parameter
*/
@@ -41,7 +42,7 @@ object Const extends ConstInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class OfPartiallyApplied[B](val dummy: Boolean = true ) extends AnyVal {
+ final private[data] class OfPartiallyApplied[B](val dummy: Boolean = true) extends AnyVal {
def apply[A](a: A): Const[A, B] = Const(a)
}
@@ -56,10 +57,10 @@ object Const extends ConstInstances {
def of[B]: OfPartiallyApplied[B] = new OfPartiallyApplied
}
-private[data] sealed abstract class ConstInstances extends ConstInstances0 {
+sealed abstract private[data] class ConstInstances extends ConstInstances0 {
implicit def catsDataOrderForConst[A: Order, B]: Order[Const[A, B]] = new Order[Const[A, B]] {
def compare(x: Const[A, B], y: Const[A, B]): Int =
- x compare y
+ x.compare(y)
}
implicit def catsDataShowForConst[A: Show, B]: Show[Const[A, B]] = new Show[Const[A, B]] {
@@ -89,7 +90,9 @@ private[data] sealed abstract class ConstInstances extends ConstInstances0 {
override def filter[A](fa: Const[C, A])(f: (A) => Boolean): Const[C, A] = fa.retag
- def traverseFilter[G[_], A, B](fa: Const[C, A])(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[Const[C, B]] =
+ def traverseFilter[G[_], A, B](
+ fa: Const[C, A]
+ )(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[Const[C, B]] =
G.pure(fa.retag[B])
override def filterA[G[_], A](fa: Const[C, A])(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[Const[C, A]] =
@@ -98,12 +101,12 @@ private[data] sealed abstract class ConstInstances extends ConstInstances0 {
val traverse: Traverse[Const[C, ?]] = Const.catsDataTraverseForConst[C]
}
- implicit def catsDataMonoidForConst[A: Monoid, B]: Monoid[Const[A, B]] = new Monoid[Const[A, B]]{
+ implicit def catsDataMonoidForConst[A: Monoid, B]: Monoid[Const[A, B]] = new Monoid[Const[A, B]] {
def empty: Const[A, B] =
Const.empty
def combine(x: Const[A, B], y: Const[A, B]): Const[A, B] =
- x combine y
+ x.combine(y)
}
implicit val catsDataBifoldableForConst: Bifoldable[Const] =
@@ -111,12 +114,13 @@ private[data] sealed abstract class ConstInstances extends ConstInstances0 {
def bifoldLeft[A, B, C](fab: Const[A, B], c: C)(f: (C, A) => C, g: (C, B) => C): C =
f(c, fab.getConst)
- def bifoldRight[A, B, C](fab: Const[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ def bifoldRight[A, B, C](fab: Const[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
f(fab.getConst, c)
}
}
-private[data] sealed abstract class ConstInstances0 extends ConstInstances1 {
+sealed abstract private[data] class ConstInstances0 extends ConstInstances1 {
implicit def catsDataContravariantMonoidalForConst[D: Monoid]: ContravariantMonoidal[Const[D, ?]] =
new ContravariantMonoidal[Const[D, ?]] {
@@ -124,35 +128,38 @@ private[data] sealed abstract class ConstInstances0 extends ConstInstances1 {
override def contramap[A, B](fa: Const[D, A])(f: B => A): Const[D, B] =
fa.retag[B]
override def product[A, B](fa: Const[D, A], fb: Const[D, B]): Const[D, (A, B)] =
- fa.retag[(A, B)] combine fb.retag[(A, B)]
+ fa.retag[(A, B)].combine(fb.retag[(A, B)])
}
- implicit def catsDataCommutativeApplicativeForConst[C](implicit C: CommutativeMonoid[C]): CommutativeApplicative[Const[C, ?]] =
+ implicit def catsDataCommutativeApplicativeForConst[C](
+ implicit C: CommutativeMonoid[C]
+ ): CommutativeApplicative[Const[C, ?]] =
new ConstApplicative[C] with CommutativeApplicative[Const[C, ?]] { val C0: CommutativeMonoid[C] = C }
}
-private[data] sealed abstract class ConstInstances1 extends ConstInstances2 {
+sealed abstract private[data] class ConstInstances1 extends ConstInstances2 {
implicit def catsDataCommutativeApplyForConst[C](implicit C: CommutativeSemigroup[C]): CommutativeApply[Const[C, ?]] =
new ConstApply[C] with CommutativeApply[Const[C, ?]] { val C0: CommutativeSemigroup[C] = C }
}
-private[data] sealed abstract class ConstInstances2 extends ConstInstances3 {
+sealed abstract private[data] class ConstInstances2 extends ConstInstances3 {
implicit def catsDataSemigroupForConst[A: Semigroup, B]: Semigroup[Const[A, B]] = new Semigroup[Const[A, B]] {
- def combine(x: Const[A, B], y: Const[A, B]): Const[A, B] = x combine y
+ def combine(x: Const[A, B], y: Const[A, B]): Const[A, B] = x.combine(y)
}
- implicit def catsDataPartialOrderForConst[A: PartialOrder, B]: PartialOrder[Const[A, B]] = new PartialOrder[Const[A, B]]{
- def partialCompare(x: Const[A, B], y: Const[A, B]): Double =
- x partialCompare y
- }
+ implicit def catsDataPartialOrderForConst[A: PartialOrder, B]: PartialOrder[Const[A, B]] =
+ new PartialOrder[Const[A, B]] {
+ def partialCompare(x: Const[A, B], y: Const[A, B]): Double =
+ x.partialCompare(y)
+ }
implicit def catsDataApplicativeForConst[C](implicit C: Monoid[C]): Applicative[Const[C, ?]] =
new ConstApplicative[C] { val C0: Monoid[C] = C }
}
-private[data] sealed abstract class ConstInstances3 extends ConstInstances4 {
+sealed abstract private[data] class ConstInstances3 extends ConstInstances4 {
implicit def catsDataEqForConst[A: Eq, B]: Eq[Const[A, B]] = new Eq[Const[A, B]] {
def eqv(x: Const[A, B], y: Const[A, B]): Boolean =
@@ -163,37 +170,37 @@ private[data] sealed abstract class ConstInstances3 extends ConstInstances4 {
new ConstApply[C] { val C0: Semigroup[C] = C }
}
-private[data] sealed abstract class ConstInstances4 {
+sealed abstract private[data] class ConstInstances4 {
implicit def catsDataFunctorForConst[C]: Functor[Const[C, ?]] =
- new ConstFunctor[C]{}
+ new ConstFunctor[C] {}
implicit def catsDataContravariantForConst[C]: Contravariant[Const[C, ?]] =
new ConstContravariant[C] {}
}
-private[data] sealed trait ConstFunctor[C] extends Functor[Const[C, ?]] {
+sealed private[data] trait ConstFunctor[C] extends Functor[Const[C, ?]] {
def map[A, B](fa: Const[C, A])(f: A => B): Const[C, B] =
fa.retag[B]
}
-private[data] sealed trait ConstContravariant[C] extends Contravariant[Const[C, ?]] {
+sealed private[data] trait ConstContravariant[C] extends Contravariant[Const[C, ?]] {
override def contramap[A, B](fa: Const[C, A])(f: B => A): Const[C, B] =
fa.retag[B]
}
-private[data] sealed trait ConstApply[C] extends ConstFunctor[C] with Apply[Const[C, ?]] {
+sealed private[data] trait ConstApply[C] extends ConstFunctor[C] with Apply[Const[C, ?]] {
implicit def C0: Semigroup[C]
def ap[A, B](f: Const[C, A => B])(fa: Const[C, A]): Const[C, B] =
- f.retag[B] combine fa.retag[B]
+ f.retag[B].combine(fa.retag[B])
override def product[A, B](fa: Const[C, A], fb: Const[C, B]): Const[C, (A, B)] =
- fa.retag[(A, B)] combine fb.retag[(A, B)]
+ fa.retag[(A, B)].combine(fb.retag[(A, B)])
}
-private[data] sealed trait ConstApplicative[C] extends ConstApply[C] with Applicative[Const[C, ?]] {
+sealed private[data] trait ConstApplicative[C] extends ConstApply[C] with Applicative[Const[C, ?]] {
implicit def C0: Monoid[C]
diff --git a/core/src/main/scala/cats/data/EitherK.scala b/core/src/main/scala/cats/data/EitherK.scala
index 6872e87604..9f3d1b2105 100644
--- a/core/src/main/scala/cats/data/EitherK.scala
+++ b/core/src/main/scala/cats/data/EitherK.scala
@@ -28,10 +28,7 @@ final case class EitherK[F[_], G[_], A](run: Either[F[A], G[A]]) {
)
def coflatten(implicit F: CoflatMap[F], G: CoflatMap[G]): EitherK[F, G, EitherK[F, G, A]] =
- EitherK(run.bimap(
- x => F.coflatMap(x)(a => leftc(a))
- , x => G.coflatMap(x)(a => rightc(a)))
- )
+ EitherK(run.bimap(x => F.coflatMap(x)(a => leftc(a)), x => G.coflatMap(x)(a => rightc(a))))
def extract(implicit F: Comonad[F], G: Comonad[G]): A =
run.fold(F.extract, G.extract)
@@ -50,8 +47,8 @@ final case class EitherK[F[_], G[_], A](run: Either[F[A], G[A]]) {
def traverse[X[_], B](g: A => X[B])(implicit F: Traverse[F], G: Traverse[G], A: Applicative[X]): X[EitherK[F, G, B]] =
run.fold(
- x => A.map(F.traverse(x)(g))(leftc(_))
- , x => A.map(G.traverse(x)(g))(rightc(_))
+ x => A.map(F.traverse(x)(g))(leftc(_)),
+ x => A.map(G.traverse(x)(g))(rightc(_))
)
def isLeft: Boolean =
@@ -108,19 +105,21 @@ object EitherK extends EitherKInstances {
def right[F[_]]: EitherKRight[F] = new EitherKRight[F]
}
-private[data] sealed abstract class EitherKInstances3 {
+sealed abstract private[data] class EitherKInstances3 {
implicit def catsDataEqForEitherK[F[_], G[_], A](implicit E: Eq[Either[F[A], G[A]]]): Eq[EitherK[F, G, A]] =
Eq.by(_.run)
- implicit def catsDataFunctorForEitherK[F[_], G[_]](implicit F0: Functor[F], G0: Functor[G]): Functor[EitherK[F, G, ?]] =
+ implicit def catsDataFunctorForEitherK[F[_], G[_]](implicit F0: Functor[F],
+ G0: Functor[G]): Functor[EitherK[F, G, ?]] =
new EitherKFunctor[F, G] {
implicit def F: Functor[F] = F0
implicit def G: Functor[G] = G0
}
- implicit def catsDataFoldableForEitherK[F[_], G[_]](implicit F0: Foldable[F], G0: Foldable[G]): Foldable[EitherK[F, G, ?]] =
+ implicit def catsDataFoldableForEitherK[F[_], G[_]](implicit F0: Foldable[F],
+ G0: Foldable[G]): Foldable[EitherK[F, G, ?]] =
new EitherKFoldable[F, G] {
implicit def F: Foldable[F] = F0
@@ -128,9 +127,10 @@ private[data] sealed abstract class EitherKInstances3 {
}
}
-private[data] sealed abstract class EitherKInstances2 extends EitherKInstances3 {
+sealed abstract private[data] class EitherKInstances2 extends EitherKInstances3 {
- implicit def catsDataContravariantForEitherK[F[_], G[_]](implicit F0: Contravariant[F], G0: Contravariant[G]): Contravariant[EitherK[F, G, ?]] =
+ implicit def catsDataContravariantForEitherK[F[_], G[_]](implicit F0: Contravariant[F],
+ G0: Contravariant[G]): Contravariant[EitherK[F, G, ?]] =
new EitherKContravariant[F, G] {
implicit def F: Contravariant[F] = F0
@@ -138,8 +138,9 @@ private[data] sealed abstract class EitherKInstances2 extends EitherKInstances3
}
}
-private[data] sealed abstract class EitherKInstances1 extends EitherKInstances2 {
- implicit def catsDataCoflatMapForEitherK[F[_], G[_]](implicit F0: CoflatMap[F], G0: CoflatMap[G]): CoflatMap[EitherK[F, G, ?]] =
+sealed abstract private[data] class EitherKInstances1 extends EitherKInstances2 {
+ implicit def catsDataCoflatMapForEitherK[F[_], G[_]](implicit F0: CoflatMap[F],
+ G0: CoflatMap[G]): CoflatMap[EitherK[F, G, ?]] =
new EitherKCoflatMap[F, G] with EitherKFunctor[F, G] {
implicit def F: CoflatMap[F] = F0
@@ -147,8 +148,9 @@ private[data] sealed abstract class EitherKInstances1 extends EitherKInstances2
}
}
-private[data] sealed abstract class EitherKInstances0 extends EitherKInstances1 {
- implicit def catsDataTraverseForEitherK[F[_], G[_]](implicit F0: Traverse[F], G0: Traverse[G]): Traverse[EitherK[F, G, ?]] =
+sealed abstract private[data] class EitherKInstances0 extends EitherKInstances1 {
+ implicit def catsDataTraverseForEitherK[F[_], G[_]](implicit F0: Traverse[F],
+ G0: Traverse[G]): Traverse[EitherK[F, G, ?]] =
new EitherKTraverse[F, G] with EitherKFunctor[F, G] {
implicit def F: Traverse[F] = F0
@@ -156,9 +158,10 @@ private[data] sealed abstract class EitherKInstances0 extends EitherKInstances1
}
}
-private[data] sealed abstract class EitherKInstances extends EitherKInstances0 {
+sealed abstract private[data] class EitherKInstances extends EitherKInstances0 {
- implicit def catsDataComonadForEitherK[F[_], G[_]](implicit F0: Comonad[F], G0: Comonad[G]): Comonad[EitherK[F, G, ?]] =
+ implicit def catsDataComonadForEitherK[F[_], G[_]](implicit F0: Comonad[F],
+ G0: Comonad[G]): Comonad[EitherK[F, G, ?]] =
new EitherKComonad[F, G] with EitherKFunctor[F, G] {
implicit def F: Comonad[F] = F0
@@ -172,7 +175,7 @@ private[data] trait EitherKFunctor[F[_], G[_]] extends Functor[EitherK[F, G, ?]]
implicit def G: Functor[G]
override def map[A, B](a: EitherK[F, G, A])(f: A => B): EitherK[F, G, B] =
- a map f
+ a.map(f)
}
private[data] trait EitherKContravariant[F[_], G[_]] extends Contravariant[EitherK[F, G, ?]] {
@@ -181,7 +184,7 @@ private[data] trait EitherKContravariant[F[_], G[_]] extends Contravariant[Eithe
implicit def G: Contravariant[G]
def contramap[A, B](a: EitherK[F, G, A])(f: B => A): EitherK[F, G, B] =
- a contramap f
+ a.contramap(f)
}
private[data] trait EitherKFoldable[F[_], G[_]] extends Foldable[EitherK[F, G, ?]] {
@@ -202,7 +205,7 @@ private[data] trait EitherKFoldable[F[_], G[_]] extends Foldable[EitherK[F, G, ?
fa.run.fold(F.get(_)(idx), G.get(_)(idx))
override def foldMap[A, B](fa: EitherK[F, G, A])(f: A => B)(implicit M: Monoid[B]): B =
- fa foldMap f
+ fa.foldMap(f)
}
private[data] trait EitherKTraverse[F[_], G[_]] extends EitherKFoldable[F, G] with Traverse[EitherK[F, G, ?]] {
@@ -211,10 +214,10 @@ private[data] trait EitherKTraverse[F[_], G[_]] extends EitherKFoldable[F, G] wi
implicit def G: Traverse[G]
override def map[A, B](a: EitherK[F, G, A])(f: A => B): EitherK[F, G, B] =
- a map f
+ a.map(f)
- override def traverse[X[_] : Applicative, A, B](fa: EitherK[F, G, A])(f: A => X[B]): X[EitherK[F, G, B]] =
- fa traverse f
+ override def traverse[X[_]: Applicative, A, B](fa: EitherK[F, G, A])(f: A => X[B]): X[EitherK[F, G, B]] =
+ fa.traverse(f)
}
private[data] trait EitherKCoflatMap[F[_], G[_]] extends CoflatMap[EitherK[F, G, ?]] {
@@ -223,10 +226,10 @@ private[data] trait EitherKCoflatMap[F[_], G[_]] extends CoflatMap[EitherK[F, G,
implicit def G: CoflatMap[G]
def map[A, B](a: EitherK[F, G, A])(f: A => B): EitherK[F, G, B] =
- a map f
+ a.map(f)
def coflatMap[A, B](a: EitherK[F, G, A])(f: EitherK[F, G, A] => B): EitherK[F, G, B] =
- a coflatMap f
+ a.coflatMap(f)
override def coflatten[A](fa: EitherK[F, G, A]): EitherK[F, G, EitherK[F, G, A]] =
fa.coflatten
diff --git a/core/src/main/scala/cats/data/EitherT.scala b/core/src/main/scala/cats/data/EitherT.scala
index 7dc39d170a..842d1fda85 100644
--- a/core/src/main/scala/cats/data/EitherT.scala
+++ b/core/src/main/scala/cats/data/EitherT.scala
@@ -23,19 +23,17 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def getOrElse[BB >: B](default: => BB)(implicit F: Functor[F]): F[BB] = F.map(value)(_.getOrElse(default))
- def getOrElseF[BB >: B](default: => F[BB])(implicit F: Monad[F]): F[BB] = {
+ def getOrElseF[BB >: B](default: => F[BB])(implicit F: Monad[F]): F[BB] =
F.flatMap(value) {
- case Left(_) => default
+ case Left(_) => default
case Right(b) => F.pure(b)
}
- }
- def orElse[AA, BB >: B](default: => EitherT[F, AA, BB])(implicit F: Monad[F]): EitherT[F, AA, BB] = {
+ def orElse[AA, BB >: B](default: => EitherT[F, AA, BB])(implicit F: Monad[F]): EitherT[F, AA, BB] =
EitherT(F.flatMap(value) {
- case Left(_) => default.value
+ case Left(_) => default.value
case r @ Right(_) => F.pure(r.leftCast)
})
- }
def recover(pf: PartialFunction[A, B])(implicit F: Functor[F]): EitherT[F, A, B] =
EitherT(F.map(value)(_.recover(pf)))
@@ -43,17 +41,16 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def recoverWith(pf: PartialFunction[A, EitherT[F, A, B]])(implicit F: Monad[F]): EitherT[F, A, B] =
EitherT(F.flatMap(value) {
case Left(a) if pf.isDefinedAt(a) => pf(a).value
- case other => F.pure(other)
+ case other => F.pure(other)
})
def valueOr[BB >: B](f: A => BB)(implicit F: Functor[F]): F[BB] = fold(f, identity)
- def valueOrF[BB >: B](f: A => F[BB])(implicit F: Monad[F]): F[BB] = {
- F.flatMap(value){
- case Left(a) => f(a)
- case Right(b) => F.pure(b)
- }
- }
+ def valueOrF[BB >: B](f: A => F[BB])(implicit F: Monad[F]): F[BB] =
+ F.flatMap(value) {
+ case Left(a) => f(a)
+ case Right(b) => F.pure(b)
+ }
def forall(f: B => Boolean)(implicit F: Functor[F]): F[Boolean] = F.map(value)(_.forall(f))
@@ -73,9 +70,11 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def collectRight(implicit FA: Alternative[F], FM: Monad[F]): F[B] =
FM.flatMap(value)(_.to[F])
- def bimap[C, D](fa: A => C, fb: B => D)(implicit F: Functor[F]): EitherT[F, C, D] = EitherT(F.map(value)(_.bimap(fa, fb)))
+ def bimap[C, D](fa: A => C, fb: B => D)(implicit F: Functor[F]): EitherT[F, C, D] =
+ EitherT(F.map(value)(_.bimap(fa, fb)))
- def bitraverse[G[_], C, D](f: A => G[C], g: B => G[D])(implicit traverseF: Traverse[F], applicativeG: Applicative[G]): G[EitherT[F, C, D]] =
+ def bitraverse[G[_], C, D](f: A => G[C], g: B => G[D])(implicit traverseF: Traverse[F],
+ applicativeG: Applicative[G]): G[EitherT[F, C, D]] =
applicativeG.map(traverseF.traverse(value)(axb => Bitraverse[Either].bitraverse(axb)(f, g)))(EitherT.apply)
def applyAlt[D](ff: EitherT[F, A, B => D])(implicit F: Apply[F]): EitherT[F, A, D] =
@@ -84,11 +83,11 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def flatMap[AA >: A, D](f: B => EitherT[F, AA, D])(implicit F: Monad[F]): EitherT[F, AA, D] =
EitherT(F.flatMap(value) {
case l @ Left(_) => F.pure(l.rightCast)
- case Right(b) => f(b).value
+ case Right(b) => f(b).value
})
def flatMapF[AA >: A, D](f: B => F[Either[AA, D]])(implicit F: Monad[F]): EitherT[F, AA, D] =
- flatMap(f andThen EitherT.apply)
+ flatMap(f.andThen(EitherT.apply))
def transform[C, D](f: Either[A, B] => Either[C, D])(implicit F: Functor[F]): EitherT[F, C, D] =
EitherT(F.map(value)(f))
@@ -110,32 +109,41 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def leftFlatMap[BB >: B, D](f: A => EitherT[F, D, BB])(implicit F: Monad[F]): EitherT[F, D, BB] =
EitherT(F.flatMap(value) {
- case Left(a) => f(a).value
- case r@Right(_) => F.pure(r.leftCast)
+ case Left(a) => f(a).value
+ case r @ Right(_) => F.pure(r.leftCast)
})
def leftSemiflatMap[D](f: A => F[D])(implicit F: Monad[F]): EitherT[F, D, B] =
EitherT(F.flatMap(value) {
- case Left(a) => F.map(f(a)) { d => Left(d) }
- case r@Right(_) => F.pure(r.leftCast)
+ case Left(a) =>
+ F.map(f(a)) { d =>
+ Left(d)
+ }
+ case r @ Right(_) => F.pure(r.leftCast)
})
/** Combine `leftSemiflatMap` and `semiflatMap` together.
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.data.EitherT
- *
- * scala> val eitherT: EitherT[List, String, Int] = EitherT[List, String, Int](List(Left("abc"), Right(123)))
- * scala> eitherT.biSemiflatMap(string => List(string.length), int => List(int.toFloat))
- * res0: cats.data.EitherT[List,Int,Float] = EitherT(List(Left(3), Right(123.0)))
- * }}}
- */
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.data.EitherT
+ *
+ * scala> val eitherT: EitherT[List, String, Int] = EitherT[List, String, Int](List(Left("abc"), Right(123)))
+ * scala> eitherT.biSemiflatMap(string => List(string.length), int => List(int.toFloat))
+ * res0: cats.data.EitherT[List,Int,Float] = EitherT(List(Left(3), Right(123.0)))
+ * }}}
+ */
def biSemiflatMap[C, D](fa: A => F[C], fb: B => F[D])(implicit F: Monad[F]): EitherT[F, C, D] =
EitherT(F.flatMap(value) {
- case Left(a) => F.map(fa(a)) { c => Left(c) }
- case Right(b) => F.map(fb(b)) { d => Right(d) }
+ case Left(a) =>
+ F.map(fa(a)) { c =>
+ Left(c)
+ }
+ case Right(b) =>
+ F.map(fb(b)) { d =>
+ Right(d)
+ }
})
def compare(that: EitherT[F, A, B])(implicit o: Order[F[Either[A, B]]]): Int =
@@ -147,7 +155,8 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def ===(that: EitherT[F, A, B])(implicit eq: Eq[F[Either[A, B]]]): Boolean =
eq.eqv(value, that.value)
- def traverse[G[_], D](f: B => G[D])(implicit traverseF: Traverse[F], applicativeG: Applicative[G]): G[EitherT[F, A, D]] =
+ def traverse[G[_], D](f: B => G[D])(implicit traverseF: Traverse[F],
+ applicativeG: Applicative[G]): G[EitherT[F, A, D]] =
applicativeG.map(traverseF.traverse(value)(axb => Traverse[Either[A, ?]].traverse(axb)(f)))(EitherT.apply)
def foldLeft[C](c: C)(f: (C, B) => C)(implicit F: Foldable[F]): C =
@@ -197,7 +206,7 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
* }}}
*/
def combine(that: EitherT[F, A, B])(implicit F: Apply[F], B: Semigroup[B]): EitherT[F, A, B] =
- EitherT(F.map2(this.value, that.value)(_ combine _))
+ EitherT(F.map2(this.value, that.value)(_.combine(_)))
def toValidated(implicit F: Functor[F]): F[Validated[A, B]] =
F.map(value)(_.toValidated)
@@ -253,22 +262,22 @@ final case class EitherT[F[_], A, B](value: F[Either[A, B]]) {
def toNested: Nested[F, Either[A, ?], B] = Nested[F, Either[A, ?], B](value)
/**
- * Transform this `EitherT[F, A, B]` into a `[[Nested]][F, Validated[A, ?], B]`.
- *
- * Example:
- * {{{
- * scala> import cats.data.{EitherT, Validated}
- * scala> import cats.implicits._
- * scala> val f: Int => String = i => (i*2).toString
- * scala> val r1: EitherT[Option, String, Int => String] = EitherT.right(Some(f))
- * r1: cats.data.EitherT[Option,String,Int => String] = EitherT(Some(Right()))
- * scala> val r2: EitherT[Option, String, Int] = EitherT.right(Some(10))
- * r2: cats.data.EitherT[Option,String,Int] = EitherT(Some(Right(10)))
- * scala> type ErrorOr[A] = Validated[String, A]
- * scala> (r1.toNestedValidated).ap(r2.toNestedValidated)
- * res0: cats.data.Nested[Option,ErrorOr,String] = Nested(Some(Valid(20)))
- * }}}
- */
+ * Transform this `EitherT[F, A, B]` into a `[[Nested]][F, Validated[A, ?], B]`.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.{EitherT, Validated}
+ * scala> import cats.implicits._
+ * scala> val f: Int => String = i => (i*2).toString
+ * scala> val r1: EitherT[Option, String, Int => String] = EitherT.right(Some(f))
+ * r1: cats.data.EitherT[Option,String,Int => String] = EitherT(Some(Right()))
+ * scala> val r2: EitherT[Option, String, Int] = EitherT.right(Some(10))
+ * r2: cats.data.EitherT[Option,String,Int] = EitherT(Some(Right(10)))
+ * scala> type ErrorOr[A] = Validated[String, A]
+ * scala> (r1.toNestedValidated).ap(r2.toNestedValidated)
+ * res0: cats.data.Nested[Option,ErrorOr,String] = Nested(Some(Valid(20)))
+ * }}}
+ */
def toNestedValidated(implicit F: Functor[F]): Nested[F, Validated[A, ?], B] =
Nested[F, Validated[A, ?], B](F.map(value)(_.toValidated))
@@ -290,7 +299,7 @@ object EitherT extends EitherTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class LeftPartiallyApplied[B](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class LeftPartiallyApplied[B](val dummy: Boolean = true) extends AnyVal {
def apply[F[_], A](fa: F[A])(implicit F: Functor[F]): EitherT[F, A, B] = EitherT(F.map(fa)(Either.left))
}
@@ -308,7 +317,7 @@ object EitherT extends EitherTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class LeftTPartiallyApplied[F[_], B](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class LeftTPartiallyApplied[F[_], B](val dummy: Boolean = true) extends AnyVal {
def apply[A](a: A)(implicit F: Applicative[F]): EitherT[F, A, B] = EitherT(F.pure(Either.left(a)))
}
@@ -326,7 +335,7 @@ object EitherT extends EitherTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class RightPartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class RightPartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
def apply[F[_], B](fb: F[B])(implicit F: Functor[F]): EitherT[F, A, B] = EitherT(F.map(fb)(Either.right))
}
@@ -344,7 +353,7 @@ object EitherT extends EitherTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class PurePartiallyApplied[F[_], A](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class PurePartiallyApplied[F[_], A](val dummy: Boolean = true) extends AnyVal {
def apply[B](b: B)(implicit F: Applicative[F]): EitherT[F, A, B] = right(F.pure(b))
}
@@ -370,7 +379,6 @@ object EitherT extends EitherTInstances {
*/
final def rightT[F[_], A]: PurePartiallyApplied[F, A] = pure
-
/**
* Alias for [[right]]
* {{{
@@ -420,7 +428,7 @@ object EitherT extends EitherTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class FromEitherPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class FromEitherPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[E, A](either: Either[E, A])(implicit F: Applicative[F]): EitherT[F, E, A] =
EitherT(F.pure(either))
}
@@ -441,7 +449,7 @@ object EitherT extends EitherTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class FromOptionPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class FromOptionPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[E, A](opt: Option[A], ifNone: => E)(implicit F: Applicative[F]): EitherT[F, E, A] =
EitherT(F.pure(Either.fromOption(opt, ifNone)))
}
@@ -460,32 +468,32 @@ object EitherT extends EitherTInstances {
EitherT(F.map(fopt)(opt => Either.fromOption(opt, ifNone)))
/** If the condition is satisfied, return the given `A` in `Right`
- * lifted into the specified `Applicative`, otherwise, return the
- * given `E` in `Left` lifted into the specified `Applicative`.
- *
- * {{{
- * scala> import cats.Id
- * scala> import cats.data.EitherT
- * scala> val userInput = "hello world"
- * scala> EitherT.cond[Id](
- * | userInput.forall(_.isDigit) && userInput.size == 10,
- * | userInput,
- * | "The input does not look like a phone number")
- * res0: EitherT[Id, String, String] = EitherT(Left(The input does not look like a phone number))
- * }}}
- */
+ * lifted into the specified `Applicative`, otherwise, return the
+ * given `E` in `Left` lifted into the specified `Applicative`.
+ *
+ * {{{
+ * scala> import cats.Id
+ * scala> import cats.data.EitherT
+ * scala> val userInput = "hello world"
+ * scala> EitherT.cond[Id](
+ * | userInput.forall(_.isDigit) && userInput.size == 10,
+ * | userInput,
+ * | "The input does not look like a phone number")
+ * res0: EitherT[Id, String, String] = EitherT(Left(The input does not look like a phone number))
+ * }}}
+ */
final def cond[F[_]]: CondPartiallyApplied[F] = new CondPartiallyApplied
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class CondPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class CondPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[E, A](test: Boolean, right: => A, left: => E)(implicit F: Applicative[F]): EitherT[F, E, A] =
EitherT(F.pure(Either.cond(test, right, left)))
}
}
-private[data] abstract class EitherTInstances extends EitherTInstances1 {
+abstract private[data] class EitherTInstances extends EitherTInstances1 {
implicit def catsDataOrderForEitherT[F[_], L, R](implicit F: Order[F[Either[L, R]]]): Order[EitherT[F, L, R]] =
new EitherTOrder[F, L, R] {
@@ -516,9 +524,11 @@ private[data] abstract class EitherTInstances extends EitherTInstances1 {
}
}
-private[data] abstract class EitherTInstances1 extends EitherTInstances2 {
+abstract private[data] class EitherTInstances1 extends EitherTInstances2 {
- implicit def catsSemigroupForEitherT[F[_], L, A](implicit F: Semigroup[F[Either[L, A]]]): Semigroup[EitherT[F, L, A]] =
+ implicit def catsSemigroupForEitherT[F[_], L, A](
+ implicit F: Semigroup[F[Either[L, A]]]
+ ): Semigroup[EitherT[F, L, A]] =
new EitherTSemigroup[F, L, A] { implicit val F0 = F }
implicit def catsDataFoldableForEitherT[F[_], L](implicit F: Foldable[F]): Foldable[EitherT[F, L, ?]] =
@@ -526,7 +536,9 @@ private[data] abstract class EitherTInstances1 extends EitherTInstances2 {
val F0: Foldable[F] = F
}
- implicit def catsDataPartialOrderForEitherT[F[_], L, R](implicit F: PartialOrder[F[Either[L, R]]]): PartialOrder[EitherT[F, L, R]] =
+ implicit def catsDataPartialOrderForEitherT[F[_], L, R](
+ implicit F: PartialOrder[F[Either[L, R]]]
+ ): PartialOrder[EitherT[F, L, R]] =
new EitherTPartialOrder[F, L, R] {
val F0: PartialOrder[F[Either[L, R]]] = F
}
@@ -547,7 +559,8 @@ private[data] abstract class EitherTInstances1 extends EitherTInstances2 {
}
}
-private[data] abstract class EitherTInstances2 extends EitherTInstances3 {
+abstract private[data] class EitherTInstances2 extends EitherTInstances3 {
+
/** Monad error instance for recovering errors in F instead of
* the underlying Either.
*
@@ -562,10 +575,11 @@ private[data] abstract class EitherTInstances2 extends EitherTInstances3 {
* res0: cats.data.EitherT[Option,String,Int] = EitherT(Some(Right(1)))
* }}}
*/
- implicit def catsDataMonadErrorFForEitherT[F[_], E, L](implicit FE0: MonadError[F, E]): MonadError[EitherT[F, L, ?], E] =
+ implicit def catsDataMonadErrorFForEitherT[F[_], E, L](
+ implicit FE0: MonadError[F, E]
+ ): MonadError[EitherT[F, L, ?], E] =
new EitherTMonadErrorF[F, E, L] { implicit val F = FE0 }
-
implicit def catsDataSemigroupKForEitherT[F[_], L](implicit F0: Monad[F]): SemigroupK[EitherT[F, L, ?]] =
new EitherTSemigroupK[F, L] { implicit val F = F0 }
@@ -575,14 +589,14 @@ private[data] abstract class EitherTInstances2 extends EitherTInstances3 {
}
}
-private[data] abstract class EitherTInstances3 {
+abstract private[data] class EitherTInstances3 {
implicit def catsDataFunctorForEitherT[F[_], L](implicit F0: Functor[F]): Functor[EitherT[F, L, ?]] =
new EitherTFunctor[F, L] { implicit val F = F0 }
}
private[data] trait EitherTSemigroup[F[_], L, A] extends Semigroup[EitherT[F, L, A]] {
implicit val F0: Semigroup[F[Either[L, A]]]
- def combine(x: EitherT[F, L , A], y: EitherT[F, L , A]): EitherT[F, L , A] =
+ def combine(x: EitherT[F, L, A], y: EitherT[F, L, A]): EitherT[F, L, A] =
EitherT(F0.combine(x.value, y.value))
}
@@ -595,27 +609,32 @@ private[data] trait EitherTSemigroupK[F[_], L] extends SemigroupK[EitherT[F, L,
implicit val F: Monad[F]
def combineK[A](x: EitherT[F, L, A], y: EitherT[F, L, A]): EitherT[F, L, A] =
EitherT(F.flatMap(x.value) {
- case l @ Left(_) => y.value
+ case l @ Left(_) => y.value
case r @ Right(_) => F.pure(r)
})
}
private[data] trait EitherTFunctor[F[_], L] extends Functor[EitherT[F, L, ?]] {
implicit val F: Functor[F]
- override def map[A, B](fa: EitherT[F, L, A])(f: A => B): EitherT[F, L, B] = fa map f
+ override def map[A, B](fa: EitherT[F, L, A])(f: A => B): EitherT[F, L, B] = fa.map(f)
}
private[data] trait EitherTMonad[F[_], L] extends Monad[EitherT[F, L, ?]] with EitherTFunctor[F, L] {
implicit val F: Monad[F]
def pure[A](a: A): EitherT[F, L, A] = EitherT.pure(a)
- def flatMap[A, B](fa: EitherT[F, L, A])(f: A => EitherT[F, L, B]): EitherT[F, L, B] = fa flatMap f
+ def flatMap[A, B](fa: EitherT[F, L, A])(f: A => EitherT[F, L, B]): EitherT[F, L, B] = fa.flatMap(f)
def tailRecM[A, B](a: A)(f: A => EitherT[F, L, Either[A, B]]): EitherT[F, L, B] =
- EitherT(F.tailRecM(a)(a0 => F.map(f(a0).value) {
- case Left(l) => Right(Left(l))
- case Right(Left(a1)) => Left(a1)
- case Right(Right(b)) => Right(Right(b))
- }))
+ EitherT(
+ F.tailRecM(a)(
+ a0 =>
+ F.map(f(a0).value) {
+ case Left(l) => Right(Left(l))
+ case Right(Left(a1)) => Left(a1)
+ case Right(Right(b)) => Right(Right(b))
+ }
+ )
+ )
}
private[data] trait EitherTMonadErrorF[F[_], E, L] extends MonadError[EitherT[F, L, ?], E] with EitherTMonad[F, L] {
@@ -630,12 +649,12 @@ private[data] trait EitherTMonadErrorF[F[_], E, L] extends MonadError[EitherT[F,
private[data] trait EitherTMonadError[F[_], L] extends MonadError[EitherT[F, L, ?], L] with EitherTMonad[F, L] {
def handleErrorWith[A](fea: EitherT[F, L, A])(f: L => EitherT[F, L, A]): EitherT[F, L, A] =
EitherT(F.flatMap(fea.value) {
- case Left(e) => f(e).value
+ case Left(e) => f(e).value
case r @ Right(_) => F.pure(r)
})
override def handleError[A](fea: EitherT[F, L, A])(f: L => A): EitherT[F, L, A] =
EitherT(F.flatMap(fea.value) {
- case Left(e) => F.pure(Right(f(e)))
+ case Left(e) => F.pure(Right(f(e)))
case r @ Right(_) => F.pure(r)
})
def raiseError[A](e: L): EitherT[F, L, A] = EitherT.left(F.pure(e))
@@ -646,7 +665,7 @@ private[data] trait EitherTMonadError[F[_], L] extends MonadError[EitherT[F, L,
fla.recoverWith(pf)
}
-private[data] sealed trait EitherTFoldable[F[_], L] extends Foldable[EitherT[F, L, ?]] {
+sealed private[data] trait EitherTFoldable[F[_], L] extends Foldable[EitherT[F, L, ?]] {
implicit def F0: Foldable[F]
def foldLeft[A, B](fa: EitherT[F, L, A], b: B)(f: (B, A) => B): B =
@@ -656,51 +675,56 @@ private[data] sealed trait EitherTFoldable[F[_], L] extends Foldable[EitherT[F,
fa.foldRight(lb)(f)
}
-private[data] sealed trait EitherTTraverse[F[_], L] extends Traverse[EitherT[F, L, ?]] with EitherTFoldable[F, L] {
- override implicit def F0: Traverse[F]
+sealed private[data] trait EitherTTraverse[F[_], L] extends Traverse[EitherT[F, L, ?]] with EitherTFoldable[F, L] {
+ implicit override def F0: Traverse[F]
override def traverse[G[_]: Applicative, A, B](fa: EitherT[F, L, A])(f: A => G[B]): G[EitherT[F, L, B]] =
- fa traverse f
+ fa.traverse(f)
}
-private[data] sealed trait EitherTBifoldable[F[_]] extends Bifoldable[EitherT[F, ?, ?]] {
+sealed private[data] trait EitherTBifoldable[F[_]] extends Bifoldable[EitherT[F, ?, ?]] {
implicit def F0: Foldable[F]
def bifoldLeft[A, B, C](fab: EitherT[F, A, B], c: C)(f: (C, A) => C, g: (C, B) => C): C =
- F0.foldLeft(fab.value, c)( (acc, axb) => Bifoldable[Either].bifoldLeft(axb, acc)(f, g))
+ F0.foldLeft(fab.value, c)((acc, axb) => Bifoldable[Either].bifoldLeft(axb, acc)(f, g))
- def bifoldRight[A, B, C](fab: EitherT[F, A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
- F0.foldRight(fab.value, c)( (axb, acc) => Bifoldable[Either].bifoldRight(axb, acc)(f, g))
+ def bifoldRight[A, B, C](fab: EitherT[F, A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ F0.foldRight(fab.value, c)((axb, acc) => Bifoldable[Either].bifoldRight(axb, acc)(f, g))
}
-private[data] sealed trait EitherTBitraverse[F[_]] extends Bitraverse[EitherT[F, ?, ?]] with EitherTBifoldable[F] {
- override implicit def F0: Traverse[F]
+sealed private[data] trait EitherTBitraverse[F[_]] extends Bitraverse[EitherT[F, ?, ?]] with EitherTBifoldable[F] {
+ implicit override def F0: Traverse[F]
- override def bitraverse[G[_], A, B, C, D](fab: EitherT[F, A, B])(f: A => G[C], g: B => G[D])(implicit G: Applicative[G]): G[EitherT[F, C, D]] =
+ override def bitraverse[G[_], A, B, C, D](
+ fab: EitherT[F, A, B]
+ )(f: A => G[C], g: B => G[D])(implicit G: Applicative[G]): G[EitherT[F, C, D]] =
fab.bitraverse(f, g)
}
-private[data] sealed trait EitherTBifunctor[F[_]] extends Bifunctor[EitherT[F, ?, ?]] {
+sealed private[data] trait EitherTBifunctor[F[_]] extends Bifunctor[EitherT[F, ?, ?]] {
implicit def F0: Functor[F]
override def bimap[A, B, C, D](fab: EitherT[F, A, B])(f: A => C, g: B => D): EitherT[F, C, D] = fab.bimap(f, g)
}
-private[data] sealed trait EitherTEq[F[_], L, A] extends Eq[EitherT[F, L, A]] {
+sealed private[data] trait EitherTEq[F[_], L, A] extends Eq[EitherT[F, L, A]] {
implicit def F0: Eq[F[Either[L, A]]]
override def eqv(x: EitherT[F, L, A], y: EitherT[F, L, A]): Boolean = x === y
}
-private[data] sealed trait EitherTPartialOrder[F[_], L, A] extends PartialOrder[EitherT[F, L, A]] with EitherTEq[F, L, A]{
- override implicit def F0: PartialOrder[F[Either[L, A]]]
+sealed private[data] trait EitherTPartialOrder[F[_], L, A]
+ extends PartialOrder[EitherT[F, L, A]]
+ with EitherTEq[F, L, A] {
+ implicit override def F0: PartialOrder[F[Either[L, A]]]
override def partialCompare(x: EitherT[F, L, A], y: EitherT[F, L, A]): Double =
- x partialCompare y
+ x.partialCompare(y)
}
-private[data] sealed trait EitherTOrder[F[_], L, A] extends Order[EitherT[F, L, A]] with EitherTPartialOrder[F, L, A]{
- override implicit def F0: Order[F[Either[L, A]]]
+sealed private[data] trait EitherTOrder[F[_], L, A] extends Order[EitherT[F, L, A]] with EitherTPartialOrder[F, L, A] {
+ implicit override def F0: Order[F[Either[L, A]]]
- override def compare(x: EitherT[F, L, A], y: EitherT[F, L, A]): Int = x compare y
+ override def compare(x: EitherT[F, L, A], y: EitherT[F, L, A]): Int = x.compare(y)
}
diff --git a/core/src/main/scala/cats/data/Func.scala b/core/src/main/scala/cats/data/Func.scala
index 17b480048e..f0e34b2ba2 100644
--- a/core/src/main/scala/cats/data/Func.scala
+++ b/core/src/main/scala/cats/data/Func.scala
@@ -17,10 +17,11 @@ sealed abstract class Func[F[_], A, B] { self =>
* Modify the context `F` using transformation `f`.
*/
def mapK[G[_]](f: F ~> G): Func[G, A, B] =
- Func.func(run andThen f.apply)
+ Func.func(run.andThen(f.apply))
}
object Func extends FuncInstances {
+
/** function `A => F[B]`. */
def func[F[_], A, B](run0: A => F[B]): Func[F, A, B] =
new Func[F, A, B] {
@@ -36,45 +37,47 @@ object Func extends FuncInstances {
}
-private[data] abstract class FuncInstances extends FuncInstances0 {
+abstract private[data] class FuncInstances extends FuncInstances0 {
implicit def catsDataApplicativeForFunc[F[_], C](implicit FF: Applicative[F]): Applicative[λ[α => Func[F, C, α]]] =
new FuncApplicative[F, C] {
def F: Applicative[F] = FF
}
}
-private[data] abstract class FuncInstances0 extends FuncInstances1 {
+abstract private[data] class FuncInstances0 extends FuncInstances1 {
implicit def catsDataApplyForFunc[F[_], C](implicit FF: Apply[F]): Apply[λ[α => Func[F, C, α]]] =
new FuncApply[F, C] {
def F: Apply[F] = FF
}
}
-private[data] abstract class FuncInstances1 {
+abstract private[data] class FuncInstances1 {
implicit def catsDataFunctorForFunc[F[_], C](implicit FF: Functor[F]): Functor[λ[α => Func[F, C, α]]] =
new FuncFunctor[F, C] {
def F: Functor[F] = FF
}
- implicit def catsDataContravariantForFunc[F[_], C](implicit FC: Contravariant[F]): Contravariant[λ[α => Func[F, α, C]]] =
+ implicit def catsDataContravariantForFunc[F[_], C](
+ implicit FC: Contravariant[F]
+ ): Contravariant[λ[α => Func[F, α, C]]] =
new FuncContravariant[F, C] {
def F: Contravariant[F] = FC
}
}
-private[data] sealed trait FuncFunctor[F[_], C] extends Functor[λ[α => Func[F, C, α]]] {
+sealed private[data] trait FuncFunctor[F[_], C] extends Functor[λ[α => Func[F, C, α]]] {
def F: Functor[F]
override def map[A, B](fa: Func[F, C, A])(f: A => B): Func[F, C, B] =
fa.map(f)(F)
}
-private[data] sealed trait FuncContravariant[F[_], C] extends Contravariant[λ[α => Func[F, α, C]]] {
+sealed private[data] trait FuncContravariant[F[_], C] extends Contravariant[λ[α => Func[F, α, C]]] {
def F: Contravariant[F]
def contramap[A, B](fa: Func[F, A, C])(f: B => A): Func[F, B, C] =
Func.func(a => fa.run(f(a)))
}
-private[data] sealed trait FuncApply[F[_], C] extends Apply[λ[α => Func[F, C, α]]] with FuncFunctor[F, C] {
+sealed private[data] trait FuncApply[F[_], C] extends Apply[λ[α => Func[F, C, α]]] with FuncFunctor[F, C] {
def F: Apply[F]
def ap[A, B](f: Func[F, C, A => B])(fa: Func[F, C, A]): Func[F, C, B] =
Func.func(c => F.ap(f.run(c))(fa.run(c)))
@@ -82,7 +85,7 @@ private[data] sealed trait FuncApply[F[_], C] extends Apply[λ[α => Func[F, C,
Func.func(c => F.product(fa.run(c), fb.run(c)))
}
-private[data] sealed trait FuncApplicative[F[_], C] extends Applicative[λ[α => Func[F, C, α]]] with FuncApply[F, C] {
+sealed private[data] trait FuncApplicative[F[_], C] extends Applicative[λ[α => Func[F, C, α]]] with FuncApply[F, C] {
def F: Applicative[F]
def pure[A](a: A): Func[F, C, A] =
Func.func(c => F.pure(a))
@@ -94,19 +97,18 @@ private[data] sealed trait FuncApplicative[F[_], C] extends Applicative[λ[α =>
sealed abstract class AppFunc[F[_], A, B] extends Func[F, A, B] { self =>
def F: Applicative[F]
- def product[G[_]](g: AppFunc[G, A, B]): AppFunc[λ[α => Tuple2K[F, G, α]], A, B] =
- {
- implicit val FF: Applicative[F] = self.F
- implicit val GG: Applicative[G] = g.F
- Func.appFunc[λ[α => Tuple2K[F, G, α]], A, B]{
- a: A => Tuple2K(self.run(a), g.run(a))
- }
+ def product[G[_]](g: AppFunc[G, A, B]): AppFunc[λ[α => Tuple2K[F, G, α]], A, B] = {
+ implicit val FF: Applicative[F] = self.F
+ implicit val GG: Applicative[G] = g.F
+ Func.appFunc[λ[α => Tuple2K[F, G, α]], A, B] { a: A =>
+ Tuple2K(self.run(a), g.run(a))
}
+ }
def compose[G[_], C](g: AppFunc[G, C, A]): AppFunc[Nested[G, F, ?], C, B] = {
implicit val gfApplicative: Applicative[Nested[G, F, ?]] = Nested.catsDataApplicativeForNested[G, F](g.F, F)
- Func.appFunc[Nested[G, F, ?], C, B]({
- c: C => Nested(g.F.map(g.run(c))(self.run))
+ Func.appFunc[Nested[G, F, ?], C, B]({ c: C =>
+ Nested(g.F.map(g.run(c))(self.run))
})
}
@@ -124,14 +126,14 @@ sealed abstract class AppFunc[F[_], A, B] extends Func[F, A, B] { self =>
object AppFunc extends AppFuncInstances
-private[data] abstract class AppFuncInstances {
+abstract private[data] class AppFuncInstances {
implicit def appFuncApplicative[F[_], C](implicit FF: Applicative[F]): Applicative[λ[α => AppFunc[F, C, α]]] =
new AppFuncApplicative[F, C] {
def F: Applicative[F] = FF
}
}
-private[data] sealed trait AppFuncApplicative[F[_], C] extends Applicative[λ[α => AppFunc[F, C, α]]] {
+sealed private[data] trait AppFuncApplicative[F[_], C] extends Applicative[λ[α => AppFunc[F, C, α]]] {
def F: Applicative[F]
override def map[A, B](fa: AppFunc[F, C, A])(f: A => B): AppFunc[F, C, B] =
fa.map(f)
diff --git a/core/src/main/scala/cats/data/IdT.scala b/core/src/main/scala/cats/data/IdT.scala
index 2c8bcfef51..21700a2712 100644
--- a/core/src/main/scala/cats/data/IdT.scala
+++ b/core/src/main/scala/cats/data/IdT.scala
@@ -50,14 +50,14 @@ object IdT extends IdTInstances {
IdT(F.pure(a))
}
-private[data] sealed trait IdTFunctor[F[_]] extends Functor[IdT[F, ?]] {
+sealed private[data] trait IdTFunctor[F[_]] extends Functor[IdT[F, ?]] {
implicit val F0: Functor[F]
override def map[A, B](fa: IdT[F, A])(f: A => B): IdT[F, B] =
fa.map(f)
}
-private[data] sealed trait IdTApply[F[_]] extends Apply[IdT[F, ?]] with IdTFunctor[F] {
+sealed private[data] trait IdTApply[F[_]] extends Apply[IdT[F, ?]] with IdTFunctor[F] {
implicit val F0: Apply[F]
override def ap[A, B](ff: IdT[F, A => B])(fa: IdT[F, A]): IdT[F, B] = fa.ap(ff)
@@ -67,13 +67,13 @@ private[data] sealed trait IdTApply[F[_]] extends Apply[IdT[F, ?]] with IdTFunct
.map(IdT(_))
}
-private[data] sealed trait IdTApplicative[F[_]] extends Applicative[IdT[F, ?]] with IdTApply[F] {
+sealed private[data] trait IdTApplicative[F[_]] extends Applicative[IdT[F, ?]] with IdTApply[F] {
implicit val F0: Applicative[F]
def pure[A](a: A): IdT[F, A] = IdT.pure(a)
}
-private[data] sealed trait IdTContravariantMonoidal[F[_]] extends ContravariantMonoidal[IdT[F, ?]] {
+sealed private[data] trait IdTContravariantMonoidal[F[_]] extends ContravariantMonoidal[IdT[F, ?]] {
implicit val F0: ContravariantMonoidal[F]
override def unit: IdT[F, Unit] = IdT(F0.unit)
@@ -85,7 +85,7 @@ private[data] sealed trait IdTContravariantMonoidal[F[_]] extends ContravariantM
IdT(F0.product(fa.value, fb.value))
}
-private[data] sealed trait IdTFlatMap[F[_]] extends FlatMap[IdT[F, ?]] with IdTApply[F] {
+sealed private[data] trait IdTFlatMap[F[_]] extends FlatMap[IdT[F, ?]] with IdTApply[F] {
implicit val F0: FlatMap[F]
def flatMap[A, B](fa: IdT[F, A])(f: A => IdT[F, B]): IdT[F, B] =
@@ -95,11 +95,11 @@ private[data] sealed trait IdTFlatMap[F[_]] extends FlatMap[IdT[F, ?]] with IdTA
IdT(F0.tailRecM(a)(f(_).value))
}
-private[data] sealed trait IdTMonad[F[_]] extends Monad[IdT[F, ?]] with IdTApplicative[F] with IdTFlatMap[F] {
+sealed private[data] trait IdTMonad[F[_]] extends Monad[IdT[F, ?]] with IdTApplicative[F] with IdTFlatMap[F] {
implicit val F0: Monad[F]
}
-private[data] sealed trait IdTFoldable[F[_]] extends Foldable[IdT[F, ?]] {
+sealed private[data] trait IdTFoldable[F[_]] extends Foldable[IdT[F, ?]] {
implicit val F0: Foldable[F]
def foldLeft[A, B](fa: IdT[F, A], b: B)(f: (B, A) => B): B =
@@ -115,14 +115,17 @@ private[data] sealed trait IdTFoldable[F[_]] extends Foldable[IdT[F, ?]] {
F0.get(fa.value)(idx)
}
-private[data] sealed trait IdTTraverse[F[_]] extends Traverse[IdT[F, ?]] with IdTFoldable[F] with IdTFunctor[F] {
+sealed private[data] trait IdTTraverse[F[_]] extends Traverse[IdT[F, ?]] with IdTFoldable[F] with IdTFunctor[F] {
implicit val F0: Traverse[F]
def traverse[G[_]: Applicative, A, B](fa: IdT[F, A])(f: A => G[B]): G[IdT[F, B]] =
fa.traverse(f)
}
-private[data] sealed trait IdTNonEmptyTraverse[F[_]] extends IdTTraverse[F] with NonEmptyTraverse[IdT[F, ?]] with IdTFunctor[F] {
+sealed private[data] trait IdTNonEmptyTraverse[F[_]]
+ extends IdTTraverse[F]
+ with NonEmptyTraverse[IdT[F, ?]]
+ with IdTFunctor[F] {
implicit val F0: NonEmptyTraverse[F]
def nonEmptyTraverse[G[_]: Apply, A, B](fa: IdT[F, A])(f: A => G[B]): G[IdT[F, B]] =
@@ -135,42 +138,46 @@ private[data] sealed trait IdTNonEmptyTraverse[F[_]] extends IdTTraverse[F] with
fa.reduceRightTo(f)(g)
}
-private[data] sealed abstract class IdTInstances8 {
- implicit def catsDataCommutativeFlatMapForIdT[F[_]](implicit F: CommutativeFlatMap[F]): CommutativeFlatMap[IdT[F, ?]] =
+sealed abstract private[data] class IdTInstances8 {
+ implicit def catsDataCommutativeFlatMapForIdT[F[_]](
+ implicit F: CommutativeFlatMap[F]
+ ): CommutativeFlatMap[IdT[F, ?]] =
new IdTFlatMap[F] with CommutativeFlatMap[IdT[F, ?]] { implicit val F0: CommutativeFlatMap[F] = F }
}
-private[data] sealed abstract class IdTInstances7 extends IdTInstances8{
+sealed abstract private[data] class IdTInstances7 extends IdTInstances8 {
implicit def catsDataCommutativeMonadForIdT[F[_]](implicit F: CommutativeMonad[F]): CommutativeMonad[IdT[F, ?]] =
new IdTMonad[F] with CommutativeMonad[IdT[F, ?]] { implicit val F0: CommutativeMonad[F] = F }
}
-private[data] sealed abstract class IdTInstances6 extends IdTInstances7 {
- implicit def catsDataContravariantMonoidalForIdT[F[_]](implicit F: ContravariantMonoidal[F]): ContravariantMonoidal[IdT[F, ?]] =
+sealed abstract private[data] class IdTInstances6 extends IdTInstances7 {
+ implicit def catsDataContravariantMonoidalForIdT[F[_]](
+ implicit F: ContravariantMonoidal[F]
+ ): ContravariantMonoidal[IdT[F, ?]] =
new IdTContravariantMonoidal[F] { implicit val F0: ContravariantMonoidal[F] = F }
}
-private[data] sealed abstract class IdTInstances5 extends IdTInstances6 {
+sealed abstract private[data] class IdTInstances5 extends IdTInstances6 {
implicit def catsDataFunctorForIdT[F[_]](implicit F: Functor[F]): Functor[IdT[F, ?]] =
new IdTFunctor[F] { implicit val F0: Functor[F] = F }
}
-private[data] sealed abstract class IdTInstances4 extends IdTInstances5 {
+sealed abstract private[data] class IdTInstances4 extends IdTInstances5 {
implicit def catsDataApplyForIdT[F[_]](implicit F: Apply[F]): Apply[IdT[F, ?]] =
new IdTApply[F] { implicit val F0: Apply[F] = F }
}
-private[data] sealed abstract class IdTInstances3 extends IdTInstances4 {
+sealed abstract private[data] class IdTInstances3 extends IdTInstances4 {
implicit def catsDataApplicativeForIdT[F[_]](implicit F: Applicative[F]): Applicative[IdT[F, ?]] =
new IdTApplicative[F] { implicit val F0: Applicative[F] = F }
}
-private[data] sealed abstract class IdTInstances2 extends IdTInstances3 {
+sealed abstract private[data] class IdTInstances2 extends IdTInstances3 {
implicit def catsDataFlatMapForIdT[F[_]](implicit F: FlatMap[F]): FlatMap[IdT[F, ?]] =
new IdTFlatMap[F] { implicit val F0: FlatMap[F] = F }
}
-private[data] sealed abstract class IdTInstances1 extends IdTInstances2 {
+sealed abstract private[data] class IdTInstances1 extends IdTInstances2 {
implicit def catsDataMonadForIdT[F[_]](implicit F: Monad[F]): Monad[IdT[F, ?]] =
new IdTMonad[F] { implicit val F0: Monad[F] = F }
@@ -178,7 +185,7 @@ private[data] sealed abstract class IdTInstances1 extends IdTInstances2 {
new IdTFoldable[F] { implicit val F0: Foldable[F] = F }
}
-private[data] sealed abstract class IdTInstances0 extends IdTInstances1 {
+sealed abstract private[data] class IdTInstances0 extends IdTInstances1 {
implicit def catsDataTraverseForIdT[F[_]](implicit F: Traverse[F]): Traverse[IdT[F, ?]] =
new IdTTraverse[F] { implicit val F0: Traverse[F] = F }
@@ -187,7 +194,7 @@ private[data] sealed abstract class IdTInstances0 extends IdTInstances1 {
Eq.by[IdT[F, A], F[A]](_.value)
}
-private[data] sealed abstract class IdTInstances extends IdTInstances0 {
+sealed abstract private[data] class IdTInstances extends IdTInstances0 {
implicit def catsDataNonEmptyTraverseForIdT[F[_]](implicit F: NonEmptyTraverse[F]): NonEmptyTraverse[IdT[F, ?]] =
new IdTNonEmptyTraverse[F] { implicit val F0: NonEmptyTraverse[F] = F }
diff --git a/core/src/main/scala/cats/data/IndexedReaderWriterStateT.scala b/core/src/main/scala/cats/data/IndexedReaderWriterStateT.scala
index c2df4efe87..8d05f1f1aa 100644
--- a/core/src/main/scala/cats/data/IndexedReaderWriterStateT.scala
+++ b/core/src/main/scala/cats/data/IndexedReaderWriterStateT.scala
@@ -12,15 +12,16 @@ import cats.syntax.either._
* In other words, it is a pre-baked stack of `[[ReaderT]][F, E, A]`, `[[WriterT]][F, L, A]`
* and `[[IndexedStateT]][F, SA, SB, A]`.
*/
-final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA) => F[(L, SB, A)]]) extends Serializable {
+final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA) => F[(L, SB, A)]])
+ extends Serializable {
/**
* Modify the initial state using `f`.
*/
def contramap[S0](f: S0 => SA)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, S0, SB, A] =
IndexedReaderWriterStateT.applyF {
- F.map(runF) { rwsfa =>
- (e: E, s0: S0) => rwsfa(e, f(s0))
+ F.map(runF) { rwsfa => (e: E, s0: S0) =>
+ rwsfa(e, f(s0))
}
}
@@ -41,8 +42,8 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
*/
def local[EE](f: EE => E)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, EE, L, SA, SB, A] =
IndexedReaderWriterStateT.applyF {
- F.map(runF) { rwsa =>
- (ee: EE, sa: SA) => rwsa(f(ee), sa)
+ F.map(runF) { rwsa => (ee: EE, sa: SA) =>
+ rwsa(f(ee), sa)
}
}
@@ -50,20 +51,23 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
* Modify the result of the computation using `f`.
*/
def map[B](f: A => B)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, SA, SB, B] =
- transform { (l, s, a) => (l, s, f(a)) }
+ transform { (l, s, a) =>
+ (l, s, f(a))
+ }
/**
* Modify the context `F` using transformation `f`.
*/
def mapK[G[_]](f: F ~> G)(implicit F: Functor[F]): IndexedReaderWriterStateT[G, E, L, SA, SB, A] =
- IndexedReaderWriterStateT.applyF(
- f(F.map(runF)(rwsa => (e, sa) => f(rwsa(e, sa)))))
+ IndexedReaderWriterStateT.applyF(f(F.map(runF)(rwsa => (e, sa) => f(rwsa(e, sa)))))
/**
* Modify the resulting state using `f` and the resulting value using `g`.
*/
def bimap[SC, B](f: SB => SC, g: A => B)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, SA, SC, B] =
- transform { (l, s, a) => (l, f(s), g(a)) }
+ transform { (l, s, a) =>
+ (l, f(s), g(a))
+ }
/**
* Modify the initial state using `f` and the resulting state using `g`.
@@ -75,24 +79,28 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
* Modify the written log value using `f`.
*/
def mapWritten[LL](f: L => LL)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, LL, SA, SB, A] =
- transform { (l, s, a) => (f(l), s, a) }
+ transform { (l, s, a) =>
+ (f(l), s, a)
+ }
/**
* Modify the result of the computation by feeding it into `f`, threading the state
* through the resulting computation and combining the log values.
*/
- def flatMap[SC, B](f: A => IndexedReaderWriterStateT[F, E, L, SB, SC, B])(
- implicit F: FlatMap[F], L: Semigroup[L]): IndexedReaderWriterStateT[F, E, L, SA, SC, B] =
+ def flatMap[SC, B](
+ f: A => IndexedReaderWriterStateT[F, E, L, SB, SC, B]
+ )(implicit F: FlatMap[F], L: Semigroup[L]): IndexedReaderWriterStateT[F, E, L, SA, SC, B] =
IndexedReaderWriterStateT.applyF {
- F.map(runF) { rwsfa =>
- (e: E, sa: SA) =>
- F.flatMap(rwsfa(e, sa)) { case (la, sb, a) =>
+ F.map(runF) { rwsfa => (e: E, sa: SA) =>
+ F.flatMap(rwsfa(e, sa)) {
+ case (la, sb, a) =>
F.flatMap(f(a).runF) { rwsfb =>
- F.map(rwsfb(e, sb)) { case (lb, sc, b) =>
- (L.combine(la, lb), sc, b)
+ F.map(rwsfb(e, sb)) {
+ case (lb, sc, b) =>
+ (L.combine(la, lb), sc, b)
}
}
- }
+ }
}
}
@@ -101,23 +109,26 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
*/
def flatMapF[B](faf: A => F[B])(implicit F: FlatMap[F]): IndexedReaderWriterStateT[F, E, L, SA, SB, B] =
IndexedReaderWriterStateT.applyF {
- F.map(runF) { rwsfa =>
- (e: E, sa: SA) =>
- F.flatMap(rwsfa(e, sa)) { case (l, sb, a) =>
+ F.map(runF) { rwsfa => (e: E, sa: SA) =>
+ F.flatMap(rwsfa(e, sa)) {
+ case (l, sb, a) =>
F.map(faf(a))((l, sb, _))
- }
+ }
}
}
/**
* Transform the resulting log, state and value using `f`.
*/
- def transform[LL, SC, B](f: (L, SB, A) => (LL, SC, B))(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, LL, SA, SC, B] =
+ def transform[LL, SC, B](
+ f: (L, SB, A) => (LL, SC, B)
+ )(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, LL, SA, SC, B] =
IndexedReaderWriterStateT.applyF {
- F.map(runF) { rwsfa =>
- (e: E, s: SA) => F.map(rwsfa(e, s)) { case (l, sb, a) =>
- val (ll, sc, b) = f(l, sb, a)
- (ll, sc, b)
+ F.map(runF) { rwsfa => (e: E, s: SA) =>
+ F.map(rwsfa(e, s)) {
+ case (l, sb, a) =>
+ val (ll, sc, b) = f(l, sb, a)
+ (ll, sc, b)
}
}
}
@@ -139,8 +150,9 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
* res1: Option[(Log, Int, Int)] = Some((List(),5,5))
* }}}
*/
- def transformF[G[_], LL, SC, B](f: F[(L, SB, A)] => G[(LL, SC, B)])(
- implicit F: Monad[F], G: Applicative[G]): IndexedReaderWriterStateT[G, E, LL, SA, SC, B] =
+ def transformF[G[_], LL, SC, B](
+ f: F[(L, SB, A)] => G[(LL, SC, B)]
+ )(implicit F: Monad[F], G: Applicative[G]): IndexedReaderWriterStateT[G, E, LL, SA, SC, B] =
IndexedReaderWriterStateT.apply((e, s) => f(run(e, s)))
/**
@@ -163,25 +175,29 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
*/
def transformS[R](f: R => SA, g: (R, SB) => R)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, R, R, A] =
IndexedReaderWriterStateT.applyF {
- F.map(runF) { rwsfa =>
- (e: E, r: R) => F.map(rwsfa(e, f(r))) { case (l, sb, a) =>
- (l, g(r, sb), a)
+ F.map(runF) { rwsfa => (e: E, r: R) =>
+ F.map(rwsfa(e, f(r))) {
+ case (l, sb, a) =>
+ (l, g(r, sb), a)
}
}
}
-
/**
* Modify the resulting state.
*/
def modify[SC](f: SB => SC)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, SA, SC, A] =
- transform { (l, sb, a) => (l, f(sb), a) }
+ transform { (l, sb, a) =>
+ (l, f(sb), a)
+ }
/**
* Inspect a value from the input state, without modifying the state.
*/
def inspect[B](f: SB => B)(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, SA, SB, B] =
- transform { (l, sb, a) => (l, sb, f(sb)) }
+ transform { (l, sb, a) =>
+ (l, sb, f(sb))
+ }
/**
* Get the input state, without modifying it.
@@ -199,7 +215,9 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
* Retrieve the value written to the log.
*/
def written(implicit F: Functor[F]): IndexedReaderWriterStateT[F, E, L, SA, SB, L] =
- transform { (l, sb, a) => (l, sb, l) }
+ transform { (l, sb, a) =>
+ (l, sb, l)
+ }
/**
* Clear the log.
@@ -256,17 +274,20 @@ final class IndexedReaderWriterStateT[F[_], E, L, SA, SB, A](val runF: F[(E, SA)
runL(env, SA.empty)
}
-private[data] sealed trait CommonIRWSTConstructors {
+sealed private[data] trait CommonIRWSTConstructors {
+
/**
* Return `a` and an empty log without modifying the input state.
*/
- def pure[F[_], E, L, S, A](a: A)(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
+ def pure[F[_], E, L, S, A](a: A)(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
IndexedReaderWriterStateT((_, s) => F.pure((L.empty, s, a)))
/**
* Return an effectful `a` and an empty log without modifying the input state.
*/
- def liftF[F[_], E, L, S, A](fa: F[A])(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
+ def liftF[F[_], E, L, S, A](fa: F[A])(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
IndexedReaderWriterStateT((_, s) => F.map(fa)((L.empty, s, _)))
/**
@@ -283,31 +304,36 @@ private[data] sealed trait CommonIRWSTConstructors {
λ[F ~> IndexedReaderWriterStateT[F, E, L, S, S, ?]](IndexedReaderWriterStateT.liftF(_))
@deprecated("Use liftF instead", "1.0.0-RC2")
- def lift[F[_], E, L, S, A](fa: F[A])(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
+ def lift[F[_], E, L, S, A](fa: F[A])(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
IndexedReaderWriterStateT((_, s) => F.map(fa)((L.empty, s, _)))
/**
* Inspect a value from the input state, without modifying the state.
*/
- def inspect[F[_], E, L, S, A](f: S => A)(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
+ def inspect[F[_], E, L, S, A](f: S => A)(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
IndexedReaderWriterStateT((_, s) => F.pure((L.empty, s, f(s))))
/**
* Like [[inspect]], but using an effectful function.
*/
- def inspectF[F[_], E, L, S, A](f: S => F[A])(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
+ def inspectF[F[_], E, L, S, A](f: S => F[A])(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, A] =
IndexedReaderWriterStateT((_, s) => F.map(f(s))((L.empty, s, _)))
/**
* Set the state to `s`.
*/
- def set[F[_], E, L, S](s: S)(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, Unit] =
+ def set[F[_], E, L, S](s: S)(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, Unit] =
IndexedReaderWriterStateT((_, _) => F.pure((L.empty, s, ())))
/**
* Like [[set]], but using an effectful `S` value.
*/
- def setF[F[_], E, L, S](fs: F[S])(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, Unit] =
+ def setF[F[_], E, L, S](fs: F[S])(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, S, S, Unit] =
IndexedReaderWriterStateT((_, _) => F.map(fs)((L.empty, _, ())))
/**
@@ -336,10 +362,13 @@ private[data] sealed trait CommonIRWSTConstructors {
}
object IndexedReaderWriterStateT extends IRWSTInstances with CommonIRWSTConstructors {
+
/**
* Construct a new computation using the provided function.
*/
- def apply[F[_], E, L, SA, SB, A](runF: (E, SA) => F[(L, SB, A)])(implicit F: Applicative[F]): IndexedReaderWriterStateT[F, E, L, SA, SB, A] =
+ def apply[F[_], E, L, SA, SB, A](
+ runF: (E, SA) => F[(L, SB, A)]
+ )(implicit F: Applicative[F]): IndexedReaderWriterStateT[F, E, L, SA, SB, A] =
new IndexedReaderWriterStateT(F.pure(runF))
/**
@@ -351,21 +380,26 @@ object IndexedReaderWriterStateT extends IRWSTInstances with CommonIRWSTConstruc
/**
* Modify the input state using `f`.
*/
- def modify[F[_], E, L, SA, SB](f: SA => SB)(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, SA, SB, Unit] =
+ def modify[F[_], E, L, SA, SB](f: SA => SB)(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, SA, SB, Unit] =
IndexedReaderWriterStateT((_, s) => F.pure((L.empty, f(s), ())))
/**
* Like [[modify]], but using an effectful function.
*/
- def modifyF[F[_], E, L, SA, SB](f: SA => F[SB])(implicit F: Applicative[F], L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, SA, SB, Unit] =
+ def modifyF[F[_], E, L, SA, SB](f: SA => F[SB])(implicit F: Applicative[F],
+ L: Monoid[L]): IndexedReaderWriterStateT[F, E, L, SA, SB, Unit] =
IndexedReaderWriterStateT((_, s) => F.map(f(s))((L.empty, _, ())))
}
-private[data] abstract class RWSTFunctions extends CommonIRWSTConstructors {
+abstract private[data] class RWSTFunctions extends CommonIRWSTConstructors {
+
/**
* Construct a new computation using the provided function.
*/
- def apply[F[_], E, L, S, A](runF: (E, S) => F[(L, S, A)])(implicit F: Applicative[F]): ReaderWriterStateT[F, E, L, S, A] =
+ def apply[F[_], E, L, S, A](
+ runF: (E, S) => F[(L, S, A)]
+ )(implicit F: Applicative[F]): ReaderWriterStateT[F, E, L, S, A] =
new IndexedReaderWriterStateT(F.pure(runF))
/**
@@ -383,14 +417,16 @@ private[data] abstract class RWSTFunctions extends CommonIRWSTConstructors {
/**
* Like [[modify]], but using an effectful function.
*/
- def modifyF[F[_], E, L, S](f: S => F[S])(implicit F: Applicative[F], L: Monoid[L]): ReaderWriterStateT[F, E, L, S, Unit] =
+ def modifyF[F[_], E, L, S](f: S => F[S])(implicit F: Applicative[F],
+ L: Monoid[L]): ReaderWriterStateT[F, E, L, S, Unit] =
ReaderWriterStateT((_, s) => F.map(f(s))((L.empty, _, ())))
}
/**
* Convenience functions for ReaderWriterState.
*/
-private[data] abstract class RWSFunctions {
+abstract private[data] class RWSFunctions {
+
/**
* Return `a` and an empty log without modifying the input state.
*/
@@ -440,54 +476,73 @@ private[data] abstract class RWSFunctions {
ReaderWriterStateT.tell(l)
}
-private[data] sealed abstract class IRWSTInstances extends IRWSTInstances1 {
+sealed abstract private[data] class IRWSTInstances extends IRWSTInstances1 {
- implicit def catsDataStrongForIRWST[F[_], E, L, T](implicit F0: Monad[F]): Strong[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] =
+ implicit def catsDataStrongForIRWST[F[_], E, L, T](
+ implicit F0: Monad[F]
+ ): Strong[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] =
new IRWSTStrong[F, E, L, T] {
implicit def F: Monad[F] = F0
}
- implicit def catsDataBifunctorForIRWST[F[_], E, L, SA](implicit F0: Functor[F]): Bifunctor[IndexedReaderWriterStateT[F, E, L, SA, ?, ?]] =
+ implicit def catsDataBifunctorForIRWST[F[_], E, L, SA](
+ implicit F0: Functor[F]
+ ): Bifunctor[IndexedReaderWriterStateT[F, E, L, SA, ?, ?]] =
new IRWSTBifunctor[F, E, L, SA] {
implicit def F: Functor[F] = F0
}
- implicit def catsDataContravariantForIRWST[F[_], E, L, SB, T](implicit F0: Functor[F]): Contravariant[IndexedReaderWriterStateT[F, E, L, ?, SB, T]] =
+ implicit def catsDataContravariantForIRWST[F[_], E, L, SB, T](
+ implicit F0: Functor[F]
+ ): Contravariant[IndexedReaderWriterStateT[F, E, L, ?, SB, T]] =
new IRWSTContravariant[F, E, L, SB, T] {
implicit def F: Functor[F] = F0
}
- implicit def catsDataMonadErrorForIRWST[F[_], E, L, S, R](implicit F0: MonadError[F, R], L0: Monoid[L]): MonadError[IndexedReaderWriterStateT[F, E, L, S, S, ?], R] =
+ implicit def catsDataMonadErrorForIRWST[F[_], E, L, S, R](
+ implicit F0: MonadError[F, R],
+ L0: Monoid[L]
+ ): MonadError[IndexedReaderWriterStateT[F, E, L, S, S, ?], R] =
new RWSTMonadError[F, E, L, S, R] {
implicit def F: MonadError[F, R] = F0
implicit def L: Monoid[L] = L0
}
- implicit def catsDataDeferForIRWST[F[_], E, L, SA, SB](implicit F: Defer[F]): Defer[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] =
+ implicit def catsDataDeferForIRWST[F[_], E, L, SA, SB](
+ implicit F: Defer[F]
+ ): Defer[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] =
new Defer[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] {
- def defer[A](fa: => IndexedReaderWriterStateT[F, E, L, SA, SB, A]): IndexedReaderWriterStateT[F, E, L, SA, SB, A] =
+ def defer[A](
+ fa: => IndexedReaderWriterStateT[F, E, L, SA, SB, A]
+ ): IndexedReaderWriterStateT[F, E, L, SA, SB, A] =
IndexedReaderWriterStateT.applyF(F.defer(fa.runF))
}
}
-private[data] sealed abstract class IRWSTInstances1 extends IRWSTInstances2 {
- implicit def catsDataMonadForRWST[F[_], E, L, S](implicit F0: Monad[F], L0: Monoid[L]): Monad[ReaderWriterStateT[F, E, L, S, ?]] =
+sealed abstract private[data] class IRWSTInstances1 extends IRWSTInstances2 {
+ implicit def catsDataMonadForRWST[F[_], E, L, S](implicit F0: Monad[F],
+ L0: Monoid[L]): Monad[ReaderWriterStateT[F, E, L, S, ?]] =
new RWSTMonad[F, E, L, S] {
implicit def F: Monad[F] = F0
implicit def L: Monoid[L] = L0
}
- implicit def catsDataProfunctorForIRWST[F[_], E, L, T](implicit F0: Functor[F]): Profunctor[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] =
+ implicit def catsDataProfunctorForIRWST[F[_], E, L, T](
+ implicit F0: Functor[F]
+ ): Profunctor[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] =
new IRWSTProfunctor[F, E, L, T] {
implicit def F: Functor[F] = F0
}
}
-private[data] sealed abstract class IRWSTInstances2 extends IRWSTInstances3 {
- implicit def catsDataAlternativeForIRWST[F[_], E, L, S](implicit FM: Monad[F], FA: Alternative[F],
- L0: Monoid[L]): Alternative[IndexedReaderWriterStateT[F, E, L, S, S, ?]] =
+sealed abstract private[data] class IRWSTInstances2 extends IRWSTInstances3 {
+ implicit def catsDataAlternativeForIRWST[F[_], E, L, S](
+ implicit FM: Monad[F],
+ FA: Alternative[F],
+ L0: Monoid[L]
+ ): Alternative[IndexedReaderWriterStateT[F, E, L, S, S, ?]] =
new RWSTAlternative[F, E, L, S] {
implicit def G: Alternative[F] = FA
implicit def F: Monad[F] = FM
@@ -495,94 +550,131 @@ private[data] sealed abstract class IRWSTInstances2 extends IRWSTInstances3 {
}
}
-private[data] sealed abstract class IRWSTInstances3 {
- implicit def catsDataSemigroupKForIRWST[F[_], E, L, SA, SB](implicit F0: Monad[F],
- G0: SemigroupK[F]): SemigroupK[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] =
+sealed abstract private[data] class IRWSTInstances3 {
+ implicit def catsDataSemigroupKForIRWST[F[_], E, L, SA, SB](
+ implicit F0: Monad[F],
+ G0: SemigroupK[F]
+ ): SemigroupK[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] =
new IRWSTSemigroupK[F, E, L, SA, SB] {
implicit def F: Monad[F] = F0
implicit def G: SemigroupK[F] = G0
}
- implicit def catsDataFunctorForIRWST[F[_], E, L, SA, SB](implicit F0: Functor[F]): Functor[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] =
+ implicit def catsDataFunctorForIRWST[F[_], E, L, SA, SB](
+ implicit F0: Functor[F]
+ ): Functor[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] =
new IRWSTFunctor[F, E, L, SA, SB] {
implicit def F: Functor[F] = F0
}
}
-private[data] sealed abstract class IRWSTFunctor[F[_], E, L, SA, SB] extends Functor[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] {
+sealed abstract private[data] class IRWSTFunctor[F[_], E, L, SA, SB]
+ extends Functor[IndexedReaderWriterStateT[F, E, L, SA, SB, ?]] {
implicit def F: Functor[F]
- override def map[A, B](fa: IndexedReaderWriterStateT[F, E, L, SA, SB, A])(f: A => B): IndexedReaderWriterStateT[F, E, L, SA, SB, B] =
+ override def map[A, B](
+ fa: IndexedReaderWriterStateT[F, E, L, SA, SB, A]
+ )(f: A => B): IndexedReaderWriterStateT[F, E, L, SA, SB, B] =
fa.map(f)
}
-private[data] sealed abstract class IRWSTContravariant[F[_], E, L, SB, T] extends Contravariant[IndexedReaderWriterStateT[F, E, L, ?, SB, T]] {
+sealed abstract private[data] class IRWSTContravariant[F[_], E, L, SB, T]
+ extends Contravariant[IndexedReaderWriterStateT[F, E, L, ?, SB, T]] {
implicit def F: Functor[F]
- override def contramap[A, B](fa: IndexedReaderWriterStateT[F, E, L, A, SB, T])(f: B => A): IndexedReaderWriterStateT[F, E, L, B, SB, T] =
+ override def contramap[A, B](
+ fa: IndexedReaderWriterStateT[F, E, L, A, SB, T]
+ )(f: B => A): IndexedReaderWriterStateT[F, E, L, B, SB, T] =
fa.contramap(f)
}
-private[data] sealed abstract class IRWSTProfunctor[F[_], E, L, T] extends Profunctor[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] {
+sealed abstract private[data] class IRWSTProfunctor[F[_], E, L, T]
+ extends Profunctor[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] {
implicit def F: Functor[F]
- override def dimap[A, B, C, D](fab: IndexedReaderWriterStateT[F, E, L, A, B, T])(f: C => A)(g: B => D): IndexedReaderWriterStateT[F, E, L, C, D, T] =
+ override def dimap[A, B, C, D](
+ fab: IndexedReaderWriterStateT[F, E, L, A, B, T]
+ )(f: C => A)(g: B => D): IndexedReaderWriterStateT[F, E, L, C, D, T] =
fab.dimap(f)(g)
}
-private[data] sealed abstract class IRWSTStrong[F[_], E, L, T] extends IRWSTProfunctor[F, E, L, T] with Strong[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] {
+sealed abstract private[data] class IRWSTStrong[F[_], E, L, T]
+ extends IRWSTProfunctor[F, E, L, T]
+ with Strong[IndexedReaderWriterStateT[F, E, L, ?, ?, T]] {
implicit def F: Monad[F]
- def first[A, B, C](fa: IndexedReaderWriterStateT[F, E, L, A, B, T]): IndexedReaderWriterStateT[F, E, L, (A, C), (B, C), T] =
- IndexedReaderWriterStateT { case (e, (a, c)) =>
- F.map(fa.run(e, a)) { case (l, b, t) =>
- (l, (b, c), t)
- }
+ def first[A, B, C](
+ fa: IndexedReaderWriterStateT[F, E, L, A, B, T]
+ ): IndexedReaderWriterStateT[F, E, L, (A, C), (B, C), T] =
+ IndexedReaderWriterStateT {
+ case (e, (a, c)) =>
+ F.map(fa.run(e, a)) {
+ case (l, b, t) =>
+ (l, (b, c), t)
+ }
}
- def second[A, B, C](fa: IndexedReaderWriterStateT[F, E, L, A, B, T]): IndexedReaderWriterStateT[F, E, L, (C, A), (C, B), T] =
+ def second[A, B, C](
+ fa: IndexedReaderWriterStateT[F, E, L, A, B, T]
+ ): IndexedReaderWriterStateT[F, E, L, (C, A), (C, B), T] =
first(fa).dimap((_: (C, A)).swap)(_.swap)
}
-private[data] sealed abstract class IRWSTBifunctor[F[_], E, L, SA] extends Bifunctor[IndexedReaderWriterStateT[F, E, L, SA, ?, ?]] {
+sealed abstract private[data] class IRWSTBifunctor[F[_], E, L, SA]
+ extends Bifunctor[IndexedReaderWriterStateT[F, E, L, SA, ?, ?]] {
implicit def F: Functor[F]
- override def bimap[A, B, C, D](fab: IndexedReaderWriterStateT[F, E, L, SA, A, B])(f: A => C, g: B => D): IndexedReaderWriterStateT[F, E, L, SA, C, D] =
+ override def bimap[A, B, C, D](
+ fab: IndexedReaderWriterStateT[F, E, L, SA, A, B]
+ )(f: A => C, g: B => D): IndexedReaderWriterStateT[F, E, L, SA, C, D] =
fab.bimap(f, g)
}
-private[data] sealed abstract class RWSTMonad[F[_], E, L, S] extends IRWSTFunctor[F, E, L, S, S] with Monad[ReaderWriterStateT[F, E, L, S, ?]] {
+sealed abstract private[data] class RWSTMonad[F[_], E, L, S]
+ extends IRWSTFunctor[F, E, L, S, S]
+ with Monad[ReaderWriterStateT[F, E, L, S, ?]] {
implicit def F: Monad[F]
implicit def L: Monoid[L]
def pure[A](a: A): ReaderWriterStateT[F, E, L, S, A] =
ReaderWriterStateT.pure(a)
- def flatMap[A, B](fa: ReaderWriterStateT[F, E, L, S, A])(f: A => ReaderWriterStateT[F, E, L, S, B]): ReaderWriterStateT[F, E, L, S, B] =
+ def flatMap[A, B](
+ fa: ReaderWriterStateT[F, E, L, S, A]
+ )(f: A => ReaderWriterStateT[F, E, L, S, B]): ReaderWriterStateT[F, E, L, S, B] =
fa.flatMap(f)
- def tailRecM[A, B](initA: A)(f: A => ReaderWriterStateT[F, E, L, S, Either[A, B]]): ReaderWriterStateT[F, E, L, S, B] =
+ def tailRecM[A, B](
+ initA: A
+ )(f: A => ReaderWriterStateT[F, E, L, S, Either[A, B]]): ReaderWriterStateT[F, E, L, S, B] =
ReaderWriterStateT { (e, initS) =>
- F.tailRecM((L.empty, initS, initA)) { case (currL, currS, currA) =>
- F.map(f(currA).run(e, currS)) { case (nextL, nextS, ab) =>
- ab.bimap((L.combine(currL, nextL), nextS, _), (L.combine(currL, nextL), nextS, _))
- }
+ F.tailRecM((L.empty, initS, initA)) {
+ case (currL, currS, currA) =>
+ F.map(f(currA).run(e, currS)) {
+ case (nextL, nextS, ab) =>
+ ab.bimap((L.combine(currL, nextL), nextS, _), (L.combine(currL, nextL), nextS, _))
+ }
}
}
}
-private[data] sealed abstract class IRWSTSemigroupK[F[_], E, L, SA, SB] extends IRWSTSemigroupK1[F, E, L, SA, SB]
+sealed abstract private[data] class IRWSTSemigroupK[F[_], E, L, SA, SB] extends IRWSTSemigroupK1[F, E, L, SA, SB]
-private[data] sealed abstract class RWSTAlternative[F[_], E, L, S] extends IRWSTFunctor[F, E, L, S, S] with RWSTAlternative1[F, E, L, S]
+sealed abstract private[data] class RWSTAlternative[F[_], E, L, S]
+ extends IRWSTFunctor[F, E, L, S, S]
+ with RWSTAlternative1[F, E, L, S]
-private[data] sealed abstract class RWSTMonadError[F[_], E, L, S, R]
- extends RWSTMonad[F, E, L, S] with MonadError[ReaderWriterStateT[F, E, L, S, ?], R] {
+sealed abstract private[data] class RWSTMonadError[F[_], E, L, S, R]
+ extends RWSTMonad[F, E, L, S]
+ with MonadError[ReaderWriterStateT[F, E, L, S, ?], R] {
implicit def F: MonadError[F, R]
def raiseError[A](r: R): ReaderWriterStateT[F, E, L, S, A] = ReaderWriterStateT.liftF(F.raiseError(r))
- def handleErrorWith[A](fa: ReaderWriterStateT[F, E, L, S, A])(f: R => ReaderWriterStateT[F, E, L, S, A]): ReaderWriterStateT[F, E, L, S, A] =
+ def handleErrorWith[A](
+ fa: ReaderWriterStateT[F, E, L, S, A]
+ )(f: R => ReaderWriterStateT[F, E, L, S, A]): ReaderWriterStateT[F, E, L, S, A] =
ReaderWriterStateT { (e, s) =>
F.handleErrorWith(fa.run(e, s))(r => f(r).run(e, s))
}
@@ -593,13 +685,15 @@ private trait IRWSTSemigroupK1[F[_], E, L, SA, SB] extends SemigroupK[IndexedRea
implicit def G: SemigroupK[F]
def combineK[A](x: IndexedReaderWriterStateT[F, E, L, SA, SB, A],
- y: IndexedReaderWriterStateT[F, E, L, SA, SB, A]): IndexedReaderWriterStateT[F, E, L, SA, SB, A] =
+ y: IndexedReaderWriterStateT[F, E, L, SA, SB, A]): IndexedReaderWriterStateT[F, E, L, SA, SB, A] =
IndexedReaderWriterStateT { (e, sa) =>
G.combineK(x.run(e, sa), y.run(e, sa))
}
}
-private trait RWSTAlternative1[F[_], E, L, S] extends IRWSTSemigroupK1[F, E, L, S, S] with Alternative[ReaderWriterStateT[F, E, L, S, ?]] {
+private trait RWSTAlternative1[F[_], E, L, S]
+ extends IRWSTSemigroupK1[F, E, L, S, S]
+ with Alternative[ReaderWriterStateT[F, E, L, S, ?]] {
implicit def F: Monad[F]
def G: Alternative[F]
@@ -609,7 +703,9 @@ private trait RWSTAlternative1[F[_], E, L, S] extends IRWSTSemigroupK1[F, E, L,
def pure[A](a: A): ReaderWriterStateT[F, E, L, S, A] = ReaderWriterStateT.pure[F, E, L, S, A](a)
- def ap[A, B](ff: ReaderWriterStateT[F, E, L, S, A => B])(fa: ReaderWriterStateT[F, E, L, S, A]): ReaderWriterStateT[F, E, L, S, B] =
+ def ap[A, B](
+ ff: ReaderWriterStateT[F, E, L, S, A => B]
+ )(fa: ReaderWriterStateT[F, E, L, S, A]): ReaderWriterStateT[F, E, L, S, B] =
ff.flatMap(f => fa.map(f)(F))(F, L)
}
diff --git a/core/src/main/scala/cats/data/IndexedStateT.scala b/core/src/main/scala/cats/data/IndexedStateT.scala
index 4a256cce83..9f1f2a7c7f 100644
--- a/core/src/main/scala/cats/data/IndexedStateT.scala
+++ b/core/src/main/scala/cats/data/IndexedStateT.scala
@@ -23,8 +23,9 @@ final class IndexedStateT[F[_], SA, SB, A](val runF: F[SA => F[(SB, A)]]) extend
def flatMap[B, SC](fas: A => IndexedStateT[F, SB, SC, B])(implicit F: FlatMap[F]): IndexedStateT[F, SA, SC, B] =
IndexedStateT.applyF(F.map(runF) { safsba =>
AndThen(safsba).andThen { fsba =>
- F.flatMap(fsba) { case (sb, a) =>
- fas(a).run(sb)
+ F.flatMap(fsba) {
+ case (sb, a) =>
+ fas(a).run(sb)
}
}
})
@@ -43,18 +44,19 @@ final class IndexedStateT[F[_], SA, SB, A](val runF: F[SA => F[(SB, A)]]) extend
* Modify the context `F` using transformation `f`.
*/
def mapK[G[_]](f: F ~> G)(implicit F: Functor[F]): IndexedStateT[G, SA, SB, A] =
- IndexedStateT.applyF(
- f(F.map(runF)(_.andThen(fsa => f(fsa)))))
+ IndexedStateT.applyF(f(F.map(runF)(_.andThen(fsa => f(fsa)))))
def contramap[S0](f: S0 => SA)(implicit F: Functor[F]): IndexedStateT[F, S0, SB, A] =
IndexedStateT.applyF {
- F.map(runF) { safsba =>
- (s0: S0) => safsba(f(s0))
+ F.map(runF) { safsba => (s0: S0) =>
+ safsba(f(s0))
}
}
def bimap[SC, B](f: SB => SC, g: A => B)(implicit F: Functor[F]): IndexedStateT[F, SA, SC, B] =
- transform { (s, a) => (f(s), g(a)) }
+ transform { (s, a) =>
+ (f(s), g(a))
+ }
def dimap[S0, S1](f: S0 => SA)(g: SB => S1)(implicit F: Functor[F]): IndexedStateT[F, S0, S1, A] =
contramap(f).modify(g)
@@ -98,12 +100,11 @@ final class IndexedStateT[F[_], SA, SB, A](val runF: F[SA => F[(SB, A)]]) extend
* Like [[map]], but also allows the state (`S`) value to be modified.
*/
def transform[B, SC](f: (SB, A) => (SC, B))(implicit F: Functor[F]): IndexedStateT[F, SA, SC, B] =
- IndexedStateT.applyF(
- F.map(runF) { sfsa =>
- sfsa.andThen { fsa =>
- F.map(fsa) { case (s, a) => f(s, a) }
- }
- })
+ IndexedStateT.applyF(F.map(runF) { sfsa =>
+ sfsa.andThen { fsa =>
+ F.map(fsa) { case (s, a) => f(s, a) }
+ }
+ })
/**
* Like [[transform]], but allows the context to change from `F` to `G`.
@@ -120,7 +121,8 @@ final class IndexedStateT[F[_], SA, SB, A](val runF: F[SA => F[(SB, A)]]) extend
* res1: Option[(Int, Int)] = Some((5,5))
* }}}
*/
- def transformF[G[_], B, SC](f: F[(SB, A)] => G[(SC, B)])(implicit F: FlatMap[F], G: Applicative[G]): IndexedStateT[G, SA, SC, B] =
+ def transformF[G[_], B, SC](f: F[(SB, A)] => G[(SC, B)])(implicit F: FlatMap[F],
+ G: Applicative[G]): IndexedStateT[G, SA, SC, B] =
IndexedStateT(s => f(run(s)))
/**
@@ -228,7 +230,7 @@ private[data] trait CommonStateTConstructors0 extends CommonStateTConstructors {
pure(A.empty)
}
-private[data] abstract class StateTFunctions extends CommonStateTConstructors {
+abstract private[data] class StateTFunctions extends CommonStateTConstructors {
def apply[F[_], S, A](f: S => F[(S, A)])(implicit F: Applicative[F]): StateT[F, S, A] =
IndexedStateT(f)
@@ -248,9 +250,11 @@ private[data] abstract class StateTFunctions extends CommonStateTConstructors {
apply(_ => F.map(fs)(s => (s, ())))
}
-private[data] sealed abstract class IndexedStateTInstances extends IndexedStateTInstances1 {
- implicit def catsDataAlternativeForIndexedStateT[F[_], S](implicit FM: Monad[F],
- FA: Alternative[F]): Alternative[IndexedStateT[F, S, S, ?]] with Monad[IndexedStateT[F, S, S, ?]] =
+sealed abstract private[data] class IndexedStateTInstances extends IndexedStateTInstances1 {
+ implicit def catsDataAlternativeForIndexedStateT[F[_], S](
+ implicit FM: Monad[F],
+ FA: Alternative[F]
+ ): Alternative[IndexedStateT[F, S, S, ?]] with Monad[IndexedStateT[F, S, S, ?]] =
new IndexedStateTAlternative[F, S] { implicit def F = FM; implicit def G = FA }
implicit def catsDataDeferForIndexedStateT[F[_], SA, SB](implicit F: Defer[F]): Defer[IndexedStateT[F, SA, SB, ?]] =
@@ -260,41 +264,54 @@ private[data] sealed abstract class IndexedStateTInstances extends IndexedStateT
}
}
-private[data] sealed abstract class IndexedStateTInstances1 extends IndexedStateTInstances2 {
- implicit def catsDataMonadErrorForIndexedStateT[F[_], S, E](implicit F0: MonadError[F, E]): MonadError[IndexedStateT[F, S, S, ?], E] =
+sealed abstract private[data] class IndexedStateTInstances1 extends IndexedStateTInstances2 {
+ implicit def catsDataMonadErrorForIndexedStateT[F[_], S, E](
+ implicit F0: MonadError[F, E]
+ ): MonadError[IndexedStateT[F, S, S, ?], E] =
new IndexedStateTMonadError[F, S, E] { implicit def F = F0 }
- implicit def catsDataSemigroupKForIndexedStateT[F[_], SA, SB](implicit F0: Monad[F], G0: SemigroupK[F]): SemigroupK[IndexedStateT[F, SA, SB, ?]] =
+ implicit def catsDataSemigroupKForIndexedStateT[F[_], SA, SB](
+ implicit F0: Monad[F],
+ G0: SemigroupK[F]
+ ): SemigroupK[IndexedStateT[F, SA, SB, ?]] =
new IndexedStateTSemigroupK[F, SA, SB] { implicit def F = F0; implicit def G = G0 }
}
-private[data] sealed abstract class IndexedStateTInstances2 extends IndexedStateTInstances3 {
+sealed abstract private[data] class IndexedStateTInstances2 extends IndexedStateTInstances3 {
implicit def catsDataMonadForIndexedStateT[F[_], S](implicit F0: Monad[F]): Monad[IndexedStateT[F, S, S, ?]] =
new IndexedStateTMonad[F, S] { implicit def F = F0 }
}
-private[data] sealed abstract class IndexedStateTInstances3 extends IndexedStateTInstances4 {
- implicit def catsDataFunctorForIndexedStateT[F[_], SA, SB](implicit F0: Functor[F]): Functor[IndexedStateT[F, SA, SB, ?]] =
+sealed abstract private[data] class IndexedStateTInstances3 extends IndexedStateTInstances4 {
+ implicit def catsDataFunctorForIndexedStateT[F[_], SA, SB](
+ implicit F0: Functor[F]
+ ): Functor[IndexedStateT[F, SA, SB, ?]] =
new IndexedStateTFunctor[F, SA, SB] { implicit def F = F0 }
- implicit def catsDataContravariantForIndexedStateT[F[_], SB, V](implicit F0: Functor[F]): Contravariant[IndexedStateT[F, ?, SB, V]] =
+ implicit def catsDataContravariantForIndexedStateT[F[_], SB, V](
+ implicit F0: Functor[F]
+ ): Contravariant[IndexedStateT[F, ?, SB, V]] =
new IndexedStateTContravariant[F, SB, V] { implicit def F = F0 }
- implicit def catsDataProfunctorForIndexedStateT[F[_], V](implicit F0: Functor[F]): Profunctor[IndexedStateT[F, ?, ?, V]] =
+ implicit def catsDataProfunctorForIndexedStateT[F[_], V](
+ implicit F0: Functor[F]
+ ): Profunctor[IndexedStateT[F, ?, ?, V]] =
new IndexedStateTProfunctor[F, V] { implicit def F = F0 }
- implicit def catsDataBifunctorForIndexedStateT[F[_], SA](implicit F0: Functor[F]): Bifunctor[IndexedStateT[F, SA, ?, ?]] =
+ implicit def catsDataBifunctorForIndexedStateT[F[_], SA](
+ implicit F0: Functor[F]
+ ): Bifunctor[IndexedStateT[F, SA, ?, ?]] =
new IndexedStateTBifunctor[F, SA] { implicit def F = F0 }
}
-private[data] sealed abstract class IndexedStateTInstances4 {
+sealed abstract private[data] class IndexedStateTInstances4 {
implicit def catsDataStrongForIndexedStateT[F[_], V](implicit F0: Monad[F]): Strong[IndexedStateT[F, ?, ?, V]] =
new IndexedStateTStrong[F, V] { implicit def F = F0 }
}
// To workaround SI-7139 `object State` needs to be defined inside the package object
// together with the type alias.
-private[data] abstract class StateFunctions {
+abstract private[data] class StateFunctions {
def apply[S, A](f: S => (S, A)): State[S, A] =
IndexedStateT.applyF(Now((s: S) => Now(f(s))))
@@ -305,8 +322,8 @@ private[data] abstract class StateFunctions {
def pure[S, A](a: A): State[S, A] = State(s => (s, a))
/**
- * Return `A`'s empty monoid value and maintain the input state.
- */
+ * Return `A`'s empty monoid value and maintain the input state.
+ */
def empty[S, A](implicit A: Monoid[A]): State[S, A] = pure(A.empty)
/**
@@ -330,49 +347,56 @@ private[data] abstract class StateFunctions {
def set[S](s: S): State[S, Unit] = State(_ => (s, ()))
}
-private[data] sealed abstract class IndexedStateTFunctor[F[_], SA, SB] extends Functor[IndexedStateT[F, SA, SB, ?]] {
+sealed abstract private[data] class IndexedStateTFunctor[F[_], SA, SB] extends Functor[IndexedStateT[F, SA, SB, ?]] {
implicit def F: Functor[F]
override def map[A, B](fa: IndexedStateT[F, SA, SB, A])(f: A => B): IndexedStateT[F, SA, SB, B] =
fa.map(f)
}
-private[data] sealed abstract class IndexedStateTContravariant[F[_], SB, V] extends Contravariant[IndexedStateT[F, ?, SB, V]] {
+sealed abstract private[data] class IndexedStateTContravariant[F[_], SB, V]
+ extends Contravariant[IndexedStateT[F, ?, SB, V]] {
implicit def F: Functor[F]
override def contramap[A, B](fa: IndexedStateT[F, A, SB, V])(f: B => A): IndexedStateT[F, B, SB, V] =
fa.contramap(f)
}
-private[data] sealed abstract class IndexedStateTBifunctor[F[_], SA] extends Bifunctor[IndexedStateT[F, SA, ?, ?]] {
+sealed abstract private[data] class IndexedStateTBifunctor[F[_], SA] extends Bifunctor[IndexedStateT[F, SA, ?, ?]] {
implicit def F: Functor[F]
def bimap[A, B, C, D](fab: IndexedStateT[F, SA, A, B])(f: A => C, g: B => D): IndexedStateT[F, SA, C, D] =
fab.bimap(f, g)
}
-private[data] sealed abstract class IndexedStateTProfunctor[F[_], V] extends Profunctor[IndexedStateT[F, ?, ?, V]] {
+sealed abstract private[data] class IndexedStateTProfunctor[F[_], V] extends Profunctor[IndexedStateT[F, ?, ?, V]] {
implicit def F: Functor[F]
def dimap[A, B, C, D](fab: IndexedStateT[F, A, B, V])(f: C => A)(g: B => D): IndexedStateT[F, C, D, V] =
fab.dimap(f)(g)
}
-private[data] sealed abstract class IndexedStateTStrong[F[_], V] extends IndexedStateTProfunctor[F, V] with Strong[IndexedStateT[F, ?, ?, V]] {
+sealed abstract private[data] class IndexedStateTStrong[F[_], V]
+ extends IndexedStateTProfunctor[F, V]
+ with Strong[IndexedStateT[F, ?, ?, V]] {
implicit def F: Monad[F]
def first[A, B, C](fa: IndexedStateT[F, A, B, V]): IndexedStateT[F, (A, C), (B, C), V] =
- IndexedStateT { case (a, c) =>
- F.map(fa.run(a)) { case (b, v) =>
- ((b, c), v)
- }
+ IndexedStateT {
+ case (a, c) =>
+ F.map(fa.run(a)) {
+ case (b, v) =>
+ ((b, c), v)
+ }
}
def second[A, B, C](fa: IndexedStateT[F, A, B, V]): IndexedStateT[F, (C, A), (C, B), V] =
first(fa).dimap((_: (C, A)).swap)(_.swap)
}
-private[data] sealed abstract class IndexedStateTMonad[F[_], S] extends IndexedStateTFunctor[F, S, S] with Monad[IndexedStateT[F, S, S, ?]] {
+sealed abstract private[data] class IndexedStateTMonad[F[_], S]
+ extends IndexedStateTFunctor[F, S, S]
+ with Monad[IndexedStateT[F, S, S, ?]] {
implicit def F: Monad[F]
def pure[A](a: A): IndexedStateT[F, S, S, A] =
@@ -382,12 +406,16 @@ private[data] sealed abstract class IndexedStateTMonad[F[_], S] extends IndexedS
fa.flatMap(f)
def tailRecM[A, B](a: A)(f: A => IndexedStateT[F, S, S, Either[A, B]]): IndexedStateT[F, S, S, B] =
- IndexedStateT[F, S, S, B](s => F.tailRecM[(S, A), (S, B)]((s, a)) {
- case (s, a) => F.map(f(a).run(s)) { case (s, ab) => ab.bimap((s, _), (s, _)) }
- })
+ IndexedStateT[F, S, S, B](
+ s =>
+ F.tailRecM[(S, A), (S, B)]((s, a)) {
+ case (s, a) => F.map(f(a).run(s)) { case (s, ab) => ab.bimap((s, _), (s, _)) }
+ }
+ )
}
-private[data] sealed abstract class IndexedStateTSemigroupK[F[_], SA, SB] extends SemigroupK[IndexedStateT[F, SA, SB, ?]] {
+sealed abstract private[data] class IndexedStateTSemigroupK[F[_], SA, SB]
+ extends SemigroupK[IndexedStateT[F, SA, SB, ?]] {
implicit def F: Monad[F]
implicit def G: SemigroupK[F]
@@ -395,29 +423,39 @@ private[data] sealed abstract class IndexedStateTSemigroupK[F[_], SA, SB] extend
IndexedStateT(s => G.combineK(x.run(s), y.run(s)))
}
-private[data] sealed abstract class IndexedStateTContravariantMonoidal[F[_], S] extends ContravariantMonoidal[IndexedStateT[F, S, S, ?]]{
+sealed abstract private[data] class IndexedStateTContravariantMonoidal[F[_], S]
+ extends ContravariantMonoidal[IndexedStateT[F, S, S, ?]] {
implicit def F: ContravariantMonoidal[F]
implicit def G: Applicative[F]
- override def unit: IndexedStateT[F, S, S, Unit] =
+ override def unit: IndexedStateT[F, S, S, Unit] =
IndexedStateT.applyF(G.pure((s: S) => F.trivial[(S, Unit)]))
override def contramap[A, B](fa: IndexedStateT[F, S, S, A])(f: B => A): IndexedStateT[F, S, S, B] =
- contramap2(fa, trivial)(((a: A) => (a, a)) compose f)
+ contramap2(fa, trivial)(((a: A) => (a, a)).compose(f))
- override def product[A, B](fa: IndexedStateT[F, S, S, A], fb: IndexedStateT[F, S, S, B]): IndexedStateT[F, S, S, (A, B)] =
+ override def product[A, B](fa: IndexedStateT[F, S, S, A],
+ fb: IndexedStateT[F, S, S, B]): IndexedStateT[F, S, S, (A, B)] =
contramap2(fa, fb)(identity)
- def contramap2[A, B, C](fb: IndexedStateT[F, S, S, B], fc: IndexedStateT[F, S, S, C])(f: A => (B, C)): IndexedStateT[F, S, S, A] =
+ def contramap2[A, B, C](fb: IndexedStateT[F, S, S, B],
+ fc: IndexedStateT[F, S, S, C])(f: A => (B, C)): IndexedStateT[F, S, S, A] =
IndexedStateT.applyF(
- G.pure((s: S) =>
- ContravariantMonoidal.contramap2(G.map(fb.runF)(_.apply(s)), G.map(fc.runF)(_.apply(s)))(
- (tup: (S, A)) => f(tup._2) match {
- case (b, c) => (G.pure((tup._1, b)), G.pure((tup._1, c)))
- })(G, F)))
+ G.pure(
+ (s: S) =>
+ ContravariantMonoidal.contramap2(G.map(fb.runF)(_.apply(s)), G.map(fc.runF)(_.apply(s)))(
+ (tup: (S, A)) =>
+ f(tup._2) match {
+ case (b, c) => (G.pure((tup._1, b)), G.pure((tup._1, c)))
+ }
+ )(G, F)
+ )
+ )
}
-private[data] sealed abstract class IndexedStateTAlternative[F[_], S] extends IndexedStateTMonad[F, S] with Alternative[IndexedStateT[F, S, S, ?]] {
+sealed abstract private[data] class IndexedStateTAlternative[F[_], S]
+ extends IndexedStateTMonad[F, S]
+ with Alternative[IndexedStateT[F, S, S, ?]] {
def G: Alternative[F]
def combineK[A](x: IndexedStateT[F, S, S, A], y: IndexedStateT[F, S, S, A]): IndexedStateT[F, S, S, A] =
@@ -427,7 +465,8 @@ private[data] sealed abstract class IndexedStateTAlternative[F[_], S] extends In
IndexedStateT.liftF[F, S, A](G.empty[A])(G)
}
-private[data] sealed abstract class IndexedStateTMonadError[F[_], S, E] extends IndexedStateTMonad[F, S]
+sealed abstract private[data] class IndexedStateTMonadError[F[_], S, E]
+ extends IndexedStateTMonad[F, S]
with MonadError[IndexedStateT[F, S, S, ?], E] {
implicit def F: MonadError[F, E]
diff --git a/core/src/main/scala/cats/data/Ior.scala b/core/src/main/scala/cats/data/Ior.scala
index cc7e5a0152..a9c3be8c6a 100644
--- a/core/src/main/scala/cats/data/Ior.scala
+++ b/core/src/main/scala/cats/data/Ior.scala
@@ -26,8 +26,8 @@ import scala.annotation.tailrec
sealed abstract class Ior[+A, +B] extends Product with Serializable {
final def fold[C](fa: A => C, fb: B => C, fab: (A, B) => C): C = this match {
- case Ior.Left(a) => fa(a)
- case Ior.Right(b) => fb(b)
+ case Ior.Left(a) => fa(a)
+ case Ior.Right(b) => fb(b)
case Ior.Both(a, b) => fab(a, b)
}
@@ -47,7 +47,8 @@ sealed abstract class Ior[+A, +B] extends Product with Serializable {
final def onlyLeftOrRight: Option[Either[A, B]] = fold(a => Some(Left(a)), b => Some(Right(b)), (_, _) => None)
final def onlyBoth: Option[(A, B)] = fold(_ => None, _ => None, (a, b) => Some((a, b)))
final def pad: (Option[A], Option[B]) = fold(a => (Some(a), None), b => (None, Some(b)), (a, b) => (Some(a), Some(b)))
- final def unwrap: Either[Either[A, B], (A, B)] = fold(a => Left(Left(a)), b => Left(Right(b)), (a, b) => Right((a, b)))
+ final def unwrap: Either[Either[A, B], (A, B)] =
+ fold(a => Left(Left(a)), b => Left(Right(b)), (a, b) => Right((a, b)))
final def toIorNes[AA >: A](implicit O: Order[AA]): IorNes[AA, B] = leftMap(NonEmptySet.one(_))
final def toIorNec[AA >: A]: IorNec[AA, B] = leftMap(NonEmptyChain.one)
@@ -63,9 +64,9 @@ sealed abstract class Ior[+A, +B] extends Product with Serializable {
final def swap: B Ior A = fold(Ior.right, Ior.left, (a, b) => Ior.both(b, a))
- final def exists(p: B => Boolean): Boolean = right exists p
- final def forall(p: B => Boolean): Boolean = right forall p
- final def getOrElse[BB >: B](bb: => BB): BB = right getOrElse bb
+ final def exists(p: B => Boolean): Boolean = right.exists(p)
+ final def forall(p: B => Boolean): Boolean = right.forall(p)
+ final def getOrElse[BB >: B](bb: => BB): BB = right.getOrElse(bb)
final def valueOr[BB >: B](f: A => BB)(implicit BB: Semigroup[BB]): BB =
fold(f, identity, (a, b) => BB.combine(f(a), b))
@@ -77,12 +78,13 @@ sealed abstract class Ior[+A, +B] extends Product with Serializable {
final def flatMap[AA >: A, D](f: B => AA Ior D)(implicit AA: Semigroup[AA]): AA Ior D = this match {
case l @ Ior.Left(_) => l
- case Ior.Right(b) => f(b)
- case Ior.Both(a1, b) => f(b) match {
- case Ior.Left(a2) => Ior.Left(AA.combine(a1, a2))
- case Ior.Right(b) => Ior.Both(a1, b)
- case Ior.Both(a2, d) => Ior.Both(AA.combine(a1, a2), d)
- }
+ case Ior.Right(b) => f(b)
+ case Ior.Both(a1, b) =>
+ f(b) match {
+ case Ior.Left(a2) => Ior.Left(AA.combine(a1, a2))
+ case Ior.Right(b) => Ior.Both(a1, b)
+ case Ior.Both(a2, d) => Ior.Both(AA.combine(a1, a2), d)
+ }
}
final def foreach(f: B => Unit): Unit = {
@@ -91,8 +93,8 @@ sealed abstract class Ior[+A, +B] extends Product with Serializable {
}
final def traverse[F[_], AA >: A, D](g: B => F[D])(implicit F: Applicative[F]): F[AA Ior D] = this match {
- case Ior.Left(a) => F.pure(Ior.left(a))
- case Ior.Right(b) => F.map(g(b))(Ior.right)
+ case Ior.Left(a) => F.pure(Ior.left(a))
+ case Ior.Right(b) => F.map(g(b))(Ior.right)
case Ior.Both(a, b) => F.map(g(b))(d => Ior.both(a, d))
}
@@ -110,23 +112,27 @@ sealed abstract class Ior[+A, +B] extends Product with Serializable {
fold(identity, ev, (_, b) => ev(b))
// scalastyle:off cyclomatic.complexity
- final def combine[AA >: A, BB >: B](that: AA Ior BB)(implicit AA: Semigroup[AA], BB: Semigroup[BB]): AA Ior BB = this match {
- case Ior.Left(a1) => that match {
- case Ior.Left(a2) => Ior.Left(AA.combine(a1, a2))
- case Ior.Right(b2) => Ior.Both(a1, b2)
- case Ior.Both(a2, b2) => Ior.Both(AA.combine(a1, a2), b2)
- }
- case Ior.Right(b1) => that match {
- case Ior.Left(a2) => Ior.Both(a2, b1)
- case Ior.Right(b2) => Ior.Right(BB.combine(b1, b2))
- case Ior.Both(a2, b2) => Ior.Both(a2, BB.combine(b1, b2))
- }
- case Ior.Both(a1, b1) => that match {
- case Ior.Left(a2) => Ior.Both(AA.combine(a1, a2), b1)
- case Ior.Right(b2) => Ior.Both(a1, BB.combine(b1, b2))
- case Ior.Both(a2, b2) => Ior.Both(AA.combine(a1, a2), BB.combine(b1, b2))
+ final def combine[AA >: A, BB >: B](that: AA Ior BB)(implicit AA: Semigroup[AA], BB: Semigroup[BB]): AA Ior BB =
+ this match {
+ case Ior.Left(a1) =>
+ that match {
+ case Ior.Left(a2) => Ior.Left(AA.combine(a1, a2))
+ case Ior.Right(b2) => Ior.Both(a1, b2)
+ case Ior.Both(a2, b2) => Ior.Both(AA.combine(a1, a2), b2)
+ }
+ case Ior.Right(b1) =>
+ that match {
+ case Ior.Left(a2) => Ior.Both(a2, b1)
+ case Ior.Right(b2) => Ior.Right(BB.combine(b1, b2))
+ case Ior.Both(a2, b2) => Ior.Both(a2, BB.combine(b1, b2))
+ }
+ case Ior.Both(a1, b1) =>
+ that match {
+ case Ior.Left(a2) => Ior.Both(AA.combine(a1, a2), b1)
+ case Ior.Right(b2) => Ior.Both(a1, BB.combine(b1, b2))
+ case Ior.Both(a2, b2) => Ior.Both(AA.combine(a1, a2), BB.combine(b1, b2))
+ }
}
- }
// scalastyle:on cyclomatic.complexity
final def ===[AA >: A, BB >: B](that: AA Ior BB)(implicit AA: Eq[AA], BB: Eq[BB]): Boolean = fold(
@@ -148,28 +154,30 @@ object Ior extends IorInstances with IorFunctions with IorFunctions2 {
final case class Both[+A, +B](a: A, b: B) extends (A Ior B)
}
-private[data] sealed abstract class IorInstances extends IorInstances0 {
+sealed abstract private[data] class IorInstances extends IorInstances0 {
implicit val catsBitraverseForIor: Bitraverse[Ior] = new Bitraverse[Ior] {
- def bitraverse[G[_], A, B, C, D](fab: Ior[A, B])(f: A => G[C], g: B => G[D])(implicit G: Applicative[G]): G[Ior[C, D]] =
+ def bitraverse[G[_], A, B, C, D](fab: Ior[A, B])(f: A => G[C],
+ g: B => G[D])(implicit G: Applicative[G]): G[Ior[C, D]] =
fab match {
- case Ior.Left(a) => G.map(f(a))(Ior.Left(_))
- case Ior.Right(b) => G.map(g(b))(Ior.Right(_))
+ case Ior.Left(a) => G.map(f(a))(Ior.Left(_))
+ case Ior.Right(b) => G.map(g(b))(Ior.Right(_))
case Ior.Both(a, b) => G.map2(f(a), g(b))(Ior.Both(_, _))
}
def bifoldLeft[A, B, C](fab: Ior[A, B], c: C)(f: (C, A) => C, g: (C, B) => C): C =
fab match {
- case Ior.Left(a) => f(c, a)
- case Ior.Right(b) => g(c, b)
+ case Ior.Left(a) => f(c, a)
+ case Ior.Right(b) => g(c, b)
case Ior.Both(a, b) => g(f(c, a), b)
}
- def bifoldRight[A, B, C](fab: Ior[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ def bifoldRight[A, B, C](fab: Ior[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
fab match {
- case Ior.Left(a) => f(a, c)
- case Ior.Right(b) => g(b, c)
+ case Ior.Left(a) => f(a, c)
+ case Ior.Right(b) => g(b, c)
case Ior.Both(a, b) => g(b, f(a, c))
}
}
@@ -194,7 +202,7 @@ private[data] sealed abstract class IorInstances extends IorInstances0 {
def handleErrorWith[B](fa: Ior[A, B])(f: (A) => Ior[A, B]): Ior[A, B] =
fa match {
case Ior.Left(e) => f(e)
- case _ => fa
+ case _ => fa
}
def flatMap[B, C](fa: Ior[A, B])(f: B => Ior[A, C]): Ior[A, C] = fa.flatMap(f)
@@ -202,21 +210,21 @@ private[data] sealed abstract class IorInstances extends IorInstances0 {
override def map2Eval[B, C, Z](fa: Ior[A, B], fb: Eval[Ior[A, C]])(f: (B, C) => Z): Eval[Ior[A, Z]] =
fa match {
case l @ Ior.Left(_) => Eval.now(l) // no need to evaluate fb
- case notLeft => fb.map(fb => map2(notLeft, fb)(f))
+ case notLeft => fb.map(fb => map2(notLeft, fb)(f))
}
def tailRecM[B, C](b: B)(fn: B => Ior[A, Either[B, C]]): A Ior C = {
@tailrec
def loop(v: Ior[A, Either[B, C]]): A Ior C = v match {
- case Ior.Left(a) => Ior.left(a)
- case Ior.Right(Right(c)) => Ior.right(c)
+ case Ior.Left(a) => Ior.left(a)
+ case Ior.Right(Right(c)) => Ior.right(c)
case Ior.Both(a, Right(c)) => Ior.both(a, c)
- case Ior.Right(Left(b)) => loop(fn(b))
+ case Ior.Right(Left(b)) => loop(fn(b))
case Ior.Both(a, Left(b)) =>
fn(b) match {
- case Ior.Left(aa) => Ior.left(Semigroup[A].combine(a, aa))
+ case Ior.Left(aa) => Ior.left(Semigroup[A].combine(a, aa))
case Ior.Both(aa, x) => loop(Ior.both(Semigroup[A].combine(a, aa), x))
- case Ior.Right(x) => loop(Ior.both(a, x))
+ case Ior.Right(x) => loop(Ior.both(a, x))
}
}
loop(fn(b))
@@ -234,45 +242,46 @@ private[data] sealed abstract class IorInstances extends IorInstances0 {
}
// scalastyle:off cyclomatic.complexity
- implicit def catsDataParallelForIor[E]
- (implicit E: Semigroup[E]): Parallel[Ior[E, ?], Ior[E, ?]] = new Parallel[Ior[E, ?], Ior[E, ?]]
- {
-
- private[this] val identityK: Ior[E, ?] ~> Ior[E, ?] = FunctionK.id
-
- def parallel: Ior[E, ?] ~> Ior[E, ?] = identityK
- def sequential: Ior[E, ?] ~> Ior[E, ?] = identityK
-
- val applicative: Applicative[Ior[E, ?]] = new Applicative[Ior[E, ?]] {
- def pure[A](a: A): Ior[E, A] = Ior.right(a)
- def ap[A, B](ff: Ior[E, A => B])(fa: Ior[E, A]): Ior[E, B] =
- fa match {
- case Ior.Right(a) => ff match {
- case Ior.Right(f) => Ior.Right(f(a))
- case Ior.Both(e1, f) => Ior.Both(e1, f(a))
- case Ior.Left(e1) => Ior.Left(e1)
+ implicit def catsDataParallelForIor[E](implicit E: Semigroup[E]): Parallel[Ior[E, ?], Ior[E, ?]] =
+ new Parallel[Ior[E, ?], Ior[E, ?]] {
+
+ private[this] val identityK: Ior[E, ?] ~> Ior[E, ?] = FunctionK.id
+
+ def parallel: Ior[E, ?] ~> Ior[E, ?] = identityK
+ def sequential: Ior[E, ?] ~> Ior[E, ?] = identityK
+
+ val applicative: Applicative[Ior[E, ?]] = new Applicative[Ior[E, ?]] {
+ def pure[A](a: A): Ior[E, A] = Ior.right(a)
+ def ap[A, B](ff: Ior[E, A => B])(fa: Ior[E, A]): Ior[E, B] =
+ fa match {
+ case Ior.Right(a) =>
+ ff match {
+ case Ior.Right(f) => Ior.Right(f(a))
+ case Ior.Both(e1, f) => Ior.Both(e1, f(a))
+ case Ior.Left(e1) => Ior.Left(e1)
+ }
+ case Ior.Both(e1, a) =>
+ ff match {
+ case Ior.Right(f) => Ior.Both(e1, f(a))
+ case Ior.Both(e2, f) => Ior.Both(E.combine(e2, e1), f(a))
+ case Ior.Left(e2) => Ior.Left(E.combine(e2, e1))
+ }
+ case Ior.Left(e1) =>
+ ff match {
+ case Ior.Right(f) => Ior.Left(e1)
+ case Ior.Both(e2, f) => Ior.Left(E.combine(e2, e1))
+ case Ior.Left(e2) => Ior.Left(E.combine(e2, e1))
+ }
}
- case Ior.Both(e1, a) => ff match {
- case Ior.Right(f) => Ior.Both(e1, f(a))
- case Ior.Both(e2, f) => Ior.Both(E.combine(e2, e1), f(a))
- case Ior.Left(e2) => Ior.Left(E.combine(e2, e1))
- }
- case Ior.Left(e1) => ff match {
- case Ior.Right(f) => Ior.Left(e1)
- case Ior.Both(e2, f) => Ior.Left(E.combine(e2, e1))
- case Ior.Left(e2) => Ior.Left(E.combine(e2, e1))
- }
- }
- }
+ }
- lazy val monad: Monad[Ior[E, ?]] = Monad[Ior[E, ?]]
- }
+ lazy val monad: Monad[Ior[E, ?]] = Monad[Ior[E, ?]]
+ }
// scalastyle:on cyclomatic.complexity
-
}
-private[data] sealed abstract class IorInstances0 {
+sealed abstract private[data] class IorInstances0 {
implicit def catsDataTraverseFunctorForIor[A]: Traverse[A Ior ?] = new Traverse[A Ior ?] {
def traverse[F[_]: Applicative, B, C](fa: A Ior B)(f: B => F[C]): F[A Ior C] =
@@ -296,7 +305,7 @@ private[data] sealed abstract class IorInstances0 {
}
}
-private[data] sealed trait IorFunctions {
+sealed private[data] trait IorFunctions {
def left[A, B](a: A): A Ior B = Ior.Left(a)
def right[A, B](b: B): A Ior B = Ior.Right(b)
def both[A, B](a: A, b: B): A Ior B = Ior.Both(a, b)
@@ -327,14 +336,16 @@ private[data] sealed trait IorFunctions {
*/
def fromOptions[A, B](oa: Option[A], ob: Option[B]): Option[A Ior B] =
oa match {
- case Some(a) => ob match {
- case Some(b) => Some(Ior.Both(a, b))
- case None => Some(Ior.Left(a))
- }
- case None => ob match {
- case Some(b) => Some(Ior.Right(b))
- case None => None
- }
+ case Some(a) =>
+ ob match {
+ case Some(b) => Some(Ior.Both(a, b))
+ case None => Some(Ior.Left(a))
+ }
+ case None =>
+ ob match {
+ case Some(b) => Some(Ior.Right(b))
+ case None => None
+ }
}
/**
@@ -354,12 +365,12 @@ private[data] sealed trait IorFunctions {
*/
def fromEither[A, B](eab: Either[A, B]): A Ior B =
eab match {
- case Left(a) => left(a)
+ case Left(a) => left(a)
case Right(b) => right(b)
}
}
-private[data] sealed trait IorFunctions2{
+sealed private[data] trait IorFunctions2 {
def leftNec[A, B](a: A): IorNec[A, B] = Ior.left(NonEmptyChain.one(a))
def bothNec[A, B](a: A, b: B): IorNec[A, B] = Ior.both(NonEmptyChain.one(a), b)
}
diff --git a/core/src/main/scala/cats/data/IorT.scala b/core/src/main/scala/cats/data/IorT.scala
index 7afbff8d2d..bc0b14f854 100644
--- a/core/src/main/scala/cats/data/IorT.scala
+++ b/core/src/main/scala/cats/data/IorT.scala
@@ -7,7 +7,8 @@ import cats.syntax.option._
final case class IorT[F[_], A, B](value: F[Ior[A, B]]) {
- def fold[C](fa: A => C, fb: B => C, fab: (A, B) => C)(implicit F: Functor[F]): F[C] = F.map(value)(_.fold(fa, fb, fab))
+ def fold[C](fa: A => C, fb: B => C, fab: (A, B) => C)(implicit F: Functor[F]): F[C] =
+ F.map(value)(_.fold(fa, fb, fab))
def isLeft(implicit F: Functor[F]): F[Boolean] = F.map(value)(_.isLeft)
@@ -21,8 +22,8 @@ final case class IorT[F[_], A, B](value: F[Ior[A, B]]) {
def getOrElseF[BB >: B](default: => F[BB])(implicit F: Monad[F]): F[BB] =
F.flatMap(value) {
- case Ior.Left(_) => default
- case Ior.Right(b) => F.pure(b)
+ case Ior.Left(_) => default
+ case Ior.Right(b) => F.pure(b)
case Ior.Both(_, b) => F.pure(b)
}
@@ -61,20 +62,21 @@ final case class IorT[F[_], A, B](value: F[Ior[A, B]]) {
def leftFlatMap[BB >: B, C](f: A => IorT[F, C, BB])(implicit F: Monad[F], BB: Semigroup[BB]): IorT[F, C, BB] =
IorT(F.flatMap(value) {
- case Ior.Left(a) => f(a).value
+ case Ior.Left(a) => f(a).value
case r @ Ior.Right(_) => F.pure(r.asInstanceOf[Ior[C, BB]])
- case Ior.Both(a, b) => F.map(f(a).value) {
- case Ior.Left(c) => Ior.Both(c, b)
- case Ior.Right(b1) => Ior.Right(BB.combine(b, b1))
- case Ior.Both(c, b1) => Ior.Both(c, BB.combine(b, b1))
- }
+ case Ior.Both(a, b) =>
+ F.map(f(a).value) {
+ case Ior.Left(c) => Ior.Both(c, b)
+ case Ior.Right(b1) => Ior.Right(BB.combine(b, b1))
+ case Ior.Both(c, b1) => Ior.Both(c, BB.combine(b, b1))
+ }
})
def leftSemiflatMap[C](f: A => F[C])(implicit F: Monad[F]): IorT[F, C, B] =
IorT(F.flatMap(value) {
- case Ior.Left(a) => F.map(f(a))(Ior.Left(_))
+ case Ior.Left(a) => F.map(f(a))(Ior.Left(_))
case r @ Ior.Right(_) => F.pure(r.asInstanceOf[Ior[C, B]])
- case Ior.Both(a, b) => F.map(f(a))(Ior.Both(_, b))
+ case Ior.Both(a, b) => F.map(f(a))(Ior.Both(_, b))
})
def transform[C, D](f: Ior[A, B] => Ior[C, D])(implicit F: Functor[F]): IorT[F, C, D] = IorT(F.map(value)(f))
@@ -85,16 +87,17 @@ final case class IorT[F[_], A, B](value: F[Ior[A, B]]) {
def flatMap[AA >: A, D](f: B => IorT[F, AA, D])(implicit F: Monad[F], AA: Semigroup[AA]): IorT[F, AA, D] =
IorT(F.flatMap(value) {
case l @ Ior.Left(_) => F.pure(l.asInstanceOf[Ior[AA, D]])
- case Ior.Right(b) => f(b).value
- case Ior.Both(a, b) => F.map(f(b).value) {
- case Ior.Left(a1) => Ior.Left(AA.combine(a, a1))
- case Ior.Right(d) => Ior.Both(a, d)
- case Ior.Both(a1, d) => Ior.Both(AA.combine(a, a1), d)
- }
+ case Ior.Right(b) => f(b).value
+ case Ior.Both(a, b) =>
+ F.map(f(b).value) {
+ case Ior.Left(a1) => Ior.Left(AA.combine(a, a1))
+ case Ior.Right(d) => Ior.Both(a, d)
+ case Ior.Both(a1, d) => Ior.Both(AA.combine(a, a1), d)
+ }
})
def flatMapF[AA >: A, D](f: B => F[Ior[AA, D]])(implicit F: Monad[F], AA: Semigroup[AA]): IorT[F, AA, D] =
- flatMap(f andThen IorT.apply)
+ flatMap(f.andThen(IorT.apply))
def subflatMap[AA >: A, D](f: B => Ior[AA, D])(implicit F: Functor[F], AA: Semigroup[AA]): IorT[F, AA, D] =
IorT(F.map(value)(_.flatMap(f)))
@@ -102,8 +105,8 @@ final case class IorT[F[_], A, B](value: F[Ior[A, B]]) {
def semiflatMap[D](f: B => F[D])(implicit F: Monad[F]): IorT[F, A, D] =
IorT(F.flatMap(value) {
case l @ Ior.Left(_) => F.pure(l.asInstanceOf[Ior[A, D]])
- case Ior.Right(b) => F.map(f(b))(Ior.right)
- case Ior.Both(a, b) => F.map(f(b))(Ior.both(a, _))
+ case Ior.Right(b) => F.map(f(b))(Ior.right)
+ case Ior.Both(a, b) => F.map(f(b))(Ior.both(a, _))
})
def traverse[G[_], D](f: B => G[D])(implicit traverseF: Traverse[F], applicativeG: Applicative[G]): G[IorT[F, A, D]] =
@@ -119,7 +122,7 @@ final case class IorT[F[_], A, B](value: F[Ior[A, B]]) {
eq.eqv(value, that.value)
def combine(that: IorT[F, A, B])(implicit F: Apply[F], A: Semigroup[A], B: Semigroup[B]): IorT[F, A, B] =
- IorT(F.map2(this.value, that.value)(_ combine _))
+ IorT(F.map2(this.value, that.value)(_.combine(_)))
}
object IorT extends IorTInstances {
@@ -127,7 +130,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class LeftPartiallyApplied[B](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class LeftPartiallyApplied[B](val dummy: Boolean = true) extends AnyVal {
def apply[F[_], A](fa: F[A])(implicit F: Functor[F]): IorT[F, A, B] = IorT(F.map(fa)(Ior.left))
}
@@ -145,7 +148,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class LeftTPartiallyApplied[F[_], B](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class LeftTPartiallyApplied[F[_], B](val dummy: Boolean = true) extends AnyVal {
def apply[A](a: A)(implicit F: Applicative[F]): IorT[F, A, B] = IorT(F.pure(Ior.left(a)))
}
@@ -164,7 +167,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class RightPartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class RightPartiallyApplied[A](val dummy: Boolean = true) extends AnyVal {
def apply[F[_], B](fb: F[B])(implicit F: Functor[F]): IorT[F, A, B] = IorT(F.map(fb)(Ior.right))
}
@@ -205,7 +208,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class BothTPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class BothTPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[A, B](a: A, b: B)(implicit F: Applicative[F]): IorT[F, A, B] = IorT(F.pure(Ior.Both(a, b)))
}
@@ -223,7 +226,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class PurePartiallyApplied[F[_], A](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class PurePartiallyApplied[F[_], A](val dummy: Boolean = true) extends AnyVal {
def apply[B](b: B)(implicit F: Applicative[F]): IorT[F, A, B] = IorT(F.pure(Ior.right(b)))
}
@@ -271,7 +274,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class FromIorPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class FromIorPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[A, B](ior: Ior[A, B])(implicit F: Applicative[F]): IorT[F, A, B] = IorT(F.pure(ior))
}
@@ -290,7 +293,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class FromEitherPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class FromEitherPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[E, A](either: Either[E, A])(implicit F: Applicative[F]): IorT[F, E, A] = IorT(F.pure(either.toIor))
}
@@ -322,7 +325,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class FromOptionPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class FromOptionPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[E, A](option: Option[A], ifNone: => E)(implicit F: Applicative[F]): IorT[F, E, A] =
IorT(F.pure(option.toRightIor(ifNone)))
}
@@ -360,7 +363,7 @@ object IorT extends IorTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class CondPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
+ final private[data] class CondPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[A, B](test: Boolean, right: => B, left: => A)(implicit F: Applicative[F]): IorT[F, A, B] =
IorT(F.pure(if (test) Ior.right(right) else Ior.left(left)))
}
@@ -399,7 +402,7 @@ object IorT extends IorTInstances {
IorT(if (test) F.map(right)(Ior.right) else F.map(left)(Ior.left))
}
-private[data] abstract class IorTInstances extends IorTInstances1 {
+abstract private[data] class IorTInstances extends IorTInstances1 {
implicit def catsDataShowForIorT[F[_], A, B](implicit sh: Show[F[Ior[A, B]]]): Show[IorT[F, A, B]] =
Contravariant[Show].contramap(sh)(_.value)
@@ -415,29 +418,30 @@ private[data] abstract class IorTInstances extends IorTInstances1 {
implicit def catsDataMonoidForIorT[F[_], A, B](implicit F: Monoid[F[Ior[A, B]]]): Monoid[IorT[F, A, B]] =
new IorTMonoid[F, A, B] { val F0: Monoid[F[Ior[A, B]]] = F }
- implicit def catsDataParallelForIorTWithParallelEffect[M[_], F[_], E]
- (implicit P: Parallel[M, F], E: Semigroup[E])
- : Parallel[IorT[M, E, ?], IorT[F, E, ?]] { type Dummy }
- = new Parallel[IorT[M, E, ?], IorT[F, E, ?]] {
- type Dummy // fix to make this one more specific than the catsDataParallelForIorTWithSequentialEffect, see https://github.com/typelevel/cats/pull/2335#issuecomment-408249775
+ implicit def catsDataParallelForIorTWithParallelEffect[M[_], F[_], E](
+ implicit P: Parallel[M, F],
+ E: Semigroup[E]
+ ): Parallel[IorT[M, E, ?], IorT[F, E, ?]] { type Dummy } = new Parallel[IorT[M, E, ?], IorT[F, E, ?]] {
+ type Dummy // fix to make this one more specific than the catsDataParallelForIorTWithSequentialEffect, see https://github.com/typelevel/cats/pull/2335#issuecomment-408249775
- val parallel: IorT[M, E, ?] ~> IorT[F, E, ?] = λ[IorT[M, E, ?] ~> IorT[F, E, ?]](fm => IorT(P.parallel(fm.value)))
- val sequential: IorT[F, E, ?] ~> IorT[M, E, ?] = λ[IorT[F, E, ?] ~> IorT[M, E, ?]](ff => IorT(P.sequential(ff.value)))
+ val parallel: IorT[M, E, ?] ~> IorT[F, E, ?] = λ[IorT[M, E, ?] ~> IorT[F, E, ?]](fm => IorT(P.parallel(fm.value)))
+ val sequential: IorT[F, E, ?] ~> IorT[M, E, ?] =
+ λ[IorT[F, E, ?] ~> IorT[M, E, ?]](ff => IorT(P.sequential(ff.value)))
- private[this] val FA: Applicative[F] = P.applicative
- private[this] val IorA: Applicative[Ior[E, ?]] = Parallel[Ior[E, ?], Ior[E, ?]].applicative
+ private[this] val FA: Applicative[F] = P.applicative
+ private[this] val IorA: Applicative[Ior[E, ?]] = Parallel[Ior[E, ?], Ior[E, ?]].applicative
- val applicative: Applicative[IorT[F, E, ?]] = new Applicative[IorT[F, E, ?]] {
- def pure[A](a: A): IorT[F, E, A] = IorT.pure(a)(FA)
- def ap[A, B](ff: IorT[F, E, A => B])(fa: IorT[F, E, A]): IorT[F, E, B] =
- IorT(FA.map2(ff.value, fa.value)((f, a) => IorA.ap(f)(a)))
- }
+ val applicative: Applicative[IorT[F, E, ?]] = new Applicative[IorT[F, E, ?]] {
+ def pure[A](a: A): IorT[F, E, A] = IorT.pure(a)(FA)
+ def ap[A, B](ff: IorT[F, E, A => B])(fa: IorT[F, E, A]): IorT[F, E, B] =
+ IorT(FA.map2(ff.value, fa.value)((f, a) => IorA.ap(f)(a)))
+ }
- lazy val monad: Monad[IorT[M, E, ?]] = {
- implicit def underlyingMonadM: Monad[M] = P.monad
- Monad[IorT[M, E, ?]]
- }
+ lazy val monad: Monad[IorT[M, E, ?]] = {
+ implicit def underlyingMonadM: Monad[M] = P.monad
+ Monad[IorT[M, E, ?]]
}
+ }
implicit def catsDataDeferForIor[F[_], E](implicit F: Defer[F]): Defer[IorT[F, E, ?]] =
new Defer[IorT[F, E, ?]] {
@@ -446,7 +450,7 @@ private[data] abstract class IorTInstances extends IorTInstances1 {
}
}
-private[data] abstract class IorTInstances1 extends IorTInstances2 {
+abstract private[data] class IorTInstances1 extends IorTInstances2 {
implicit def catsDataSemigroupForIorT[F[_], A, B](implicit F: Semigroup[F[Ior[A, B]]]): Semigroup[IorT[F, A, B]] =
new IorTSemigroup[F, A, B] { val F0: Semigroup[F[Ior[A, B]]] = F }
@@ -459,8 +463,10 @@ private[data] abstract class IorTInstances1 extends IorTInstances2 {
val F0: Monad[F] = F
}
- implicit def catsDataParallelForIorTWithSequentialEffect[F[_], E]
- (implicit F: Monad[F], E: Semigroup[E]): Parallel[IorT[F, E, ?], IorT[F, E, ?]] = new Parallel[IorT[F, E, ?], IorT[F, E, ?]] {
+ implicit def catsDataParallelForIorTWithSequentialEffect[F[_], E](
+ implicit F: Monad[F],
+ E: Semigroup[E]
+ ): Parallel[IorT[F, E, ?], IorT[F, E, ?]] = new Parallel[IorT[F, E, ?], IorT[F, E, ?]] {
private[this] val identityK: IorT[F, E, ?] ~> IorT[F, E, ?] = FunctionK.id
private[this] val underlyingParallel: Parallel[Ior[E, ?], Ior[E, ?]] =
Parallel[Ior[E, ?], Ior[E, ?]]
@@ -479,8 +485,9 @@ private[data] abstract class IorTInstances1 extends IorTInstances2 {
}
-private[data] abstract class IorTInstances2 extends IorTInstances3 {
- implicit def catsDataMonadErrorFForIorT[F[_], A, E](implicit FE: MonadError[F, E], A: Semigroup[A]): MonadError[IorT[F, A, ?], E] =
+abstract private[data] class IorTInstances2 extends IorTInstances3 {
+ implicit def catsDataMonadErrorFForIorT[F[_], A, E](implicit FE: MonadError[F, E],
+ A: Semigroup[A]): MonadError[IorT[F, A, ?], E] =
new IorTMonadErrorF[F, A, E] {
val A0: Semigroup[A] = A
val F0: MonadError[F, E] = FE
@@ -490,55 +497,56 @@ private[data] abstract class IorTInstances2 extends IorTInstances3 {
new IorTEq[F, A, B] { val F0: Eq[F[Ior[A, B]]] = F }
}
-private[data] abstract class IorTInstances3 {
+abstract private[data] class IorTInstances3 {
implicit def catsDataFunctorForIorT[F[_], A](implicit F: Functor[F]): Functor[IorT[F, A, ?]] =
new IorTFunctor[F, A] { val F0: Functor[F] = F }
}
-private[data] sealed trait IorTFunctor[F[_], A] extends Functor[IorT[F, A, ?]] {
+sealed private[data] trait IorTFunctor[F[_], A] extends Functor[IorT[F, A, ?]] {
implicit def F0: Functor[F]
override def map[B, D](iort: IorT[F, A, B])(f: B => D): IorT[F, A, D] = iort.map(f)
}
-private[data] sealed trait IorTEq[F[_], A, B] extends Eq[IorT[F, A, B]] {
+sealed private[data] trait IorTEq[F[_], A, B] extends Eq[IorT[F, A, B]] {
implicit def F0: Eq[F[Ior[A, B]]]
override def eqv(x: IorT[F, A, B], y: IorT[F, A, B]): Boolean = x === y
}
-private[data] sealed trait IorTMonad[F[_], A] extends Monad[IorT[F, A, ?]] with IorTFunctor[F, A] {
+sealed private[data] trait IorTMonad[F[_], A] extends Monad[IorT[F, A, ?]] with IorTFunctor[F, A] {
implicit def A0: Semigroup[A]
- override implicit def F0: Monad[F]
+ implicit override def F0: Monad[F]
override def pure[B](b: B): IorT[F, A, B] = IorT.pure(b)
override def flatMap[B, D](iort: IorT[F, A, B])(f: B => IorT[F, A, D]): IorT[F, A, D] = iort.flatMap(f)
override def tailRecM[B, D](b: B)(f: B => IorT[F, A, Either[B, D]]): IorT[F, A, D] =
- IorT(F0.tailRecM(Tuple2[B, Option[A]](b, None)) { case (b0, optionA) =>
- F0.map(f(b0).value) {
- case Ior.Left(aa) => Right(Ior.Left(Semigroup.maybeCombine(optionA, aa)))
- case Ior.Right(Left(b1)) => Left(b1 -> optionA)
- case Ior.Right(Right(d)) => Right(optionA.fold(Ior.right[A, D](d))(Ior.both(_, d)))
- case Ior.Both(aa, Right(d)) => Right(Ior.both(Semigroup.maybeCombine(optionA, aa), d))
- case Ior.Both(aa, Left(b1)) => Left(b1 -> Some(Semigroup.maybeCombine(optionA, aa)))
- }
+ IorT(F0.tailRecM(Tuple2[B, Option[A]](b, None)) {
+ case (b0, optionA) =>
+ F0.map(f(b0).value) {
+ case Ior.Left(aa) => Right(Ior.Left(Semigroup.maybeCombine(optionA, aa)))
+ case Ior.Right(Left(b1)) => Left(b1 -> optionA)
+ case Ior.Right(Right(d)) => Right(optionA.fold(Ior.right[A, D](d))(Ior.both(_, d)))
+ case Ior.Both(aa, Right(d)) => Right(Ior.both(Semigroup.maybeCombine(optionA, aa), d))
+ case Ior.Both(aa, Left(b1)) => Left(b1 -> Some(Semigroup.maybeCombine(optionA, aa)))
+ }
})
}
-private[data] sealed trait IorTMonadError[F[_], A] extends MonadError[IorT[F, A, ?], A] with IorTMonad[F, A] {
+sealed private[data] trait IorTMonadError[F[_], A] extends MonadError[IorT[F, A, ?], A] with IorTMonad[F, A] {
override def raiseError[B](a: A): IorT[F, A, B] = IorT(F0.pure(Ior.left(a)))
override def handleErrorWith[B](iort: IorT[F, A, B])(f: A => IorT[F, A, B]): IorT[F, A, B] =
IorT(F0.flatMap(iort.value) {
- case Ior.Left(a) => f(a).value
- case r @ (Ior.Right(_) | Ior.Both(_, _)) => F0.pure(r)
+ case Ior.Left(a) => f(a).value
+ case r @ (Ior.Right(_) | Ior.Both(_, _)) => F0.pure(r)
})
}
-private[data] sealed trait IorTMonadErrorF[F[_], A, E] extends MonadError[IorT[F, A, ?], E] with IorTMonad[F, A] {
- override implicit def F0: MonadError[F, E]
+sealed private[data] trait IorTMonadErrorF[F[_], A, E] extends MonadError[IorT[F, A, ?], E] with IorTMonad[F, A] {
+ implicit override def F0: MonadError[F, E]
override def raiseError[B](e: E): IorT[F, A, B] = IorT(F0.raiseError(e))
@@ -546,29 +554,30 @@ private[data] sealed trait IorTMonadErrorF[F[_], A, E] extends MonadError[IorT[F
IorT(F0.handleErrorWith(iort.value)(f(_).value))
}
-private[data] sealed trait IorTSemigroup[F[_], A, B] extends Semigroup[IorT[F, A, B]] {
+sealed private[data] trait IorTSemigroup[F[_], A, B] extends Semigroup[IorT[F, A, B]] {
implicit def F0: Semigroup[F[Ior[A, B]]]
override def combine(x: IorT[F, A, B], y: IorT[F, A, B]): IorT[F, A, B] =
IorT(F0.combine(x.value, y.value))
}
-private[data] sealed trait IorTMonoid[F[_], A, B] extends Monoid[IorT[F, A, B]] with IorTSemigroup[F, A, B] {
- override implicit def F0: Monoid[F[Ior[A, B]]]
+sealed private[data] trait IorTMonoid[F[_], A, B] extends Monoid[IorT[F, A, B]] with IorTSemigroup[F, A, B] {
+ implicit override def F0: Monoid[F[Ior[A, B]]]
override def empty: IorT[F, A, B] = IorT(F0.empty)
}
-private[data] sealed trait IorTFoldable[F[_], A] extends Foldable[IorT[F, A, ?]] {
+sealed private[data] trait IorTFoldable[F[_], A] extends Foldable[IorT[F, A, ?]] {
implicit def F0: Foldable[F]
override def foldLeft[B, C](iort: IorT[F, A, B], c: C)(f: (C, B) => C): C = iort.foldLeft(c)(f)
- override def foldRight[B, C](iort: IorT[F, A, B], lc: Eval[C])(f: (B, Eval[C]) => Eval[C]): Eval[C] = iort.foldRight(lc)(f)
+ override def foldRight[B, C](iort: IorT[F, A, B], lc: Eval[C])(f: (B, Eval[C]) => Eval[C]): Eval[C] =
+ iort.foldRight(lc)(f)
}
-private[data] sealed trait IorTTraverse[F[_], A] extends Traverse[IorT[F, A, ?]] with IorTFoldable[F, A] {
- override implicit def F0: Traverse[F]
+sealed private[data] trait IorTTraverse[F[_], A] extends Traverse[IorT[F, A, ?]] with IorTFoldable[F, A] {
+ implicit override def F0: Traverse[F]
- override def traverse[G[_] : Applicative, B, D](iort: IorT[F, A, B])(f: B => G[D]): G[IorT[F, A, D]] = iort.traverse(f)
+ override def traverse[G[_]: Applicative, B, D](iort: IorT[F, A, B])(f: B => G[D]): G[IorT[F, A, D]] = iort.traverse(f)
}
diff --git a/core/src/main/scala/cats/data/Kleisli.scala b/core/src/main/scala/cats/data/Kleisli.scala
index 3de50bf77c..612d0529c9 100644
--- a/core/src/main/scala/cats/data/Kleisli.scala
+++ b/core/src/main/scala/cats/data/Kleisli.scala
@@ -19,13 +19,13 @@ final case class Kleisli[F[_], A, B](run: A => F[B]) { self =>
Kleisli(a => F.map(run(a))(f))
def mapF[N[_], C](f: F[B] => N[C]): Kleisli[N, A, C] =
- Kleisli(run andThen f)
+ Kleisli(run.andThen(f))
/**
* Modify the context `F` using transformation `f`.
*/
def mapK[G[_]](f: F ~> G): Kleisli[G, A, B] =
- Kleisli[G, A, B](run andThen f.apply)
+ Kleisli[G, A, B](run.andThen(f.apply))
def flatMap[C](f: B => Kleisli[F, A, C])(implicit F: FlatMap[F]): Kleisli[F, A, C] =
Kleisli.shift(a => F.flatMap[B, C](run(a))((b: B) => f(b).run(a)))
@@ -37,13 +37,13 @@ final case class Kleisli[F[_], A, B](run: A => F[B]) { self =>
Kleisli.shift(a => F.flatMap(run(a))(f))
def andThen[C](k: Kleisli[F, B, C])(implicit F: FlatMap[F]): Kleisli[F, A, C] =
- this andThen k.run
+ this.andThen(k.run)
def compose[Z](f: Z => F[A])(implicit F: FlatMap[F]): Kleisli[F, Z, B] =
Kleisli.shift((z: Z) => F.flatMap(f(z))(run))
def compose[Z](k: Kleisli[F, Z, A])(implicit F: FlatMap[F]): Kleisli[F, Z, B] =
- this compose k.run
+ this.compose(k.run)
def traverse[G[_]](f: G[A])(implicit F: Applicative[F], G: Traverse[G]): F[G[B]] =
G.traverse(f)(run)
@@ -62,10 +62,10 @@ final case class Kleisli[F[_], A, B](run: A => F[B]) { self =>
Kleisli(a => F.pure(run(a)))
def first[C](implicit F: Functor[F]): Kleisli[F, (A, C), (B, C)] =
- Kleisli{ case (a, c) => F.fproduct(run(a))(_ => c)}
+ Kleisli { case (a, c) => F.fproduct(run(a))(_ => c) }
def second[C](implicit F: Functor[F]): Kleisli[F, (C, A), (C, B)] =
- Kleisli{ case (c, a) => F.map(run(a))(c -> _)}
+ Kleisli { case (c, a) => F.map(run(a))(c -> _) }
/** Discard computed B and yield the input value. */
def tap(implicit F: Functor[F]): Kleisli[F, A, A] =
@@ -84,6 +84,7 @@ final case class Kleisli[F[_], A, B](run: A => F[B]) { self =>
}
object Kleisli extends KleisliInstances with KleisliFunctions with KleisliExplicitInstances {
+
/**
* Internal API — shifts the execution of `run` in the `F` context.
*
@@ -101,19 +102,16 @@ object Kleisli extends KleisliInstances with KleisliFunctions with KleisliExplic
* instance is stack unsafe, even if the underlying `F` is stack safe
* in `flatMap`.
*/
- private[data] def shift[F[_], A, B](run: A => F[B])
- (implicit F: FlatMap[F]): Kleisli[F, A, B] = {
-
+ private[data] def shift[F[_], A, B](run: A => F[B])(implicit F: FlatMap[F]): Kleisli[F, A, B] =
F match {
case ap: Applicative[F] @unchecked =>
Kleisli(r => F.flatMap(ap.pure(r))(run))
case _ =>
Kleisli(run)
}
- }
}
-private[data] sealed trait KleisliFunctions {
+sealed private[data] trait KleisliFunctions {
def liftF[F[_], A, B](x: F[B]): Kleisli[F, A, B] =
Kleisli(_ => x)
@@ -142,20 +140,19 @@ private[data] sealed trait KleisliFunctions {
Kleisli(F.pure)
def local[M[_], A, R](f: R => R)(fa: Kleisli[M, R, A]): Kleisli[M, R, A] =
- Kleisli(f andThen fa.run)
+ Kleisli(f.andThen(fa.run))
}
-private[data] sealed trait KleisliExplicitInstances {
+sealed private[data] trait KleisliExplicitInstances {
def endoSemigroupK[F[_]](implicit FM: FlatMap[F]): SemigroupK[λ[α => Kleisli[F, α, α]]] =
Compose[Kleisli[F, ?, ?]].algebraK
-
def endoMonoidK[F[_]](implicit M: Monad[F]): MonoidK[λ[α => Kleisli[F, α, α]]] =
Category[Kleisli[F, ?, ?]].algebraK
}
-private[data] sealed abstract class KleisliInstances extends KleisliInstances0 {
+sealed abstract private[data] class KleisliInstances extends KleisliInstances0 {
implicit def catsDataMonadForKleisliId[A]: CommutativeMonad[Kleisli[Id, A, ?]] =
catsDataCommutativeMonadForKleisli[Id, A]
@@ -166,28 +163,36 @@ private[data] sealed abstract class KleisliInstances extends KleisliInstances0 {
new Defer[Kleisli[F, A, ?]] {
def defer[B](fa: => Kleisli[F, A, B]): Kleisli[F, A, B] = {
lazy val cacheFa = fa
- Kleisli[F, A, B] { a => F.defer(cacheFa.run(a)) }
+ Kleisli[F, A, B] { a =>
+ F.defer(cacheFa.run(a))
+ }
}
}
}
-private[data] sealed abstract class KleisliInstances0 extends KleisliInstances0_5 {
+sealed abstract private[data] class KleisliInstances0 extends KleisliInstances0_5 {
- implicit def catsDataCommutativeArrowForKleisli[F[_]](implicit M: CommutativeMonad[F]): CommutativeArrow[Kleisli[F, ?, ?]] with ArrowChoice[Kleisli[F, ?, ?]] =
- new KleisliCommutativeArrow[F] {def F: CommutativeMonad[F] = M }
+ implicit def catsDataCommutativeArrowForKleisli[F[_]](
+ implicit M: CommutativeMonad[F]
+ ): CommutativeArrow[Kleisli[F, ?, ?]] with ArrowChoice[Kleisli[F, ?, ?]] =
+ new KleisliCommutativeArrow[F] { def F: CommutativeMonad[F] = M }
- implicit def catsDataCommutativeMonadForKleisli[F[_], A](implicit F0: CommutativeMonad[F]): CommutativeMonad[Kleisli[F, A, ?]] =
+ implicit def catsDataCommutativeMonadForKleisli[F[_], A](
+ implicit F0: CommutativeMonad[F]
+ ): CommutativeMonad[Kleisli[F, A, ?]] =
new KleisliMonad[F, A] with CommutativeMonad[Kleisli[F, A, ?]] {
implicit def F: Monad[F] = F0
}
}
-private[data] sealed abstract class KleisliInstances0_5 extends KleisliInstances1 {
+sealed abstract private[data] class KleisliInstances0_5 extends KleisliInstances1 {
implicit def catsDataMonoidForKleisli[F[_], A, B](implicit FB0: Monoid[F[B]]): Monoid[Kleisli[F, A, B]] =
new KleisliMonoid[F, A, B] { def FB: Monoid[F[B]] = FB0 }
- implicit def catsDataMonadErrorForKleisli[F[_], A, E](implicit ME: MonadError[F, E]): MonadError[Kleisli[F, A, ?], E] =
+ implicit def catsDataMonadErrorForKleisli[F[_], A, E](
+ implicit ME: MonadError[F, E]
+ ): MonadError[Kleisli[F, A, ?], E] =
new KleisliMonadError[F, A, E] { def F: MonadError[F, E] = ME }
implicit def catsDataArrowChoiceForKleisli[F[_]](implicit M: Monad[F]): ArrowChoice[Kleisli[F, ?, ?]] =
@@ -195,42 +200,44 @@ private[data] sealed abstract class KleisliInstances0_5 extends KleisliInstances
def F: Monad[F] = M
}
- implicit def catsDataContravariantMonoidalForKleisli[F[_], A](implicit F0: ContravariantMonoidal[F]): ContravariantMonoidal[Kleisli[F, A, ?]] =
- new KleisliContravariantMonoidal[F, A] { def F: ContravariantMonoidal[F] = F0 }
+ implicit def catsDataContravariantMonoidalForKleisli[F[_], A](
+ implicit F0: ContravariantMonoidal[F]
+ ): ContravariantMonoidal[Kleisli[F, A, ?]] =
+ new KleisliContravariantMonoidal[F, A] { def F: ContravariantMonoidal[F] = F0 }
/**
* Witness for: Kleisli[M, E, A] <-> (E, R) => A
* if M is Representable
*/
- implicit def catsDataRepresentableForKleisli[M[_], R, E](implicit
+ implicit def catsDataRepresentableForKleisli[M[_], R, E](
+ implicit
R: Representable.Aux[M, R],
- FK: Functor[Kleisli[M, E, ?]]): Representable.Aux[Kleisli[M, E, ?], (E, R)] = new Representable[Kleisli[M, E, ?]] {
+ FK: Functor[Kleisli[M, E, ?]]
+ ): Representable.Aux[Kleisli[M, E, ?], (E, R)] = new Representable[Kleisli[M, E, ?]] {
- override type Representation = (E, R)
+ override type Representation = (E, R)
- override val F: Functor[Kleisli[M, E, ?]] = FK
+ override val F: Functor[Kleisli[M, E, ?]] = FK
- def index[A](f: Kleisli[M, E, A]): Representation => A = {
- case (e, r) => R.index(f.run(e))(r)
- }
+ def index[A](f: Kleisli[M, E, A]): Representation => A = {
+ case (e, r) => R.index(f.run(e))(r)
+ }
- def tabulate[A](f: Representation => A): Kleisli[M, E, A] = {
- def curry[X, Y, Z](f: (X, Y) => Z): X => Y => Z = x => y => f(x, y)
+ def tabulate[A](f: Representation => A): Kleisli[M, E, A] = {
+ def curry[X, Y, Z](f: (X, Y) => Z): X => Y => Z = x => y => f(x, y)
- Kleisli[M, E, A](curry(Function.untupled(f)) andThen R.tabulate)
- }
+ Kleisli[M, E, A](curry(Function.untupled(f)).andThen(R.tabulate))
}
+ }
}
-private[data] sealed abstract class KleisliInstances1 extends KleisliInstances2 {
+sealed abstract private[data] class KleisliInstances1 extends KleisliInstances2 {
implicit def catsDataMonadForKleisli[F[_], A](implicit M: Monad[F]): Monad[Kleisli[F, A, ?]] =
new KleisliMonad[F, A] { def F: Monad[F] = M }
-
-
-
- implicit def catsDataParallelForKleisli[F[_], M[_], A]
- (implicit P: Parallel[M, F]): Parallel[Kleisli[M, A, ?], Kleisli[F, A, ?]] = new Parallel[Kleisli[M, A, ?], Kleisli[F, A, ?]]{
+ implicit def catsDataParallelForKleisli[F[_], M[_], A](
+ implicit P: Parallel[M, F]
+ ): Parallel[Kleisli[M, A, ?], Kleisli[F, A, ?]] = new Parallel[Kleisli[M, A, ?], Kleisli[F, A, ?]] {
implicit val appF = P.applicative
implicit val monadM = P.monad
def applicative: Applicative[Kleisli[F, A, ?]] = catsDataApplicativeForKleisli
@@ -250,16 +257,18 @@ private[data] sealed abstract class KleisliInstances1 extends KleisliInstances2
}
}
-private[data] sealed abstract class KleisliInstances2 extends KleisliInstances3 {
+sealed abstract private[data] class KleisliInstances2 extends KleisliInstances3 {
implicit def catsDataAlternativeForKleisli[F[_], A](implicit F0: Alternative[F]): Alternative[Kleisli[F, A, ?]] =
new KleisliAlternative[F, A] { def F: Alternative[F] = F0 }
}
-private[data] sealed abstract class KleisliInstances3 extends KleisliInstances4 {
+sealed abstract private[data] class KleisliInstances3 extends KleisliInstances4 {
implicit def catsDataMonoidKForKleisli[F[_], A](implicit F0: MonoidK[F]): MonoidK[Kleisli[F, A, ?]] =
new KleisliMonoidK[F, A] { def F: MonoidK[F] = F0 }
- implicit def catsDataCommutativeFlatMapForKleisli[F[_], A](implicit F0: CommutativeFlatMap[F]): CommutativeFlatMap[Kleisli[F, A, ?]] =
+ implicit def catsDataCommutativeFlatMapForKleisli[F[_], A](
+ implicit F0: CommutativeFlatMap[F]
+ ): CommutativeFlatMap[Kleisli[F, A, ?]] =
new KleisliFlatMap[F, A] with CommutativeFlatMap[Kleisli[F, A, ?]] { val F: CommutativeFlatMap[F] = F0 }
implicit def catsDataChoiceForKleisli[F[_]](implicit M: Monad[F]): Choice[Kleisli[F, ?, ?]] =
@@ -278,11 +287,13 @@ private[data] sealed abstract class KleisliInstances3 extends KleisliInstances4
new KleisliSemigroup[F, A, B] { def FB: Semigroup[F[B]] = FB0 }
}
-private[data] sealed abstract class KleisliInstances4 extends KleisliInstances5 {
+sealed abstract private[data] class KleisliInstances4 extends KleisliInstances5 {
implicit def catsDataSemigroupKForKleisli[F[_], A](implicit F0: SemigroupK[F]): SemigroupK[Kleisli[F, A, ?]] =
new KleisliSemigroupK[F, A] { def F: SemigroupK[F] = F0 }
- implicit def catsDataApplicativeErrorForKleisli[F[_], E, A](implicit F0: ApplicativeError[F, E]): ApplicativeError[Kleisli[F, A, ?], E] =
+ implicit def catsDataApplicativeErrorForKleisli[F[_], E, A](
+ implicit F0: ApplicativeError[F, E]
+ ): ApplicativeError[Kleisli[F, A, ?], E] =
new KleisliApplicativeError[F, A, E] { def F: ApplicativeError[F, E] = F0 }
implicit def catsDataFlatMapForKleisli[F[_], A](implicit FM: FlatMap[F]): FlatMap[Kleisli[F, A, ?]] =
@@ -290,46 +301,52 @@ private[data] sealed abstract class KleisliInstances4 extends KleisliInstances5
}
-private[data] sealed abstract class KleisliInstances5 extends KleisliInstances6 {
+sealed abstract private[data] class KleisliInstances5 extends KleisliInstances6 {
implicit def catsDataApplicativeForKleisli[F[_], A](implicit A: Applicative[F]): Applicative[Kleisli[F, A, ?]] =
new KleisliApplicative[F, A] { def F: Applicative[F] = A }
}
-private[data] sealed abstract class KleisliInstances6 extends KleisliInstances7 {
+sealed abstract private[data] class KleisliInstances6 extends KleisliInstances7 {
implicit def catsDataApplyForKleisli[F[_], A](implicit A: Apply[F]): Apply[Kleisli[F, A, ?]] =
new KleisliApply[F, A] { def F: Apply[F] = A }
}
-private[data] sealed abstract class KleisliInstances7 extends KleisliInstances8 {
+sealed abstract private[data] class KleisliInstances7 extends KleisliInstances8 {
implicit def catsDataDistributiveForKleisli[F[_], R](implicit F0: Distributive[F]): Distributive[Kleisli[F, R, ?]] =
new KleisliDistributive[F, R] with KleisliFunctor[F, R] { implicit def F: Distributive[F] = F0 }
}
-private[data] sealed abstract class KleisliInstances8 {
+sealed abstract private[data] class KleisliInstances8 {
implicit def catsDataFunctorForKleisli[F[_], A](implicit F0: Functor[F]): Functor[Kleisli[F, A, ?]] =
new KleisliFunctor[F, A] { def F: Functor[F] = F0 }
}
-private[data] trait KleisliCommutativeArrow[F[_]] extends CommutativeArrow[Kleisli[F, ?, ?]] with KleisliArrowChoice[F] {
+private[data] trait KleisliCommutativeArrow[F[_]]
+ extends CommutativeArrow[Kleisli[F, ?, ?]]
+ with KleisliArrowChoice[F] {
implicit def F: CommutativeMonad[F]
}
-private[data] trait KleisliArrowChoice[F[_]] extends ArrowChoice[Kleisli[F, ?, ?]] with KleisliCategory[F] with KleisliStrong[F] {
+private[data] trait KleisliArrowChoice[F[_]]
+ extends ArrowChoice[Kleisli[F, ?, ?]]
+ with KleisliCategory[F]
+ with KleisliStrong[F] {
implicit def F: Monad[F]
def lift[A, B](f: A => B): Kleisli[F, A, B] =
Kleisli(a => F.pure(f(a)))
override def split[A, B, C, D](f: Kleisli[F, A, B], g: Kleisli[F, C, D]): Kleisli[F, (A, C), (B, D)] =
- Kleisli{ case (a, c) => F.flatMap(f.run(a))(b => F.map(g.run(c))(d => (b, d))) }
+ Kleisli { case (a, c) => F.flatMap(f.run(a))(b => F.map(g.run(c))(d => (b, d))) }
def choose[A, B, C, D](f: Kleisli[F, A, C])(g: Kleisli[F, B, D]): Kleisli[F, Either[A, B], Either[C, D]] =
Kleisli(
(fe: Either[A, B]) =>
fe match {
- case Left(a) => F.map(f(a))(Left.apply _)
+ case Left(a) => F.map(f(a))(Left.apply _)
case Right(b) => F.map(g(b))(Right.apply _)
- })
+ }
+ )
}
private[data] trait KleisliStrong[F[_]] extends Strong[Kleisli[F, ?, ?]] {
@@ -382,24 +399,27 @@ private[data] trait KleisliMonoid[F[_], A, B] extends Monoid[Kleisli[F, A, B]] w
override def empty: Kleisli[F, A, B] = Kleisli[F, A, B](_ => FB.empty)
}
-private[data] sealed trait KleisliSemigroupK[F[_], A] extends SemigroupK[Kleisli[F, A, ?]] {
+sealed private[data] trait KleisliSemigroupK[F[_], A] extends SemigroupK[Kleisli[F, A, ?]] {
implicit def F: SemigroupK[F]
override def combineK[B](x: Kleisli[F, A, B], y: Kleisli[F, A, B]): Kleisli[F, A, B] =
Kleisli(a => F.combineK(x.run(a), y.run(a)))
}
-private[data] sealed trait KleisliMonoidK[F[_], A] extends MonoidK[Kleisli[F, A, ?]] with KleisliSemigroupK[F, A] {
+sealed private[data] trait KleisliMonoidK[F[_], A] extends MonoidK[Kleisli[F, A, ?]] with KleisliSemigroupK[F, A] {
implicit def F: MonoidK[F]
override def empty[B]: Kleisli[F, A, B] = Kleisli.liftF(F.empty[B])
}
-private[data] trait KleisliAlternative[F[_], A] extends Alternative[Kleisli[F, A, ?]] with KleisliApplicative[F, A] with KleisliMonoidK[F, A] {
+private[data] trait KleisliAlternative[F[_], A]
+ extends Alternative[Kleisli[F, A, ?]]
+ with KleisliApplicative[F, A]
+ with KleisliMonoidK[F, A] {
implicit def F: Alternative[F]
}
-private[data] sealed trait KleisliContravariantMonoidal[F[_], D] extends ContravariantMonoidal[Kleisli[F, D, ?]] {
+sealed private[data] trait KleisliContravariantMonoidal[F[_], D] extends ContravariantMonoidal[Kleisli[F, D, ?]] {
implicit def F: ContravariantMonoidal[F]
override def unit: Kleisli[F, D, Unit] = Kleisli(Function.const(F.unit))
@@ -411,11 +431,16 @@ private[data] sealed trait KleisliContravariantMonoidal[F[_], D] extends Contrav
Kleisli(d => F.product(fa.run(d), fb.run(d)))
}
-private[data] trait KleisliMonadError[F[_], A, E] extends MonadError[Kleisli[F, A, ?], E] with KleisliApplicativeError[F, A, E] with KleisliMonad[F, A] {
+private[data] trait KleisliMonadError[F[_], A, E]
+ extends MonadError[Kleisli[F, A, ?], E]
+ with KleisliApplicativeError[F, A, E]
+ with KleisliMonad[F, A] {
def F: MonadError[F, E]
}
-private[data] trait KleisliApplicativeError[F[_], A, E] extends ApplicativeError[Kleisli[F, A, ?], E] with KleisliApplicative[F, A] {
+private[data] trait KleisliApplicativeError[F[_], A, E]
+ extends ApplicativeError[Kleisli[F, A, ?], E]
+ with KleisliApplicative[F, A] {
type K[T] = Kleisli[F, A, T]
implicit def F: ApplicativeError[F, E]
@@ -427,7 +452,10 @@ private[data] trait KleisliApplicativeError[F[_], A, E] extends ApplicativeError
}
}
-private[data] trait KleisliMonad[F[_], A] extends Monad[Kleisli[F, A, ?]] with KleisliFlatMap[F, A] with KleisliApplicative[F, A] {
+private[data] trait KleisliMonad[F[_], A]
+ extends Monad[Kleisli[F, A, ?]]
+ with KleisliFlatMap[F, A]
+ with KleisliApplicative[F, A] {
implicit def F: Monad[F]
}
@@ -438,7 +466,9 @@ private[data] trait KleisliFlatMap[F[_], A] extends FlatMap[Kleisli[F, A, ?]] wi
fa.flatMap(f)
def tailRecM[B, C](b: B)(f: B => Kleisli[F, A, Either[B, C]]): Kleisli[F, A, C] =
- Kleisli[F, A, C]({ a => F.tailRecM(b) { f(_).run(a) } })
+ Kleisli[F, A, C]({ a =>
+ F.tailRecM(b) { f(_).run(a) }
+ })
}
private[data] trait KleisliApplicative[F[_], A] extends Applicative[Kleisli[F, A, ?]] with KleisliApply[F, A] {
@@ -469,8 +499,7 @@ private trait KleisliDistributive[F[_], R] extends Distributive[Kleisli[F, R, ?]
implicit def F: Distributive[F]
override def distribute[G[_]: Functor, A, B](a: G[A])(f: A => Kleisli[F, R, B]): Kleisli[F, R, G[B]] =
- Kleisli(r => F.distribute(a)(f(_) run r))
-
+ Kleisli(r => F.distribute(a)(f(_).run(r)))
def map[A, B](fa: Kleisli[F, R, A])(f: A => B): Kleisli[F, R, B] = fa.map(f)
}
diff --git a/core/src/main/scala/cats/data/Nested.scala b/core/src/main/scala/cats/data/Nested.scala
index e780bd6aa7..0f86be9c58 100644
--- a/core/src/main/scala/cats/data/Nested.scala
+++ b/core/src/main/scala/cats/data/Nested.scala
@@ -1,7 +1,6 @@
package cats
package data
-
/** Similar to [[cats.data.Tuple2K]], but for nested composition.
*
* For instance, since both `List` and `Option` have a `Functor`, then so does
@@ -34,16 +33,18 @@ final case class Nested[F[_], G[_], A](value: F[G[A]]) {
object Nested extends NestedInstances
-private[data] sealed abstract class NestedInstances extends NestedInstances0 {
+sealed abstract private[data] class NestedInstances extends NestedInstances0 {
implicit def catsDataEqForNested[F[_], G[_], A](implicit FGA: Eq[F[G[A]]]): Eq[Nested[F, G, A]] =
Eq.by[Nested[F, G, A], F[G[A]]](_.value)
- implicit def catsDataNonEmptyTraverseForNested[F[_]: NonEmptyTraverse, G[_]: NonEmptyTraverse]: NonEmptyTraverse[Nested[F, G, ?]] =
+ implicit def catsDataNonEmptyTraverseForNested[F[_]: NonEmptyTraverse, G[_]: NonEmptyTraverse]
+ : NonEmptyTraverse[Nested[F, G, ?]] =
new NestedNonEmptyTraverse[F, G] {
val FG: NonEmptyTraverse[λ[α => F[G[α]]]] = NonEmptyTraverse[F].compose[G]
}
- implicit def catsDataContravariantMonoidalForApplicativeForNested[F[_]: Applicative, G[_]: ContravariantMonoidal]: ContravariantMonoidal[Nested[F, G, ?]] =
+ implicit def catsDataContravariantMonoidalForApplicativeForNested[F[_]: Applicative, G[_]: ContravariantMonoidal]
+ : ContravariantMonoidal[Nested[F, G, ?]] =
new NestedContravariantMonoidal[F, G] with NestedContravariant[F, G] {
val FG: ContravariantMonoidal[λ[α => F[G[α]]]] = Applicative[F].composeContravariantMonoidal[G]
}
@@ -54,64 +55,70 @@ private[data] sealed abstract class NestedInstances extends NestedInstances0 {
Nested(F.defer(fa.value))
}
- implicit def catsDataTraverseFilterForNested[F[_], G[_]](implicit F0: Traverse[F], G0: TraverseFilter[G]): TraverseFilter[Nested[F, G, ?]] =
+ implicit def catsDataTraverseFilterForNested[F[_], G[_]](implicit F0: Traverse[F],
+ G0: TraverseFilter[G]): TraverseFilter[Nested[F, G, ?]] =
new NestedTraverseFilter[F, G] {
implicit val F: Traverse[F] = F0
implicit val G: TraverseFilter[G] = G0
}
}
-private[data] sealed abstract class NestedInstances0 extends NestedInstances1 {
+sealed abstract private[data] class NestedInstances0 extends NestedInstances1 {
implicit def catsDataTraverseForNested[F[_]: Traverse, G[_]: Traverse]: Traverse[Nested[F, G, ?]] =
new NestedTraverse[F, G] {
val FG: Traverse[λ[α => F[G[α]]]] = Traverse[F].compose[G]
}
- implicit def catsDataFunctorFilterForNested[F[_], G[_]](implicit F0: Functor[F], G0: FunctorFilter[G]): FunctorFilter[Nested[F, G, ?]] =
+ implicit def catsDataFunctorFilterForNested[F[_], G[_]](implicit F0: Functor[F],
+ G0: FunctorFilter[G]): FunctorFilter[Nested[F, G, ?]] =
new NestedFunctorFilter[F, G] {
implicit val F: Functor[F] = F0
implicit val G: FunctorFilter[G] = G0
}
}
-private[data] sealed abstract class NestedInstances1 extends NestedInstances2 {
+sealed abstract private[data] class NestedInstances1 extends NestedInstances2 {
implicit def catsDataReducibleForNested[F[_]: Reducible, G[_]: Reducible]: Reducible[Nested[F, G, ?]] =
new NestedReducible[F, G] {
val FG: Reducible[λ[α => F[G[α]]]] = Reducible[F].compose[G]
}
- implicit def catsDataFunctorForContravariantForNested[F[_]: Contravariant, G[_]: Contravariant]: Functor[Nested[F, G, ?]] =
+ implicit def catsDataFunctorForContravariantForNested[F[_]: Contravariant, G[_]: Contravariant]
+ : Functor[Nested[F, G, ?]] =
new NestedFunctor[F, G] {
val FG: Functor[λ[α => F[G[α]]]] = Contravariant[F].compose[G]
}
}
-private[data] sealed abstract class NestedInstances2 extends NestedInstances3 {
+sealed abstract private[data] class NestedInstances2 extends NestedInstances3 {
implicit def catsDataFoldableForNested[F[_]: Foldable, G[_]: Foldable]: Foldable[Nested[F, G, ?]] =
new NestedFoldable[F, G] {
val FG: Foldable[λ[α => F[G[α]]]] = Foldable[F].compose[G]
}
- implicit def catsDataContravariantForCovariantNested[F[_]: Contravariant, G[_]: Functor]: Contravariant[Nested[F, G, ?]] =
+ implicit def catsDataContravariantForCovariantNested[F[_]: Contravariant, G[_]: Functor]
+ : Contravariant[Nested[F, G, ?]] =
new NestedContravariant[F, G] {
val FG: Contravariant[λ[α => F[G[α]]]] = Contravariant[F].composeFunctor[G]
}
}
-private[data] sealed abstract class NestedInstances3 extends NestedInstances4 {
+sealed abstract private[data] class NestedInstances3 extends NestedInstances4 {
implicit def catsDataAlternativeForNested[F[_]: Alternative, G[_]: Applicative]: Alternative[Nested[F, G, ?]] =
new NestedAlternative[F, G] {
val FG: Alternative[λ[α => F[G[α]]]] = Alternative[F].compose[G]
}
- implicit def catsDataContravariantForContravariantNested[F[_]: Functor, G[_]: Contravariant]: Contravariant[Nested[F, G, ?]] =
+ implicit def catsDataContravariantForContravariantNested[F[_]: Functor, G[_]: Contravariant]
+ : Contravariant[Nested[F, G, ?]] =
new NestedContravariant[F, G] {
val FG: Contravariant[λ[α => F[G[α]]]] = Functor[F].composeContravariant[G]
}
}
-private[data] sealed abstract class NestedInstances4 extends NestedInstances5 {
- implicit def catsDataApplicativeErrorForNested[F[_]: ApplicativeError[?[_], E], G[_]: Applicative, E]: ApplicativeError[Nested[F, G, ?], E] =
+sealed abstract private[data] class NestedInstances4 extends NestedInstances5 {
+ implicit def catsDataApplicativeErrorForNested[F[_]: ApplicativeError[?[_], E], G[_]: Applicative, E]
+ : ApplicativeError[Nested[F, G, ?], E] =
new NestedApplicativeError[F, G, E] {
val G: Applicative[G] = Applicative[G]
@@ -120,8 +127,9 @@ private[data] sealed abstract class NestedInstances4 extends NestedInstances5 {
}
-private[data] sealed abstract class NestedInstances5 extends NestedInstances6 {
- implicit def catsDataCommutativeApplicativeForNestedContravariant[F[_]: CommutativeApplicative, G[_]: CommutativeApplicative]: CommutativeApplicative[Nested[F, G, ?]] =
+sealed abstract private[data] class NestedInstances5 extends NestedInstances6 {
+ implicit def catsDataCommutativeApplicativeForNestedContravariant[F[_]: CommutativeApplicative, G[_]: CommutativeApplicative]
+ : CommutativeApplicative[Nested[F, G, ?]] =
new NestedApplicative[F, G] with CommutativeApplicative[Nested[F, G, ?]] {
val FG: Applicative[λ[α => F[G[α]]]] = Applicative[F].compose[G]
}
@@ -132,8 +140,9 @@ private[data] sealed abstract class NestedInstances5 extends NestedInstances6 {
}
}
-private[data] sealed abstract class NestedInstances6 extends NestedInstances7 {
- implicit def catsDataCommutativeApplyForNestedContravariant[F[_]: CommutativeApply, G[_]: CommutativeApply]: CommutativeApply[Nested[F, G, ?]] =
+sealed abstract private[data] class NestedInstances6 extends NestedInstances7 {
+ implicit def catsDataCommutativeApplyForNestedContravariant[F[_]: CommutativeApply, G[_]: CommutativeApply]
+ : CommutativeApply[Nested[F, G, ?]] =
new NestedApply[F, G] with CommutativeApply[Nested[F, G, ?]] {
val FG: Apply[λ[α => F[G[α]]]] = Apply[F].compose[G]
}
@@ -144,14 +153,14 @@ private[data] sealed abstract class NestedInstances6 extends NestedInstances7 {
}
}
-private[data] sealed abstract class NestedInstances7 extends NestedInstances8 {
+sealed abstract private[data] class NestedInstances7 extends NestedInstances8 {
implicit def catsDataApplicativeForNested[F[_]: Applicative, G[_]: Applicative]: Applicative[Nested[F, G, ?]] =
new NestedApplicative[F, G] {
val FG: Applicative[λ[α => F[G[α]]]] = Applicative[F].compose[G]
}
}
-private[data] sealed abstract class NestedInstances8 extends NestedInstances9 {
+sealed abstract private[data] class NestedInstances8 extends NestedInstances9 {
implicit def catsDataApplyForNested[F[_]: Apply, G[_]: Apply]: Apply[Nested[F, G, ?]] =
new NestedApply[F, G] {
val FG: Apply[λ[α => F[G[α]]]] = Apply[F].compose[G]
@@ -163,36 +172,38 @@ private[data] sealed abstract class NestedInstances8 extends NestedInstances9 {
}
}
-private[data] sealed abstract class NestedInstances9 extends NestedInstances10 {
- implicit def catsDataInvariantSemigroupalApplyForNested[F[_]: InvariantSemigroupal, G[_]: Apply]: InvariantSemigroupal[Nested[F, G, ?]] =
+sealed abstract private[data] class NestedInstances9 extends NestedInstances10 {
+ implicit def catsDataInvariantSemigroupalApplyForNested[F[_]: InvariantSemigroupal, G[_]: Apply]
+ : InvariantSemigroupal[Nested[F, G, ?]] =
new NestedInvariantSemigroupalApply[F, G] {
val FG: InvariantSemigroupal[λ[α => F[G[α]]]] = InvariantSemigroupal[F].composeApply[G]
}
}
-private[data] sealed abstract class NestedInstances10 extends NestedInstances11 {
+sealed abstract private[data] class NestedInstances10 extends NestedInstances11 {
implicit def catsDataFunctorForNested[F[_]: Functor, G[_]: Functor]: Functor[Nested[F, G, ?]] =
new NestedFunctor[F, G] {
val FG: Functor[λ[α => F[G[α]]]] = Functor[F].compose[G]
}
}
-private[data] sealed abstract class NestedInstances11 extends NestedInstances12 {
+sealed abstract private[data] class NestedInstances11 extends NestedInstances12 {
implicit def catsDataInvariantForNested[F[_]: Invariant, G[_]: Invariant]: Invariant[Nested[F, G, ?]] =
new NestedInvariant[F, G] {
val FG: Invariant[λ[α => F[G[α]]]] = Invariant[F].compose[G]
}
}
-private[data] sealed abstract class NestedInstances12 extends NestedInstances13 {
+sealed abstract private[data] class NestedInstances12 extends NestedInstances13 {
implicit def catsDataInvariantForCovariantNested[F[_]: Invariant, G[_]: Functor]: Invariant[Nested[F, G, ?]] =
new NestedInvariant[F, G] {
val FG: Invariant[λ[α => F[G[α]]]] = Invariant[F].composeFunctor[G]
}
}
-private[data] sealed abstract class NestedInstances13 {
- implicit def catsDataInvariantForNestedContravariant[F[_]: Invariant, G[_]: Contravariant]: Invariant[Nested[F, G, ?]] =
+sealed abstract private[data] class NestedInstances13 {
+ implicit def catsDataInvariantForNestedContravariant[F[_]: Invariant, G[_]: Contravariant]
+ : Invariant[Nested[F, G, ?]] =
new NestedInvariant[F, G] {
val FG: Invariant[λ[α => F[G[α]]]] = Invariant[F].composeContravariant[G]
}
@@ -228,7 +239,9 @@ private[data] trait NestedApplicative[F[_], G[_]] extends Applicative[Nested[F,
def pure[A](x: A): Nested[F, G, A] = Nested(FG.pure(x))
}
-private[data] abstract class NestedApplicativeError[F[_], G[_], E] extends ApplicativeError[Nested[F, G, ?], E] with NestedApplicative[F, G] {
+abstract private[data] class NestedApplicativeError[F[_], G[_], E]
+ extends ApplicativeError[Nested[F, G, ?], E]
+ with NestedApplicative[F, G] {
def G: Applicative[G]
def AEF: ApplicativeError[F, E]
@@ -237,7 +250,7 @@ private[data] abstract class NestedApplicativeError[F[_], G[_], E] extends Appli
def raiseError[A](e: E): Nested[F, G, A] = Nested(AEF.map(AEF.raiseError(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)(f andThen (_.value)))
+ Nested(AEF.handleErrorWith(fa.value)(f.andThen(_.value)))
}
@@ -253,7 +266,10 @@ private[data] trait NestedMonoidK[F[_], G[_]] extends MonoidK[Nested[F, G, ?]] w
def empty[A]: Nested[F, G, A] = Nested(FG.empty[A])
}
-private[data] trait NestedAlternative[F[_], G[_]] extends Alternative[Nested[F, G, ?]] with NestedApplicative[F, G] with NestedMonoidK[F, G] {
+private[data] trait NestedAlternative[F[_], G[_]]
+ extends Alternative[Nested[F, G, ?]]
+ with NestedApplicative[F, G]
+ with NestedMonoidK[F, G] {
def FG: Alternative[λ[α => F[G[α]]]]
}
@@ -267,7 +283,10 @@ private[data] trait NestedFoldable[F[_], G[_]] extends Foldable[Nested[F, G, ?]]
FG.foldRight(fga.value, lb)(f)
}
-private[data] trait NestedTraverse[F[_], G[_]] extends Traverse[Nested[F, G, ?]] with NestedFoldable[F, G] with NestedFunctor[F, G] {
+private[data] trait NestedTraverse[F[_], G[_]]
+ extends Traverse[Nested[F, G, ?]]
+ with NestedFoldable[F, G]
+ with NestedFunctor[F, G] {
def FG: Traverse[λ[α => F[G[α]]]]
override def traverse[H[_]: Applicative, A, B](fga: Nested[F, G, A])(f: A => H[B]): H[Nested[F, G, B]] =
@@ -278,7 +297,9 @@ private[data] trait NestedDistributive[F[_], G[_]] extends Distributive[Nested[F
def FG: Distributive[λ[α => F[G[α]]]]
def distribute[H[_]: Functor, A, B](ha: H[A])(f: A => Nested[F, G, B]): Nested[F, G, H[B]] =
- Nested(FG.distribute(ha) { a => f(a).value })
+ Nested(FG.distribute(ha) { a =>
+ f(a).value
+ })
}
private[data] trait NestedReducible[F[_], G[_]] extends Reducible[Nested[F, G, ?]] with NestedFoldable[F, G] {
@@ -291,7 +312,10 @@ private[data] trait NestedReducible[F[_], G[_]] extends Reducible[Nested[F, G, ?
FG.reduceRightTo(fga.value)(f)(g)
}
-private[data] trait NestedNonEmptyTraverse[F[_], G[_]] extends NonEmptyTraverse[Nested[F, G, ?]] with NestedTraverse[F, G] with NestedReducible[F, G] {
+private[data] trait NestedNonEmptyTraverse[F[_], G[_]]
+ extends NonEmptyTraverse[Nested[F, G, ?]]
+ with NestedTraverse[F, G]
+ with NestedReducible[F, G] {
def FG: NonEmptyTraverse[λ[α => F[G[α]]]]
override def nonEmptyTraverse[H[_]: Apply, A, B](fga: Nested[F, G, A])(f: A => H[B]): H[Nested[F, G, B]] =
@@ -327,7 +351,7 @@ private[data] trait NestedInvariantSemigroupalApply[F[_], G[_]] extends Invarian
Nested(FG.product(fa.value, fb.value))
}
-private[data] abstract class NestedFunctorFilter[F[_], G[_]] extends FunctorFilter[Nested[F, G, ?]] {
+abstract private[data] class NestedFunctorFilter[F[_], G[_]] extends FunctorFilter[Nested[F, G, ?]] {
implicit val F: Functor[F]
implicit val G: FunctorFilter[G]
@@ -347,23 +371,22 @@ private[data] abstract class NestedFunctorFilter[F[_], G[_]] extends FunctorFilt
Nested[F, G, A](F.map(fa.value)(G.filter(_)(f)))
}
-private[data] abstract class NestedTraverseFilter[F[_], G[_]]
- extends NestedFunctorFilter[F, G] with TraverseFilter[Nested[F, G, ?]] {
- implicit val F: Traverse[F]
+abstract private[data] class NestedTraverseFilter[F[_], G[_]]
+ extends NestedFunctorFilter[F, G]
+ with TraverseFilter[Nested[F, G, ?]] {
+ implicit val F: Traverse[F]
- implicit val G: TraverseFilter[G]
+ implicit val G: TraverseFilter[G]
- def traverse: Traverse[Nested[F, G, ?]] = Nested.catsDataTraverseForNested(F, G.traverse)
+ def traverse: Traverse[Nested[F, G, ?]] = Nested.catsDataTraverseForNested(F, G.traverse)
- override def filterA[H[_], A]
- (fa: Nested[F, G, A])
- (f: A => H[Boolean])
- (implicit H: Applicative[H]): H[Nested[F, G, A]] =
- H.map(F.traverse(fa.value)(G.filterA[H, A](_)(f)))(Nested[F, G, A])
+ override def filterA[H[_], A](
+ fa: Nested[F, G, A]
+ )(f: A => H[Boolean])(implicit H: Applicative[H]): H[Nested[F, G, A]] =
+ H.map(F.traverse(fa.value)(G.filterA[H, A](_)(f)))(Nested[F, G, A])
- def traverseFilter[H[_], A, B]
- (fga: Nested[F, G, A])
- (f: A => H[Option[B]])
- (implicit H: Applicative[H]): H[Nested[F, G, B]] =
- H.map(F.traverse[H, G[A], G[B]](fga.value)(ga => G.traverseFilter(ga)(f)))(Nested[F, G, B])
+ def traverseFilter[H[_], A, B](
+ fga: Nested[F, G, A]
+ )(f: A => H[Option[B]])(implicit H: Applicative[H]): H[Nested[F, G, B]] =
+ H.map(F.traverse[H, G[A], G[B]](fga.value)(ga => G.traverseFilter(ga)(f)))(Nested[F, G, B])
}
diff --git a/core/src/main/scala/cats/data/Newtype.scala b/core/src/main/scala/cats/data/Newtype.scala
index 20e9b02b6d..ff8c0236c8 100644
--- a/core/src/main/scala/cats/data/Newtype.scala
+++ b/core/src/main/scala/cats/data/Newtype.scala
@@ -2,9 +2,9 @@ package cats
package data
/**
- * Helper trait for `newtype`s. These allow you to create a zero-allocation wrapper around a specific type.
- * Similar to `AnyVal` value classes, but never have any runtime overhead.
- */
+ * Helper trait for `newtype`s. These allow you to create a zero-allocation wrapper around a specific type.
+ * Similar to `AnyVal` value classes, but never have any runtime overhead.
+ */
private[data] trait Newtype { self =>
private[data] type Base
private[data] trait Tag extends Any
diff --git a/core/src/main/scala/cats/data/Newtype2.scala b/core/src/main/scala/cats/data/Newtype2.scala
index 5b3af0059c..a6307cdc73 100644
--- a/core/src/main/scala/cats/data/Newtype2.scala
+++ b/core/src/main/scala/cats/data/Newtype2.scala
@@ -2,10 +2,10 @@ package cats
package data
/**
- * Helper trait for `newtype`s with two type parameters.
- * These allow you to create a zero-allocation wrapper around a specific type.
- * Similar to `AnyVal` value classes, but never have any runtime overhead.
- */
+ * Helper trait for `newtype`s with two type parameters.
+ * These allow you to create a zero-allocation wrapper around a specific type.
+ * Similar to `AnyVal` value classes, but never have any runtime overhead.
+ */
private[data] trait Newtype2 { self =>
private[data] type Base
private[data] trait Tag extends Any
diff --git a/core/src/main/scala/cats/data/NonEmptyChain.scala b/core/src/main/scala/cats/data/NonEmptyChain.scala
index 63011a0f50..aa353447e8 100644
--- a/core/src/main/scala/cats/data/NonEmptyChain.scala
+++ b/core/src/main/scala/cats/data/NonEmptyChain.scala
@@ -25,7 +25,6 @@ import scala.annotation.tailrec
import scala.collection.immutable._
import scala.collection.mutable.ListBuffer
-
private[data] object NonEmptyChainImpl extends NonEmptyChainInstances {
private[data] type Base
@@ -69,7 +68,6 @@ private[data] object NonEmptyChainImpl extends NonEmptyChainInstances {
new NonEmptyChainOps(value)
}
-
class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
/**
@@ -113,7 +111,6 @@ class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
final def concat[A2 >: A](c: NonEmptyChain[A2]): NonEmptyChain[A2] =
create(toChain ++ c.toChain)
-
/**
* Alias for concat
*/
@@ -158,7 +155,6 @@ class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
final def ++:[A2 >: A](c: Chain[A2]): NonEmptyChain[A2] =
prependChain(c)
-
/**
* Yields to Some(a, Chain[A]) with `a` removed where `f` holds for the first time,
* otherwise yields None, if `a` was not found
@@ -167,7 +163,6 @@ class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
final def deleteFirst(f: A => Boolean): Option[(A, Chain[A])] =
toChain.deleteFirst(f)
-
/**
* Converts this chain to a `NonEmptyList`.
* {{{
@@ -254,7 +249,6 @@ class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
*/
final def filterNot(p: A ⇒ Boolean): Chain[A] = filter(t => !p(t))
-
/**
* Left-associative fold using f.
*/
@@ -336,17 +330,14 @@ class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
/**
* Reduce using the Semigroup of A
*/
- final def reduce[AA >: A](implicit S: Semigroup[AA]): AA = {
+ final def reduce[AA >: A](implicit S: Semigroup[AA]): AA =
S.combineAllOption(iterator).get
- }
/**
* Applies the supplied function to each element and returns a new NonEmptyChain from the concatenated results
*/
- final def flatMap[B](f: A => NonEmptyChain[B]): NonEmptyChain[B] = {
- create(toChain.flatMap(f andThen (_.toChain)))
- }
-
+ final def flatMap[B](f: A => NonEmptyChain[B]): NonEmptyChain[B] =
+ create(toChain.flatMap(f.andThen(_.toChain)))
/**
* Returns the number of elements in this chain.
@@ -383,10 +374,9 @@ class NonEmptyChainOps[A](val value: NonEmptyChain[A]) extends AnyVal {
create(toChain.reverse)
}
-private[data] sealed abstract class NonEmptyChainInstances extends NonEmptyChainInstances1 {
- implicit val catsDataInstancesForNonEmptyChain: SemigroupK[NonEmptyChain]
- with NonEmptyTraverse[NonEmptyChain]
- with Bimonad[NonEmptyChain] =
+sealed abstract private[data] class NonEmptyChainInstances extends NonEmptyChainInstances1 {
+ implicit val catsDataInstancesForNonEmptyChain
+ : SemigroupK[NonEmptyChain] with NonEmptyTraverse[NonEmptyChain] with Bimonad[NonEmptyChain] =
new SemigroupK[NonEmptyChain] with NonEmptyTraverse[NonEmptyChain] with Bimonad[NonEmptyChain] {
def combineK[A](a: NonEmptyChain[A], b: NonEmptyChain[A]): NonEmptyChain[A] =
@@ -406,18 +396,21 @@ private[data] sealed abstract class NonEmptyChainInstances extends NonEmptyChain
@tailrec def go(as: Chain[A], res: ListBuffer[B]): Chain[B] =
as.uncons match {
case Some((h, t)) => go(t, res += f(NonEmptyChain.fromChainPrepend(h, t)))
- case None => Chain.fromSeq(res.result())
+ case None => Chain.fromSeq(res.result())
}
NonEmptyChain.fromChainPrepend(f(fa), go(fa.tail, ListBuffer.empty))
}
def nonEmptyTraverse[G[_]: Apply, A, B](fa: NonEmptyChain[A])(f: A => G[B]): G[NonEmptyChain[B]] =
- Foldable[Chain].reduceRightToOption[A, G[Chain[B]]](fa.tail)(a => Apply[G].map(f(a))(Chain.one)) { (a, lglb) =>
- Apply[G].map2Eval(f(a), lglb)(_ +: _)
- }.map {
- case None => Apply[G].map(f(fa.head))(NonEmptyChain.one)
- case Some(gtail) => Apply[G].map2(f(fa.head), gtail)((h, t) => create(Chain.one(h) ++ t))
- }.value
+ Foldable[Chain]
+ .reduceRightToOption[A, G[Chain[B]]](fa.tail)(a => Apply[G].map(f(a))(Chain.one)) { (a, lglb) =>
+ Apply[G].map2Eval(f(a), lglb)(_ +: _)
+ }
+ .map {
+ case None => Apply[G].map(f(fa.head))(NonEmptyChain.one)
+ case Some(gtail) => Apply[G].map2(f(fa.head), gtail)((h, t) => create(Chain.one(h) ++ t))
+ }
+ .value
override def map[A, B](fa: NonEmptyChain[A])(f: A => B): NonEmptyChain[B] =
create(fa.toChain.map(f))
@@ -475,14 +468,14 @@ private[data] sealed abstract class NonEmptyChainInstances extends NonEmptyChain
}
}
-private[data] sealed abstract class NonEmptyChainInstances1 extends NonEmptyChainInstances2 {
+sealed abstract private[data] class NonEmptyChainInstances1 extends NonEmptyChainInstances2 {
implicit def catsDataPartialOrderForNonEmptyChain[A: PartialOrder]: PartialOrder[NonEmptyChain[A]] =
PartialOrder.by[NonEmptyChain[A], Chain[A]](_.toChain)
}
-private[data] sealed abstract class NonEmptyChainInstances2 {
+sealed abstract private[data] class NonEmptyChainInstances2 {
implicit def catsDataEqForNonEmptyChain[A: Eq]: Eq[NonEmptyChain[A]] =
- new Eq[NonEmptyChain[A]]{
+ new Eq[NonEmptyChain[A]] {
def eqv(x: NonEmptyChain[A], y: NonEmptyChain[A]): Boolean = x.toChain === y.toChain
}
}
diff --git a/core/src/main/scala/cats/data/NonEmptyList.scala b/core/src/main/scala/cats/data/NonEmptyList.scala
index 15315d7f38..0b7bb7d82b 100644
--- a/core/src/main/scala/cats/data/NonEmptyList.scala
+++ b/core/src/main/scala/cats/data/NonEmptyList.scala
@@ -5,7 +5,7 @@ import cats.data.NonEmptyList.ZipNonEmptyList
import cats.instances.list._
import cats.syntax.order._
import scala.annotation.tailrec
-import scala.collection.immutable.{ SortedMap, TreeMap, TreeSet }
+import scala.collection.immutable.{SortedMap, TreeMap, TreeSet}
import scala.collection.mutable
import scala.collection.mutable.ListBuffer
@@ -52,7 +52,7 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
*/
def init: List[A] = tail match {
case Nil => List.empty
- case t => head :: t.init
+ case t => head :: t.init
}
/**
@@ -92,7 +92,7 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
NonEmptyList(head, tail ::: other.toList)
def flatMap[B](f: A => NonEmptyList[B]): NonEmptyList[B] =
- f(head) ++ tail.flatMap(f andThen (_.toList))
+ f(head) ++ tail.flatMap(f.andThen(_.toList))
def ::[AA >: A](a: AA): NonEmptyList[AA] =
prepend(a)
@@ -101,15 +101,15 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
NonEmptyList(a, head :: tail)
/**
- * Alias for append
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> val nel = NonEmptyList.of(1, 2, 3)
- * scala> nel :+ 4
- * res0: cats.data.NonEmptyList[Int] = NonEmptyList(1, 2, 3, 4)
- * }}}
- */
+ * Alias for append
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> val nel = NonEmptyList.of(1, 2, 3)
+ * scala> nel :+ 4
+ * res0: cats.data.NonEmptyList[Int] = NonEmptyList(1, 2, 3, 4)
+ * }}}
+ */
def :+[AA >: A](a: AA): NonEmptyList[AA] =
append(a)
@@ -117,15 +117,15 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
NonEmptyList(head, tail :+ a)
/**
- * Alias for concatNel
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> val nel = NonEmptyList.of(1, 2, 3)
- * scala> nel ::: NonEmptyList.of(4, 5)
- * res0: cats.data.NonEmptyList[Int] = NonEmptyList(1, 2, 3, 4, 5)
- * }}}
- */
+ * Alias for concatNel
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> val nel = NonEmptyList.of(1, 2, 3)
+ * scala> nel ::: NonEmptyList.of(4, 5)
+ * res0: cats.data.NonEmptyList[Int] = NonEmptyList(1, 2, 3, 4, 5)
+ * }}}
+ */
def :::[AA >: A](other: NonEmptyList[AA]): NonEmptyList[AA] =
other.concatNel(this)
@@ -146,15 +146,15 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
}
/**
- * Remove elements matching the predicate
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> val nel = NonEmptyList.of(1, 2, 3, 4, 5)
- * scala> nel.filterNot(_ < 3)
- * res0: scala.collection.immutable.List[Int] = List(3, 4, 5)
- * }}}
- */
+ * Remove elements matching the predicate
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> val nel = NonEmptyList.of(1, 2, 3, 4, 5)
+ * scala> nel.filterNot(_ < 3)
+ * res0: scala.collection.immutable.List[Int] = List(3, 4, 5)
+ * }}}
+ */
def filterNot(p: A => Boolean): List[A] = {
val ftail = tail.filterNot(p)
if (p(head)) ftail
@@ -162,28 +162,27 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
}
/**
- * Builds a new `List` by applying a partial function to
- * all the elements from this `NonEmptyList` on which the function is defined
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> val nel = NonEmptyList.of(1, 2, 3, 4, 5)
- * scala> nel.collect { case v if v < 3 => v }
- * res0: scala.collection.immutable.List[Int] = List(1, 2)
- * scala> nel.collect {
- * | case v if v % 2 == 0 => "even"
- * | case _ => "odd"
- * | }
- * res1: scala.collection.immutable.List[String] = List(odd, even, odd, even, odd)
- * }}}
- */
- def collect[B](pf: PartialFunction[A, B]) : List[B] = {
+ * Builds a new `List` by applying a partial function to
+ * all the elements from this `NonEmptyList` on which the function is defined
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> val nel = NonEmptyList.of(1, 2, 3, 4, 5)
+ * scala> nel.collect { case v if v < 3 => v }
+ * res0: scala.collection.immutable.List[Int] = List(1, 2)
+ * scala> nel.collect {
+ * | case v if v % 2 == 0 => "even"
+ * | case _ => "odd"
+ * | }
+ * res1: scala.collection.immutable.List[String] = List(odd, even, odd, even, odd)
+ * }}}
+ */
+ def collect[B](pf: PartialFunction[A, B]): List[B] =
if (pf.isDefinedAt(head)) {
pf.apply(head) :: tail.collect(pf)
} else {
tail.collect(pf)
}
- }
/**
* Find the first element matching the predicate, if one exists
@@ -279,29 +278,29 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
@tailrec
def go(h: A, rest: List[A], acc: List[A]): NonEmptyList[A] =
rest match {
- case Nil => NonEmptyList(h, acc)
+ case Nil => NonEmptyList(h, acc)
case h1 :: t1 => go(h1, t1, h :: acc)
}
go(head, tail, Nil)
}
/**
- * Zips this `NonEmptyList` with another `NonEmptyList` and applies a function for each pair of elements.
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> val as = NonEmptyList.of(1, 2, 3)
- * scala> val bs = NonEmptyList.of("A", "B", "C")
- * scala> as.zipWith(bs)(_ + _)
- * res0: cats.data.NonEmptyList[String] = NonEmptyList(1A, 2B, 3C)
- * }}}
- */
+ * Zips this `NonEmptyList` with another `NonEmptyList` and applies a function for each pair of elements.
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> val as = NonEmptyList.of(1, 2, 3)
+ * scala> val bs = NonEmptyList.of("A", "B", "C")
+ * scala> as.zipWith(bs)(_ + _)
+ * res0: cats.data.NonEmptyList[String] = NonEmptyList(1A, 2B, 3C)
+ * }}}
+ */
def zipWith[B, C](b: NonEmptyList[B])(f: (A, B) => C): NonEmptyList[C] = {
@tailrec
def zwRev(as: List[A], bs: List[B], acc: List[C]): List[C] = (as, bs) match {
- case (Nil, _) => acc
- case (_, Nil) => acc
+ case (Nil, _) => acc
+ case (_, Nil) => acc
case (x :: xs, y :: ys) => zwRev(xs, ys, f(x, y) :: acc)
}
@@ -330,50 +329,48 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
}
/**
- * Sorts this `NonEmptyList` according to an `Order` on transformed `B` from `A`
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> import cats.instances.int._
- * scala> val nel = NonEmptyList.of(('a', 4), ('z', 1), ('e', 22))
- * scala> nel.sortBy(_._2)
- * res0: cats.data.NonEmptyList[(Char, Int)] = NonEmptyList((z,1), (a,4), (e,22))
- * }}}
- */
- def sortBy[B](f: A => B)(implicit B: Order[B]): NonEmptyList[A] = {
+ * Sorts this `NonEmptyList` according to an `Order` on transformed `B` from `A`
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> import cats.instances.int._
+ * scala> val nel = NonEmptyList.of(('a', 4), ('z', 1), ('e', 22))
+ * scala> nel.sortBy(_._2)
+ * res0: cats.data.NonEmptyList[(Char, Int)] = NonEmptyList((z,1), (a,4), (e,22))
+ * }}}
+ */
+ def sortBy[B](f: A => B)(implicit B: Order[B]): NonEmptyList[A] =
// safe: sorting a NonEmptyList cannot produce an empty List
NonEmptyList.fromListUnsafe(toList.sortBy(f)(B.toOrdering))
- }
/**
- * Sorts this `NonEmptyList` according to an `Order`
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> import cats.instances.int._
- * scala> val nel = NonEmptyList.of(12, 4, 3, 9)
- * scala> nel.sorted
- * res0: cats.data.NonEmptyList[Int] = NonEmptyList(3, 4, 9, 12)
- * }}}
- */
- def sorted[AA >: A](implicit AA: Order[AA]): NonEmptyList[AA] = {
+ * Sorts this `NonEmptyList` according to an `Order`
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> import cats.instances.int._
+ * scala> val nel = NonEmptyList.of(12, 4, 3, 9)
+ * scala> nel.sorted
+ * res0: cats.data.NonEmptyList[Int] = NonEmptyList(3, 4, 9, 12)
+ * }}}
+ */
+ def sorted[AA >: A](implicit AA: Order[AA]): NonEmptyList[AA] =
// safe: sorting a NonEmptyList cannot produce an empty List
NonEmptyList.fromListUnsafe(toList.sorted(AA.toOrdering))
- }
/**
- * Groups elements inside this `NonEmptyList` according to the `Order`
- * of the keys produced by the given mapping function.
- *
- * {{{
- * scala> import scala.collection.immutable.SortedMap
- * scala> import cats.data.NonEmptyList
- * scala> import cats.instances.boolean._
- * scala> val nel = NonEmptyList.of(12, -2, 3, -5)
- * scala> nel.groupBy(_ >= 0)
- * res0: SortedMap[Boolean, cats.data.NonEmptyList[Int]] = Map(false -> NonEmptyList(-2, -5), true -> NonEmptyList(12, 3))
- * }}}
- */
+ * Groups elements inside this `NonEmptyList` according to the `Order`
+ * of the keys produced by the given mapping function.
+ *
+ * {{{
+ * scala> import scala.collection.immutable.SortedMap
+ * scala> import cats.data.NonEmptyList
+ * scala> import cats.instances.boolean._
+ * scala> val nel = NonEmptyList.of(12, -2, 3, -5)
+ * scala> nel.groupBy(_ >= 0)
+ * res0: SortedMap[Boolean, cats.data.NonEmptyList[Int]] = Map(false -> NonEmptyList(-2, -5), true -> NonEmptyList(12, 3))
+ * }}}
+ */
def groupBy[B](f: A => B)(implicit B: Order[B]): SortedMap[B, NonEmptyList[A]] = {
implicit val ordering: Ordering[B] = B.toOrdering
var m = TreeMap.empty[B, mutable.Builder[A, List[A]]]
@@ -382,43 +379,42 @@ final case class NonEmptyList[+A](head: A, tail: List[A]) {
val k = f(elem)
m.get(k) match {
- case None => m += ((k, List.newBuilder[A] += elem))
+ case None => m += ((k, List.newBuilder[A] += elem))
case Some(builder) => builder += elem
}
}
m.map {
case (k, v) => (k, NonEmptyList.fromListUnsafe(v.result))
- } : TreeMap[B, NonEmptyList[A]]
+ }: TreeMap[B, NonEmptyList[A]]
}
/**
- * Groups elements inside this `NonEmptyList` according to the `Order`
- * of the keys produced by the given mapping function.
- *
- * {{{
- * scala> import cats.data._
- * scala> import cats.instances.boolean._
- * scala> val nel = NonEmptyList.of(12, -2, 3, -5)
- * scala> nel.groupByNem(_ >= 0)
- * res0: NonEmptyMap[Boolean, NonEmptyList[Int]] = Map(false -> NonEmptyList(-2, -5), true -> NonEmptyList(12, 3))
- * }}}
- */
+ * Groups elements inside this `NonEmptyList` according to the `Order`
+ * of the keys produced by the given mapping function.
+ *
+ * {{{
+ * scala> import cats.data._
+ * scala> import cats.instances.boolean._
+ * scala> val nel = NonEmptyList.of(12, -2, 3, -5)
+ * scala> nel.groupByNem(_ >= 0)
+ * res0: NonEmptyMap[Boolean, NonEmptyList[Int]] = Map(false -> NonEmptyList(-2, -5), true -> NonEmptyList(12, 3))
+ * }}}
+ */
def groupByNem[B](f: A => B)(implicit B: Order[B]): NonEmptyMap[B, NonEmptyList[A]] =
NonEmptyMap.fromMapUnsafe(groupBy(f))
-
/**
- * Creates new `NonEmptyMap`, similarly to List#toMap from scala standard library.
- *{{{
- * scala> import cats.data._
- * scala> import cats.instances.int._
- * scala> val nel = NonEmptyList((0, "a"), List((1, "b"),(0, "c"), (2, "d")))
- * scala> nel.toNem
- * res0: NonEmptyMap[Int,String] = Map(0 -> c, 1 -> b, 2 -> d)
- *}}}
- *
- */
+ * Creates new `NonEmptyMap`, similarly to List#toMap from scala standard library.
+ *{{{
+ * scala> import cats.data._
+ * scala> import cats.instances.int._
+ * scala> val nel = NonEmptyList((0, "a"), List((1, "b"),(0, "c"), (2, "d")))
+ * scala> nel.toNem
+ * res0: NonEmptyMap[Int,String] = Map(0 -> c, 1 -> b, 2 -> d)
+ *}}}
+ *
+ */
def toNem[T, U](implicit ev: A <:< (T, U), order: Order[T]): NonEmptyMap[T, U] =
NonEmptyMap.fromMapUnsafe(SortedMap(toList.map(ev): _*)(order.toOrdering))
}
@@ -428,7 +424,7 @@ object NonEmptyList extends NonEmptyListInstances {
def ofInitLast[A](init: List[A], last: A): NonEmptyList[A] =
init match {
- case Nil => NonEmptyList(last, Nil)
+ case Nil => NonEmptyList(last, Nil)
case h :: t => NonEmptyList(h, t :+ last)
}
@@ -445,7 +441,7 @@ object NonEmptyList extends NonEmptyListInstances {
*/
def fromList[A](l: List[A]): Option[NonEmptyList[A]] =
l match {
- case Nil => None
+ case Nil => None
case h :: t => Some(NonEmptyList(h, t))
}
@@ -458,7 +454,7 @@ object NonEmptyList extends NonEmptyListInstances {
*/
def fromListUnsafe[A](l: List[A]): NonEmptyList[A] =
l match {
- case Nil => throw new IllegalArgumentException("Cannot create NonEmptyList from empty list")
+ case Nil => throw new IllegalArgumentException("Cannot create NonEmptyList from empty list")
case h :: t => NonEmptyList(h, t)
}
@@ -478,28 +474,30 @@ object NonEmptyList extends NonEmptyListInstances {
implicit val catsDataCommutativeApplyForZipNonEmptyList: CommutativeApply[ZipNonEmptyList] =
new CommutativeApply[ZipNonEmptyList] {
def ap[A, B](ff: ZipNonEmptyList[A => B])(fa: ZipNonEmptyList[A]): ZipNonEmptyList[B] =
- ZipNonEmptyList(ff.value.zipWith(fa.value)(_ apply _))
+ ZipNonEmptyList(ff.value.zipWith(fa.value)(_.apply(_)))
override def map[A, B](fa: ZipNonEmptyList[A])(f: (A) => B): ZipNonEmptyList[B] =
ZipNonEmptyList(fa.value.map(f))
override def product[A, B](fa: ZipNonEmptyList[A], fb: ZipNonEmptyList[B]): ZipNonEmptyList[(A, B)] =
- ZipNonEmptyList(fa.value.zipWith(fb.value){ case (a, b) => (a, b) })
+ ZipNonEmptyList(fa.value.zipWith(fb.value) { case (a, b) => (a, b) })
}
implicit def zipNelEq[A: Eq]: Eq[ZipNonEmptyList[A]] = Eq.by(_.value)
}
}
-private[data] sealed abstract class NonEmptyListInstances extends NonEmptyListInstances0 {
+sealed abstract private[data] class NonEmptyListInstances extends NonEmptyListInstances0 {
- implicit val catsDataInstancesForNonEmptyList: SemigroupK[NonEmptyList] with Reducible[NonEmptyList]
- with Bimonad[NonEmptyList] with NonEmptyTraverse[NonEmptyList] =
+ implicit val catsDataInstancesForNonEmptyList: SemigroupK[NonEmptyList]
+ with Reducible[NonEmptyList]
+ with Bimonad[NonEmptyList]
+ with NonEmptyTraverse[NonEmptyList] =
new NonEmptyReducible[NonEmptyList, List] with SemigroupK[NonEmptyList] with Bimonad[NonEmptyList]
- with NonEmptyTraverse[NonEmptyList] {
+ with NonEmptyTraverse[NonEmptyList] {
def combineK[A](a: NonEmptyList[A], b: NonEmptyList[A]): NonEmptyList[A] =
- a concatNel b
+ a.concatNel(b)
override def split[A](fa: NonEmptyList[A]): (A, List[A]) = (fa.head, fa.tail)
@@ -510,29 +508,34 @@ private[data] sealed abstract class NonEmptyListInstances extends NonEmptyListIn
fa.reduce
override def map[A, B](fa: NonEmptyList[A])(f: A => B): NonEmptyList[B] =
- fa map f
+ fa.map(f)
def pure[A](x: A): NonEmptyList[A] =
NonEmptyList.one(x)
def flatMap[A, B](fa: NonEmptyList[A])(f: A => NonEmptyList[B]): NonEmptyList[B] =
- fa flatMap f
+ fa.flatMap(f)
def coflatMap[A, B](fa: NonEmptyList[A])(f: NonEmptyList[A] => B): NonEmptyList[B] =
- fa coflatMap f
+ fa.coflatMap(f)
def extract[A](fa: NonEmptyList[A]): A = fa.head
def nonEmptyTraverse[G[_], A, B](nel: NonEmptyList[A])(f: A => G[B])(implicit G: Apply[G]): G[NonEmptyList[B]] =
- Foldable[List].reduceRightToOption[A, G[List[B]]](nel.tail)(a => G.map(f(a))(_ :: Nil)) { (a, lglb) =>
- G.map2Eval(f(a), lglb)(_ :: _)
- }.map {
- case None => G.map(f(nel.head))(NonEmptyList(_, Nil))
- case Some(gtail) => G.map2(f(nel.head), gtail)(NonEmptyList(_, _))
- }.value
+ Foldable[List]
+ .reduceRightToOption[A, G[List[B]]](nel.tail)(a => G.map(f(a))(_ :: Nil)) { (a, lglb) =>
+ G.map2Eval(f(a), lglb)(_ :: _)
+ }
+ .map {
+ case None => G.map(f(nel.head))(NonEmptyList(_, Nil))
+ case Some(gtail) => G.map2(f(nel.head), gtail)(NonEmptyList(_, _))
+ }
+ .value
- override def traverse[G[_], A, B](fa: NonEmptyList[A])(f: A => G[B])(implicit G: Applicative[G]): G[NonEmptyList[B]] =
- fa traverse f
+ override def traverse[G[_], A, B](
+ fa: NonEmptyList[A]
+ )(f: A => G[B])(implicit G: Applicative[G]): G[NonEmptyList[B]] =
+ fa.traverse(f)
override def foldLeft[A, B](fa: NonEmptyList[A], b: B)(f: (B, A) => B): B =
fa.foldLeft(b)(f)
@@ -546,14 +549,14 @@ private[data] sealed abstract class NonEmptyListInstances extends NonEmptyListIn
def tailRecM[A, B](a: A)(f: A => NonEmptyList[Either[A, B]]): NonEmptyList[B] = {
val buf = new ListBuffer[B]
@tailrec def go(v: NonEmptyList[Either[A, B]]): Unit = v.head match {
- case Right(b) =>
+ case Right(b) =>
buf += b
NonEmptyList.fromList(v.tail) match {
case Some(t) => go(t)
- case None => ()
+ case None => ()
}
case Left(a) => go(f(a) ++ v.tail)
- }
+ }
go(f(a))
NonEmptyList.fromListUnsafe(buf.result())
}
@@ -561,31 +564,34 @@ private[data] sealed abstract class NonEmptyListInstances extends NonEmptyListIn
override def fold[A](fa: NonEmptyList[A])(implicit A: Monoid[A]): A =
fa.reduce
- override def nonEmptyPartition[A, B, C](fa: NonEmptyList[A])
- (f: (A) => Either[B, C]): Ior[NonEmptyList[B], NonEmptyList[C]] = {
+ override def nonEmptyPartition[A, B, C](
+ fa: NonEmptyList[A]
+ )(f: (A) => Either[B, C]): Ior[NonEmptyList[B], NonEmptyList[C]] = {
import cats.syntax.either._
val reversed = fa.reverse
val lastIor = f(reversed.head).bimap(NonEmptyList.one, NonEmptyList.one).toIor
- reversed.tail.foldLeft(lastIor)((ior, a) => (f(a), ior) match {
- case (Right(c), Ior.Left(_)) => ior.putRight(NonEmptyList.one(c))
- case (Right(c), _) => ior.map(c :: _)
- case (Left(b), Ior.Right(r)) => Ior.bothNel(b, r)
- case (Left(b), _) => ior.leftMap(b :: _)
- })
+ reversed.tail.foldLeft(lastIor)(
+ (ior, a) =>
+ (f(a), ior) match {
+ case (Right(c), Ior.Left(_)) => ior.putRight(NonEmptyList.one(c))
+ case (Right(c), _) => ior.map(c :: _)
+ case (Left(b), Ior.Right(r)) => Ior.bothNel(b, r)
+ case (Left(b), _) => ior.leftMap(b :: _)
+ }
+ )
}
-
override def find[A](fa: NonEmptyList[A])(f: A => Boolean): Option[A] =
- fa find f
+ fa.find(f)
override def forall[A](fa: NonEmptyList[A])(p: A => Boolean): Boolean =
- fa forall p
+ fa.forall(p)
override def exists[A](fa: NonEmptyList[A])(p: A => Boolean): Boolean =
- fa exists p
+ fa.exists(p)
override def toList[A](fa: NonEmptyList[A]): List[A] = fa.toList
@@ -621,14 +627,14 @@ private[data] sealed abstract class NonEmptyListInstances extends NonEmptyListIn
}
}
-private[data] sealed abstract class NonEmptyListInstances0 extends NonEmptyListInstances1 {
+sealed abstract private[data] class NonEmptyListInstances0 extends NonEmptyListInstances1 {
implicit def catsDataPartialOrderForNonEmptyList[A](implicit A: PartialOrder[A]): PartialOrder[NonEmptyList[A]] =
new NonEmptyListPartialOrder[A] {
val A0 = A
}
}
-private[data] sealed abstract class NonEmptyListInstances1 {
+sealed abstract private[data] class NonEmptyListInstances1 {
implicit def catsDataEqForNonEmptyList[A](implicit A: Eq[A]): Eq[NonEmptyList[A]] =
new NonEmptyListEq[A] {
@@ -636,22 +642,24 @@ private[data] sealed abstract class NonEmptyListInstances1 {
}
}
-private[data] sealed trait NonEmptyListEq[A] extends Eq[NonEmptyList[A]] {
+sealed private[data] trait NonEmptyListEq[A] extends Eq[NonEmptyList[A]] {
implicit def A0: Eq[A]
override def eqv(x: NonEmptyList[A], y: NonEmptyList[A]): Boolean = x === y
}
-private[data] sealed trait NonEmptyListPartialOrder[A] extends PartialOrder[NonEmptyList[A]] with NonEmptyListEq[A] {
- override implicit def A0: PartialOrder[A]
+sealed private[data] trait NonEmptyListPartialOrder[A] extends PartialOrder[NonEmptyList[A]] with NonEmptyListEq[A] {
+ implicit override def A0: PartialOrder[A]
override def partialCompare(x: NonEmptyList[A], y: NonEmptyList[A]): Double =
- x.toList partialCompare y.toList
+ x.toList.partialCompare(y.toList)
}
-private[data] sealed abstract class NonEmptyListOrder[A] extends Order[NonEmptyList[A]] with NonEmptyListPartialOrder[A] {
- override implicit def A0: Order[A]
+sealed abstract private[data] class NonEmptyListOrder[A]
+ extends Order[NonEmptyList[A]]
+ with NonEmptyListPartialOrder[A] {
+ implicit override def A0: Order[A]
override def compare(x: NonEmptyList[A], y: NonEmptyList[A]): Int =
- x.toList compare y.toList
+ x.toList.compare(y.toList)
}
diff --git a/core/src/main/scala/cats/data/NonEmptyMapImpl.scala b/core/src/main/scala/cats/data/NonEmptyMapImpl.scala
index 9ce00f0ece..8b8479cb90 100644
--- a/core/src/main/scala/cats/data/NonEmptyMapImpl.scala
+++ b/core/src/main/scala/cats/data/NonEmptyMapImpl.scala
@@ -41,7 +41,6 @@ private[data] object NonEmptyMapImpl extends NonEmptyMapInstances with Newtype2
def apply[K, A](head: (K, A), tail: SortedMap[K, A])(implicit K: Order[K]): NonEmptyMap[K, A] =
create(SortedMap(head)(K.toOrdering) ++ tail)
-
def of[K, A](a: (K, A), as: (K, A)*)(implicit K: Order[K]): NonEmptyMap[K, A] =
create(SortedMap(as: _*)(K.toOrdering) + a)
@@ -51,215 +50,216 @@ private[data] object NonEmptyMapImpl extends NonEmptyMapInstances with Newtype2
implicit def catsNonEmptyMapOps[K, A](value: Type[K, A]): NonEmptyMapOps[K, A] =
new NonEmptyMapOps(value)
-
}
sealed class NonEmptyMapOps[K, A](val value: NonEmptyMap[K, A]) {
+
/**
- * Converts this map to a `SortedMap`.
- */
+ * Converts this map to a `SortedMap`.
+ */
def toSortedMap: SortedMap[K, A] = NonEmptyMapImpl.unwrap(value)
- private implicit val ordering: Ordering[K] = toSortedMap.ordering
- private implicit val order: Order[K] = Order.fromOrdering
+ implicit private val ordering: Ordering[K] = toSortedMap.ordering
+ implicit private val order: Order[K] = Order.fromOrdering
/**
- * Alias for [[concat]]
- */
+ * Alias for [[concat]]
+ */
def ++(as: NonEmptyMap[K, A]): NonEmptyMap[K, A] = concat(as)
+
/**
- * Appends this NEM to another NEM, producing a new `NonEmptyMap`.
- */
+ * Appends this NEM to another NEM, producing a new `NonEmptyMap`.
+ */
def concat(as: NonEmptyMap[K, A]): NonEmptyMap[K, A] = NonEmptyMapImpl.create(toSortedMap ++ as.toSortedMap)
/**
- * Removes a key from this map, returning a new SortedMap.
- */
+ * Removes a key from this map, returning a new SortedMap.
+ */
def -(key: K): SortedMap[K, A] = toSortedMap - key
-
/**
- * Adds a key-value pair to this map, returning a new `NonEmptyMap`.
- * */
+ * Adds a key-value pair to this map, returning a new `NonEmptyMap`.
+ * */
def add(ka: (K, A)): NonEmptyMap[K, A] = NonEmptyMapImpl.create(toSortedMap + ka)
/**
- * Applies f to all the elements
- */
+ * Applies f to all the elements
+ */
def map[B](f: A ⇒ B): NonEmptyMap[K, B] =
NonEmptyMapImpl.create(Functor[SortedMap[K, ?]].map(toSortedMap)(f))
/**
- * Optionally returns the value associated with the given key.
- */
+ * Optionally returns the value associated with the given key.
+ */
def lookup(k: K): Option[A] = toSortedMap.get(k)
/**
- * Returns a `SortedSet` containing all the keys of this map.
- */
+ * Returns a `SortedSet` containing all the keys of this map.
+ */
def keys: NonEmptySet[K] = NonEmptySet.fromSetUnsafe(toSortedMap.keySet)
/**
- * Returns the first key-value pair of this map.
- */
+ * Returns the first key-value pair of this map.
+ */
def head: (K, A) = toSortedMap.head
+
/**
- * Returns the last key-value pair of this map.
- */
+ * Returns the last key-value pair of this map.
+ */
def last: (K, A) = toSortedMap.last
/**
- * Returns all the key-value pairs, except for the first.
- */
+ * Returns all the key-value pairs, except for the first.
+ */
def tail: SortedMap[K, A] = toSortedMap.tail
/**
- * Alias for [[lookup]]
- */
+ * Alias for [[lookup]]
+ */
def apply(key: K): Option[A] = lookup(key)
/**
- * Checks whether this map contains a binding for the given key.
- */
+ * Checks whether this map contains a binding for the given key.
+ */
def contains(key: K): Boolean = toSortedMap.contains(key)
-
/**
- * Tests whether a predicate holds for all elements of this map.
- */
+ * Tests whether a predicate holds for all elements of this map.
+ */
def forall(p: A ⇒ Boolean): Boolean = toSortedMap.forall { case (_, a) => p(a) }
/**
- * Tests whether a predicate holds for at least one element of this map.
- */
+ * Tests whether a predicate holds for at least one element of this map.
+ */
def exists(f: A ⇒ Boolean): Boolean = toSortedMap.exists { case (_, a) => f(a) }
/**
- * Returns the first value along with its key, that matches the given predicate.
- */
+ * Returns the first value along with its key, that matches the given predicate.
+ */
def find(f: A ⇒ Boolean): Option[(K, A)] = toSortedMap.find { case (_, a) => f(a) }
/**
- * Filters all elements of this map that do not satisfy the given predicate.
- */
- def filter(p: A ⇒ Boolean): SortedMap[K, A] = toSortedMap.filter { case (_, a) => p(a) }
+ * Filters all elements of this map that do not satisfy the given predicate.
+ */
+ def filter(p: A ⇒ Boolean): SortedMap[K, A] = toSortedMap.filter { case (_, a) => p(a) }
/**
- * Filters all elements of this map that satisfy the given predicate.
- */
+ * Filters all elements of this map that satisfy the given predicate.
+ */
def filterNot(p: A ⇒ Boolean): SortedMap[K, A] = filter(t => !p(t))
-
/**
- * Left-associative fold using f.
- */
+ * Left-associative fold using f.
+ */
def foldLeft[B](b: B)(f: (B, A) => B): B =
toSortedMap.foldLeft(b)((b, t) => f(b, t._2))
/**
- * Right-associative fold using f.
- */
+ * Right-associative fold using f.
+ */
def foldRight[B](lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
Foldable[SortedMap[K, ?]].foldRight(toSortedMap, lb)(f)
/**
- * Left-associative reduce using f.
- */
+ * Left-associative reduce using f.
+ */
def reduceLeft(f: (A, A) => A): A =
reduceLeftTo(identity)(f)
-
/**
- * Apply `f` to the "initial element" of `fa` and combine it with
- * every other value using the given function `g`.
- */
+ * Apply `f` to the "initial element" of `fa` and combine it with
+ * every other value using the given function `g`.
+ */
def reduceLeftTo[B](f: A => B)(g: (B, A) => B): B =
tail.foldLeft(f(head._2))((b, a) => g(b, a._2))
/**
- * Right-associative reduce using f.
- */
+ * Right-associative reduce using f.
+ */
def reduceRight(f: (A, Eval[A]) => Eval[A]): Eval[A] =
reduceRightTo(identity)(f)
/**
- * Apply `f` to the "initial element" of this map and lazily combine it
- * with every other value using the given function `g`.
- */
+ * Apply `f` to the "initial element" of this map and lazily combine it
+ * with every other value using the given function `g`.
+ */
def reduceRightTo[B](f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[B] =
- Always((head, tail)).flatMap { case ((_, a), ga) =>
- Foldable[SortedMap[K, ?]].reduceRightToOption(ga)(f)(g).flatMap {
- case Some(b) => g(a, Now(b))
- case None => Later(f(a))
- }
+ Always((head, tail)).flatMap {
+ case ((_, a), ga) =>
+ Foldable[SortedMap[K, ?]].reduceRightToOption(ga)(f)(g).flatMap {
+ case Some(b) => g(a, Now(b))
+ case None => Later(f(a))
+ }
}
-
/**
- * Reduce using the Semigroup of A
- */
+ * Reduce using the Semigroup of A
+ */
def reduce(implicit S: Semigroup[A]): A =
reduceLeft(S.combine)
- private def reduceRightToOptionWithKey[V, B](fa: SortedMap[K, V])(f: (K, V) => B)(g: ((K, V), Eval[B]) => Eval[B]): Eval[Option[B]] =
+ private def reduceRightToOptionWithKey[V, B](
+ fa: SortedMap[K, V]
+ )(f: (K, V) => B)(g: ((K, V), Eval[B]) => Eval[B]): Eval[Option[B]] =
Foldable.iterateRight(fa.toIterable, Now(Option.empty[B])) { (a, lb) =>
lb.flatMap {
case Some(b) => g(a, Now(b)).map(Some(_))
- case None => Later(Some(f.tupled(a)))
+ case None => Later(Some(f.tupled(a)))
}
}
/**
- * Given a function which returns a G effect, thread this effect
- * through the running of this function on all the values in this map,
- * returning an NonEmptyMap[K, B] in a G context.
- */
+ * Given a function which returns a G effect, thread this effect
+ * through the running of this function on all the values in this map,
+ * returning an NonEmptyMap[K, B] in a G context.
+ */
def nonEmptyTraverse[G[_], B](f: A => G[B])(implicit G: Apply[G]): G[NonEmptyMap[K, B]] =
- reduceRightToOptionWithKey[A, G[SortedMap[K, B]]](tail)({ case (k, a) =>
- G.map(f(a))(b => SortedMap.empty[K, B] + ((k, b)))
+ reduceRightToOptionWithKey[A, G[SortedMap[K, B]]](tail)({
+ case (k, a) =>
+ G.map(f(a))(b => SortedMap.empty[K, B] + ((k, b)))
}) { (t, lglb) =>
G.map2Eval(f(t._2), lglb)((b, bs) => bs + ((t._1, b)))
}.map {
- case None => G.map(f(head._2))(a => NonEmptyMapImpl.one(head._1, a))
+ case None => G.map(f(head._2))(a => NonEmptyMapImpl.one(head._1, a))
case Some(gtail) => G.map2(f(head._2), gtail)((a, bs) => NonEmptyMapImpl((head._1, a), bs))
}.value
/**
- * Typesafe stringification method.
- *
- * This method is similar to .toString except that it stringifies
- * values according to Show[_] instances, rather than using the
- * universal .toString method.
- */
+ * Typesafe stringification method.
+ *
+ * This method is similar to .toString except that it stringifies
+ * values according to Show[_] instances, rather than using the
+ * universal .toString method.
+ */
def show(implicit A: Show[A], K: Show[K]): String =
s"NonEmpty${Show[SortedMap[K, A]].show(toSortedMap)}"
/**
- * Typesafe equality operator.
- *
- * This method is similar to == except that it only allows two
- * NonEmptySet[A] values to be compared to each other, and uses
- * equality provided by Eq[_] instances, rather than using the
- * universal equality provided by .equals.
- */
+ * Typesafe equality operator.
+ *
+ * This method is similar to == except that it only allows two
+ * NonEmptySet[A] values to be compared to each other, and uses
+ * equality provided by Eq[_] instances, rather than using the
+ * universal equality provided by .equals.
+ */
def ===(that: NonEmptyMap[K, A])(implicit A: Eq[A]): Boolean =
Eq[SortedMap[K, A]].eqv(toSortedMap, that.toSortedMap)
/**
- * Returns the amount of key-value pars in this map.
- */
+ * Returns the amount of key-value pars in this map.
+ */
def length: Int = toSortedMap.size
/**
- * Returns a non empty list of map contents, similarly to Map#toList
- */
+ * Returns a non empty list of map contents, similarly to Map#toList
+ */
def toNel: NonEmptyList[(K, A)] = NonEmptyList.fromListUnsafe(toSortedMap.toList)
}
-private[data] sealed abstract class NonEmptyMapInstances {
-
+sealed abstract private[data] class NonEmptyMapInstances {
- implicit def catsDataInstancesForNonEmptyMap[K: Order]: SemigroupK[NonEmptyMap[K, ?]] with NonEmptyTraverse[NonEmptyMap[K, ?]] =
+ implicit def catsDataInstancesForNonEmptyMap[K: Order]
+ : SemigroupK[NonEmptyMap[K, ?]] with NonEmptyTraverse[NonEmptyMap[K, ?]] =
new SemigroupK[NonEmptyMap[K, ?]] with NonEmptyTraverse[NonEmptyMap[K, ?]] {
override def map[A, B](fa: NonEmptyMap[K, A])(f: A => B): NonEmptyMap[K, B] =
@@ -282,7 +282,7 @@ private[data] sealed abstract class NonEmptyMapInstances {
fa.reduceRightTo(f)(g)
def nonEmptyTraverse[G[_], A, B](fa: NonEmptyMap[K, A])(f: A => G[B])(implicit G: Apply[G]) =
- fa nonEmptyTraverse f
+ fa.nonEmptyTraverse(f)
override def foldLeft[A, B](fa: NonEmptyMap[K, A], b: B)(f: (B, A) => B): B =
fa.foldLeft(b)(f)
@@ -310,7 +310,7 @@ private[data] sealed abstract class NonEmptyMapInstances {
}
implicit def catsDataEqForNonEmptyMap[K: Order, A: Eq]: Eq[NonEmptyMap[K, A]] =
- new Eq[NonEmptyMap[K, A]]{
+ new Eq[NonEmptyMap[K, A]] {
def eqv(x: NonEmptyMap[K, A], y: NonEmptyMap[K, A]): Boolean = x === y
}
@@ -321,4 +321,3 @@ private[data] sealed abstract class NonEmptyMapInstances {
def combine(x: NonEmptyMap[K, A], y: NonEmptyMap[K, A]): NonEmptyMap[K, A] = x ++ y
}
}
-
diff --git a/core/src/main/scala/cats/data/NonEmptySet.scala b/core/src/main/scala/cats/data/NonEmptySet.scala
index cf39299c12..14b25de7f4 100644
--- a/core/src/main/scala/cats/data/NonEmptySet.scala
+++ b/core/src/main/scala/cats/data/NonEmptySet.scala
@@ -22,7 +22,6 @@ import cats.kernel._
import scala.collection.immutable._
-
private[data] object NonEmptySetImpl extends NonEmptySetInstances with Newtype {
private[cats] def create[A](s: SortedSet[A]): Type[A] =
@@ -31,7 +30,6 @@ private[data] object NonEmptySetImpl extends NonEmptySetInstances with Newtype {
private[cats] def unwrap[A](s: Type[A]): SortedSet[A] =
s.asInstanceOf[SortedSet[A]]
-
def fromSet[A](as: SortedSet[A]): Option[NonEmptySet[A]] =
if (as.nonEmpty) Option(create(as)) else None
@@ -39,7 +37,6 @@ private[data] object NonEmptySetImpl extends NonEmptySetInstances with Newtype {
if (set.nonEmpty) create(set)
else throw new IllegalArgumentException("Cannot create NonEmptySet from empty set")
-
def of[A](a: A, as: A*)(implicit A: Order[A]): NonEmptySet[A] =
create(SortedSet(a +: as: _*)(A.toOrdering))
def apply[A](head: A, tail: SortedSet[A])(implicit A: Order[A]): NonEmptySet[A] =
@@ -50,208 +47,203 @@ private[data] object NonEmptySetImpl extends NonEmptySetInstances with Newtype {
new NonEmptySetOps(value)
}
-
sealed class NonEmptySetOps[A](val value: NonEmptySet[A]) {
- private implicit val ordering: Ordering[A] = toSortedSet.ordering
- private implicit val order: Order[A] = Order.fromOrdering
+ implicit private val ordering: Ordering[A] = toSortedSet.ordering
+ implicit private val order: Order[A] = Order.fromOrdering
/**
- * Converts this set to a `SortedSet`
- */
+ * Converts this set to a `SortedSet`
+ */
def toSortedSet: SortedSet[A] = NonEmptySetImpl.unwrap(value)
-
/**
- * Adds an element to this set, returning a new `NonEmptySet`
- */
+ * Adds an element to this set, returning a new `NonEmptySet`
+ */
def add(a: A): NonEmptySet[A] = NonEmptySet.create(toSortedSet + a)
/**
- * Alias for [[union]]
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
- * scala> nes ++ NonEmptySet.of(1, 2, 7)
- * res0: cats.data.NonEmptySet[Int] = TreeSet(1, 2, 4, 5, 7)
- * }}}
- */
+ * Alias for [[union]]
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
+ * scala> nes ++ NonEmptySet.of(1, 2, 7)
+ * res0: cats.data.NonEmptySet[Int] = TreeSet(1, 2, 4, 5, 7)
+ * }}}
+ */
def ++(as: NonEmptySet[A]): NonEmptySet[A] = union(as)
/**
- * Alias for [[union]]
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
- * scala> nes | NonEmptySet.of(1, 2, 7)
- * res0: cats.data.NonEmptySet[Int] = TreeSet(1, 2, 4, 5, 7)
- * }}}
- */
- def | (as: NonEmptySet[A]): NonEmptySet[A] = union(as)
-
- /**
- * Alias for [[diff]]
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
- * scala> nes -- NonEmptySet.of(1, 2, 7)
- * res0: scala.collection.immutable.SortedSet[Int] = TreeSet(4, 5)
- * }}}
- */
+ * Alias for [[union]]
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
+ * scala> nes | NonEmptySet.of(1, 2, 7)
+ * res0: cats.data.NonEmptySet[Int] = TreeSet(1, 2, 4, 5, 7)
+ * }}}
+ */
+ def |(as: NonEmptySet[A]): NonEmptySet[A] = union(as)
+
+ /**
+ * Alias for [[diff]]
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
+ * scala> nes -- NonEmptySet.of(1, 2, 7)
+ * res0: scala.collection.immutable.SortedSet[Int] = TreeSet(4, 5)
+ * }}}
+ */
def --(as: NonEmptySet[A]): SortedSet[A] = diff(as)
/**
- * Alias for [[diff]]
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
- * scala> nes &~ NonEmptySet.of(1, 2, 7)
- * res0: scala.collection.immutable.SortedSet[Int] = TreeSet(4, 5)
- * }}}
- */
+ * Alias for [[diff]]
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
+ * scala> nes &~ NonEmptySet.of(1, 2, 7)
+ * res0: scala.collection.immutable.SortedSet[Int] = TreeSet(4, 5)
+ * }}}
+ */
def &~(as: NonEmptySet[A]): SortedSet[A] = diff(as)
/**
- * Alias for [[intersect]]
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
- * scala> nes & NonEmptySet.of(1, 2, 7)
- * res0: scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2)
- * }}}
- */
+ * Alias for [[intersect]]
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 4, 5)
+ * scala> nes & NonEmptySet.of(1, 2, 7)
+ * res0: scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2)
+ * }}}
+ */
def &(as: NonEmptySet[A]): SortedSet[A] = intersect(as)
-
/**
- * Removes a key from this set, returning a new `SortedSet`.
- */
+ * Removes a key from this set, returning a new `SortedSet`.
+ */
def -(a: A): SortedSet[A] = toSortedSet - a
/**
- * Applies f to all the elements
- */
+ * Applies f to all the elements
+ */
def map[B](f: A => B)(implicit B: Order[B]): NonEmptySet[B] = {
implicit val bOrdering = B.toOrdering
NonEmptySetImpl.create(toSortedSet.map(f))
}
-
/**
- * Converts this set to a `NonEmptyList`.
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 3, 4, 5)
- * scala> nes.toNonEmptyList
- * res0: cats.data.NonEmptyList[Int] = NonEmptyList(1, 2, 3, 4, 5)
- * }}}
- */
+ * Converts this set to a `NonEmptyList`.
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 3, 4, 5)
+ * scala> nes.toNonEmptyList
+ * res0: cats.data.NonEmptyList[Int] = NonEmptyList(1, 2, 3, 4, 5)
+ * }}}
+ */
def toNonEmptyList: NonEmptyList[A] = NonEmptyList.fromListUnsafe(toSortedSet.toList)
/**
- * Returns the first element of this set.
- */
+ * Returns the first element of this set.
+ */
def head: A = toSortedSet.head
/**
- * Returns all but the first element of this set.
- */
+ * Returns all but the first element of this set.
+ */
def tail: SortedSet[A] = toSortedSet.tail
/**
- * Returns the last element of this set.
- */
+ * Returns the last element of this set.
+ */
def last: A = toSortedSet.last
/**
- * Alias for [[contains]]
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 3, 4, 5)
- * scala> nes(3)
- * res0: Boolean = true
- * scala> nes(7)
- * res1: Boolean = false
- * }}}
- */
+ * Alias for [[contains]]
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 3, 4, 5)
+ * scala> nes(3)
+ * res0: Boolean = true
+ * scala> nes(7)
+ * res1: Boolean = false
+ * }}}
+ */
def apply(a: A): Boolean = contains(a)
/**
- * Tests if some element is contained in this set.
- */
+ * Tests if some element is contained in this set.
+ */
def contains(a: A): Boolean = toSortedSet(a)
/**
- * Computes the difference of this set and another set.
- */
+ * Computes the difference of this set and another set.
+ */
def diff(as: NonEmptySet[A]): SortedSet[A] = toSortedSet -- as.toSortedSet
/**
- * Computes the union between this NES and another NES.
- */
+ * Computes the union between this NES and another NES.
+ */
def union(as: NonEmptySet[A]): NonEmptySet[A] = NonEmptySetImpl.create(toSortedSet ++ as.toSortedSet)
/**
- * Computes the intersection between this set and another set.
- */
+ * Computes the intersection between this set and another set.
+ */
def intersect(as: NonEmptySet[A]): SortedSet[A] = toSortedSet.filter(as.apply)
/**
- * Tests whether a predicate holds for all elements of this set.
- */
+ * Tests whether a predicate holds for all elements of this set.
+ */
def forall(p: A ⇒ Boolean): Boolean = toSortedSet.forall(p)
/**
- * Tests whether a predicate holds for at least one element of this set.
- */
+ * Tests whether a predicate holds for at least one element of this set.
+ */
def exists(f: A ⇒ Boolean): Boolean = toSortedSet.exists(f)
/**
- * Returns the first value that matches the given predicate.
- */
+ * Returns the first value that matches the given predicate.
+ */
def find(f: A ⇒ Boolean): Option[A] = toSortedSet.find(f)
/**
- * Returns a new `SortedSet` containing all elements where the result of `pf` is defined.
- */
+ * Returns a new `SortedSet` containing all elements where the result of `pf` is defined.
+ */
def collect[B](pf: PartialFunction[A, B])(implicit B: Order[B]): SortedSet[B] = {
implicit val ordering = B.toOrdering
toSortedSet.collect(pf)
}
/**
- * Filters all elements of this set that do not satisfy the given predicate.
- */
+ * Filters all elements of this set that do not satisfy the given predicate.
+ */
def filter(p: A ⇒ Boolean): SortedSet[A] = toSortedSet.filter(p)
/**
- * Filters all elements of this set that satisfy the given predicate.
- */
+ * Filters all elements of this set that satisfy the given predicate.
+ */
def filterNot(p: A ⇒ Boolean): SortedSet[A] = filter(t => !p(t))
-
/**
- * Left-associative fold using f.
- */
+ * Left-associative fold using f.
+ */
def foldLeft[B](b: B)(f: (B, A) => B): B =
toSortedSet.foldLeft(b)(f)
/**
- * Right-associative fold using f.
- */
+ * Right-associative fold using f.
+ */
def foldRight[B](lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
Foldable[SortedSet].foldRight(toSortedSet, lb)(f)
/**
- * Left-associative reduce using f.
- */
+ * Left-associative reduce using f.
+ */
def reduceLeft(f: (A, A) => A): A =
toSortedSet.reduceLeft(f)
@@ -259,117 +251,114 @@ sealed class NonEmptySetOps[A](val value: NonEmptySet[A]) {
* Apply `f` to the "initial element" of this set and lazily combine it
* with every other value using the given function `g`.
*/
- def reduceLeftTo[B](f: A => B)(g: (B, A) => B): B = {
+ def reduceLeftTo[B](f: A => B)(g: (B, A) => B): B =
tail.foldLeft(f(head))((b, a) => g(b, a))
- }
/**
- * Left-associative reduce using f.
- */
+ * Left-associative reduce using f.
+ */
def reduceRight(f: (A, Eval[A]) => Eval[A]): Eval[A] =
reduceRightTo(identity)(f)
/**
- * Apply `f` to the "initial element" of this set and lazily combine it
- * with every other value using the given function `g`.
- */
+ * Apply `f` to the "initial element" of this set and lazily combine it
+ * with every other value using the given function `g`.
+ */
def reduceRightTo[B](f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[B] =
- Always((head, tail)).flatMap { case (a, ga) =>
- Foldable[SortedSet].reduceRightToOption(ga)(f)(g).flatMap {
- case Some(b) => g(a, Now(b))
- case None => Later(f(a))
- }
+ Always((head, tail)).flatMap {
+ case (a, ga) =>
+ Foldable[SortedSet].reduceRightToOption(ga)(f)(g).flatMap {
+ case Some(b) => g(a, Now(b))
+ case None => Later(f(a))
+ }
}
/**
- * Reduce using the Semigroup of A
- */
+ * Reduce using the Semigroup of A
+ */
def reduce[AA >: A](implicit S: Semigroup[AA]): AA =
S.combineAllOption(toSortedSet).get
/**
- * Map a function over all the elements of this set and concatenate the resulting sets into one.
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val nes = NonEmptySet.of(1, 2, 3)
- * scala> nes.concatMap(n => NonEmptySet.of(n, n * 4, n * 5))
- * res0: cats.data.NonEmptySet[Int] = TreeSet(1, 2, 3, 4, 5, 8, 10, 12, 15)
- * }}}
- */
+ * Map a function over all the elements of this set and concatenate the resulting sets into one.
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val nes = NonEmptySet.of(1, 2, 3)
+ * scala> nes.concatMap(n => NonEmptySet.of(n, n * 4, n * 5))
+ * res0: cats.data.NonEmptySet[Int] = TreeSet(1, 2, 3, 4, 5, 8, 10, 12, 15)
+ * }}}
+ */
def concatMap[B](f: A => NonEmptySet[B])(implicit B: Order[B]): NonEmptySet[B] = {
implicit val ordering = B.toOrdering
- NonEmptySetImpl.create(toSortedSet.flatMap(f andThen (_.toSortedSet)))
+ NonEmptySetImpl.create(toSortedSet.flatMap(f.andThen(_.toSortedSet)))
}
-
/**
- * Typesafe stringification method.
- *
- * This method is similar to .toString except that it stringifies
- * values according to Show[_] instances, rather than using the
- * universal .toString method.
- */
+ * Typesafe stringification method.
+ *
+ * This method is similar to .toString except that it stringifies
+ * values according to Show[_] instances, rather than using the
+ * universal .toString method.
+ */
def show(implicit A: Show[A]): String =
s"NonEmpty${Show[SortedSet[A]].show(toSortedSet)}"
/**
- * Typesafe equality operator.
- *
- * This method is similar to == except that it only allows two
- * NonEmptySet[A] values to be compared to each other, and uses
- * equality provided by Eq[_] instances, rather than using the
- * universal equality provided by .equals.
- */
+ * Typesafe equality operator.
+ *
+ * This method is similar to == except that it only allows two
+ * NonEmptySet[A] values to be compared to each other, and uses
+ * equality provided by Eq[_] instances, rather than using the
+ * universal equality provided by .equals.
+ */
def ===(that: NonEmptySet[A]): Boolean =
Eq[SortedSet[A]].eqv(toSortedSet, that.toSortedSet)
/**
- * Returns the number of elements in this set.
- */
+ * Returns the number of elements in this set.
+ */
def length: Int = toSortedSet.size
/**
- * Zips this `NonEmptySet` with another `NonEmptySet` and applies a function for each pair of elements.
- *
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- * scala> val as = NonEmptySet.of(1, 2, 3)
- * scala> val bs = NonEmptySet.of("A", "B", "C")
- * scala> as.zipWith(bs)(_ + _)
- * res0: cats.data.NonEmptySet[String] = TreeSet(1A, 2B, 3C)
- * }}}
- */
+ * Zips this `NonEmptySet` with another `NonEmptySet` and applies a function for each pair of elements.
+ *
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ * scala> val as = NonEmptySet.of(1, 2, 3)
+ * scala> val bs = NonEmptySet.of("A", "B", "C")
+ * scala> as.zipWith(bs)(_ + _)
+ * res0: cats.data.NonEmptySet[String] = TreeSet(1A, 2B, 3C)
+ * }}}
+ */
def zipWith[B, C](b: NonEmptySet[B])(f: (A, B) => C)(implicit C: Order[C]): NonEmptySet[C] = {
implicit val cOrdering = C.toOrdering
NonEmptySetImpl.create((toSortedSet, b.toSortedSet).zipped.map(f))
}
/**
- * Zips this `NonEmptySet` with its index.
- */
- def zipWithIndex: NonEmptySet[(A, Int)] = {
+ * Zips this `NonEmptySet` with its index.
+ */
+ def zipWithIndex: NonEmptySet[(A, Int)] =
NonEmptySetImpl.create(cats.compat.SortedSet.zipWithIndex(toSortedSet))
- }
/**
- * Groups elements inside this `NonEmptySet` according to the `Order`
- * of the keys produced by the given mapping function.
- */
- def groupBy[B](f: A => B)(implicit B: Order[B]): NonEmptyMap[B, NonEmptySet[A]] = {
- reduceLeftTo(a => NonEmptyMap.one(f(a), NonEmptySet.one(a))) { (acc, a) =>
- val key = f(a)
- val result = acc.lookup(key) match {
- case Some(nes) => nes.add(a)
- case _ => NonEmptySet.one(a)
- }
- acc.add((key, result))
- }
- }
+ * Groups elements inside this `NonEmptySet` according to the `Order`
+ * of the keys produced by the given mapping function.
+ */
+ def groupBy[B](f: A => B)(implicit B: Order[B]): NonEmptyMap[B, NonEmptySet[A]] =
+ reduceLeftTo(a => NonEmptyMap.one(f(a), NonEmptySet.one(a))) { (acc, a) =>
+ val key = f(a)
+ val result = acc.lookup(key) match {
+ case Some(nes) => nes.add(a)
+ case _ => NonEmptySet.one(a)
+ }
+ acc.add((key, result))
+ }
}
-private[data] sealed abstract class NonEmptySetInstances {
+sealed abstract private[data] class NonEmptySetInstances {
implicit val catsDataInstancesForNonEmptySet: SemigroupK[NonEmptySet] with Reducible[NonEmptySet] =
new SemigroupK[NonEmptySet] with Reducible[NonEmptySet] {
@@ -417,7 +406,7 @@ private[data] sealed abstract class NonEmptySetInstances {
}
implicit def catsDataEqForNonEmptySet[A: Order]: Eq[NonEmptySet[A]] =
- new Eq[NonEmptySet[A]]{
+ new Eq[NonEmptySet[A]] {
def eqv(x: NonEmptySet[A], y: NonEmptySet[A]): Boolean = x === y
}
@@ -428,4 +417,3 @@ private[data] sealed abstract class NonEmptySetInstances {
def combine(x: NonEmptySet[A], y: NonEmptySet[A]): NonEmptySet[A] = x | y
}
}
-
diff --git a/core/src/main/scala/cats/data/NonEmptyVector.scala b/core/src/main/scala/cats/data/NonEmptyVector.scala
index d0db284d52..0367028cee 100644
--- a/core/src/main/scala/cats/data/NonEmptyVector.scala
+++ b/core/src/main/scala/cats/data/NonEmptyVector.scala
@@ -30,8 +30,7 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
* Updates the element at the index, or throws an `IndexOutOfBoundsException`
* if none exists (if `i` does not satisfy `0 <= i < length`).
*/
- def updatedUnsafe[AA >: A](i: Int, a: AA):
- NonEmptyVector[AA] = new NonEmptyVector(toVector.updated(i, a))
+ def updatedUnsafe[AA >: A](i: Int, a: AA): NonEmptyVector[AA] = new NonEmptyVector(toVector.updated(i, a))
def head: A = toVector.head
@@ -42,27 +41,27 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
def init: Vector[A] = toVector.init
/**
- * Remove elements not matching the predicate
- *
- * {{{
- * scala> import cats.data.NonEmptyVector
- * scala> val nev = NonEmptyVector.of(1, 2, 3, 4, 5)
- * scala> nev.filter(_ < 3)
- * res0: scala.collection.immutable.Vector[Int] = Vector(1, 2)
- * }}}
- */
+ * Remove elements not matching the predicate
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyVector
+ * scala> val nev = NonEmptyVector.of(1, 2, 3, 4, 5)
+ * scala> nev.filter(_ < 3)
+ * res0: scala.collection.immutable.Vector[Int] = Vector(1, 2)
+ * }}}
+ */
def filter(f: A => Boolean): Vector[A] = toVector.filter(f)
/**
- * Remove elements matching the predicate
- *
- * {{{
- * scala> import cats.data.NonEmptyVector
- * scala> val nev = NonEmptyVector.of(1, 2, 3, 4, 5)
- * scala> nev.filterNot(_ < 3)
- * res0: scala.collection.immutable.Vector[Int] = Vector(3, 4, 5)
- * }}}
- */
+ * Remove elements matching the predicate
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyVector
+ * scala> val nev = NonEmptyVector.of(1, 2, 3, 4, 5)
+ * scala> nev.filterNot(_ < 3)
+ * res0: scala.collection.immutable.Vector[Int] = Vector(3, 4, 5)
+ * }}}
+ */
def filterNot(f: A => Boolean): Vector[A] = toVector.filterNot(f)
def collect[B](pf: PartialFunction[A, B]): Vector[B] = toVector.collect(pf)
@@ -73,15 +72,15 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
def ++[AA >: A](other: Vector[AA]): NonEmptyVector[AA] = concat(other)
/**
- * Append this NEV to another NEV, producing a new `NonEmptyVector`.
- *
- * {{{
- * scala> import cats.data.NonEmptyVector
- * scala> val nev = NonEmptyVector.of(1, 2, 3)
- * scala> nev ++: NonEmptyVector.of(4, 5)
- * res0: cats.data.NonEmptyVector[Int] = NonEmptyVector(1, 2, 3, 4, 5)
- * }}}
- */
+ * Append this NEV to another NEV, producing a new `NonEmptyVector`.
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyVector
+ * scala> val nev = NonEmptyVector.of(1, 2, 3)
+ * scala> nev ++: NonEmptyVector.of(4, 5)
+ * res0: cats.data.NonEmptyVector[Int] = NonEmptyVector(1, 2, 3, 4, 5)
+ * }}}
+ */
def ++:[AA >: A](other: NonEmptyVector[AA]): NonEmptyVector[AA] = other.concatNev(this)
/**
@@ -100,8 +99,8 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
def append[AA >: A](a: AA): NonEmptyVector[AA] = new NonEmptyVector(toVector :+ a)
/**
- * Alias for [[append]]
- */
+ * Alias for [[append]]
+ */
def :+[AA >: A](a: AA): NonEmptyVector[AA] = append(a)
/**
@@ -110,8 +109,8 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
def prepend[AA >: A](a: AA): NonEmptyVector[AA] = new NonEmptyVector(a +: toVector)
/**
- * Alias for [[prepend]]
- */
+ * Alias for [[prepend]]
+ */
def +:[AA >: A](a: AA): NonEmptyVector[AA] = prepend(a)
/**
@@ -142,26 +141,26 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
Foldable[Vector].foldRight(toVector, lb)(f)
/**
- * Applies f to all the elements
- */
+ * Applies f to all the elements
+ */
def map[B](f: A => B): NonEmptyVector[B] =
new NonEmptyVector(toVector.map(f))
/**
- * Applies f to all elements and combines the result
- */
+ * Applies f to all elements and combines the result
+ */
def flatMap[B](f: A => NonEmptyVector[B]): NonEmptyVector[B] =
new NonEmptyVector(toVector.flatMap(a => f(a).toVector))
/**
- * Left-associative reduce using f.
- */
+ * Left-associative reduce using f.
+ */
def reduceLeft[AA >: A](f: (AA, AA) => AA): AA =
tail.foldLeft(head: AA)(f)
/**
- * Reduce using the Semigroup of A
- */
+ * Reduce using the Semigroup of A
+ */
def reduce[AA >: A](implicit S: Semigroup[AA]): AA =
S.combineAllOption(toVector).get
@@ -205,16 +204,16 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
}
/**
- * Zips this `NonEmptyVector` with another `NonEmptyVector` and applies a function for each pair of elements.
- *
- * {{{
- * scala> import cats.data.NonEmptyVector
- * scala> val as = NonEmptyVector.of(1, 2, 3)
- * scala> val bs = NonEmptyVector.of("A", "B", "C")
- * scala> as.zipWith(bs)(_ + _)
- * res0: cats.data.NonEmptyVector[String] = NonEmptyVector(1A, 2B, 3C)
- * }}}
- */
+ * Zips this `NonEmptyVector` with another `NonEmptyVector` and applies a function for each pair of elements.
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyVector
+ * scala> val as = NonEmptyVector.of(1, 2, 3)
+ * scala> val bs = NonEmptyVector.of("A", "B", "C")
+ * scala> as.zipWith(bs)(_ + _)
+ * res0: cats.data.NonEmptyVector[String] = NonEmptyVector(1A, 2B, 3C)
+ * }}}
+ */
def zipWith[B, C](b: NonEmptyVector[B])(f: (A, B) => C): NonEmptyVector[C] =
NonEmptyVector.fromVectorUnsafe((toVector, b.toVector).zipped.map(f))
@@ -231,15 +230,17 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) extends AnyVal
new NonEmptyVector(toVector.sorted(AA.toOrdering))
}
-private[data] sealed abstract class NonEmptyVectorInstances {
+sealed abstract private[data] class NonEmptyVectorInstances {
- implicit val catsDataInstancesForNonEmptyVector: SemigroupK[NonEmptyVector] with Reducible[NonEmptyVector]
- with Bimonad[NonEmptyVector] with NonEmptyTraverse[NonEmptyVector] =
+ implicit val catsDataInstancesForNonEmptyVector: SemigroupK[NonEmptyVector]
+ with Reducible[NonEmptyVector]
+ with Bimonad[NonEmptyVector]
+ with NonEmptyTraverse[NonEmptyVector] =
new NonEmptyReducible[NonEmptyVector, Vector] with SemigroupK[NonEmptyVector] with Bimonad[NonEmptyVector]
- with NonEmptyTraverse[NonEmptyVector] {
+ with NonEmptyTraverse[NonEmptyVector] {
def combineK[A](a: NonEmptyVector[A], b: NonEmptyVector[A]): NonEmptyVector[A] =
- a concatNev b
+ a.concatNev(b)
override def split[A](fa: NonEmptyVector[A]): (A, Vector[A]) = (fa.head, fa.tail)
@@ -252,34 +253,41 @@ private[data] sealed abstract class NonEmptyVectorInstances {
fa.reduce
override def map[A, B](fa: NonEmptyVector[A])(f: A => B): NonEmptyVector[B] =
- fa map f
+ fa.map(f)
def pure[A](x: A): NonEmptyVector[A] =
NonEmptyVector.one(x)
def flatMap[A, B](fa: NonEmptyVector[A])(f: A => NonEmptyVector[B]): NonEmptyVector[B] =
- fa flatMap f
+ fa.flatMap(f)
def coflatMap[A, B](fa: NonEmptyVector[A])(f: NonEmptyVector[A] => B): NonEmptyVector[B] = {
@tailrec def consume(as: Vector[A], buf: VectorBuilder[B]): Vector[B] =
as match {
case a +: as => consume(as, buf += f(NonEmptyVector(a, as)))
- case _ => buf.result()
+ case _ => buf.result()
}
NonEmptyVector(f(fa), consume(fa.tail, new VectorBuilder[B]))
}
def extract[A](fa: NonEmptyVector[A]): A = fa.head
- def nonEmptyTraverse[G[_], A, B](nel: NonEmptyVector[A])(f: A => G[B])(implicit G: Apply[G]): G[NonEmptyVector[B]] =
- Foldable[Vector].reduceRightToOption[A, G[Vector[B]]](nel.tail)(a => G.map(f(a))(_ +: Vector.empty)) { (a, lglb) =>
- G.map2Eval(f(a), lglb)(_ +: _)
- }.map {
- case None => G.map(f(nel.head))(NonEmptyVector(_, Vector.empty))
- case Some(gtail) => G.map2(f(nel.head), gtail)(NonEmptyVector(_, _))
- }.value
+ def nonEmptyTraverse[G[_], A, B](
+ nel: NonEmptyVector[A]
+ )(f: A => G[B])(implicit G: Apply[G]): G[NonEmptyVector[B]] =
+ Foldable[Vector]
+ .reduceRightToOption[A, G[Vector[B]]](nel.tail)(a => G.map(f(a))(_ +: Vector.empty)) { (a, lglb) =>
+ G.map2Eval(f(a), lglb)(_ +: _)
+ }
+ .map {
+ case None => G.map(f(nel.head))(NonEmptyVector(_, Vector.empty))
+ case Some(gtail) => G.map2(f(nel.head), gtail)(NonEmptyVector(_, _))
+ }
+ .value
- override def traverse[G[_], A, B](fa: NonEmptyVector[A])(f: (A) => G[B])(implicit G: Applicative[G]): G[NonEmptyVector[B]] =
+ override def traverse[G[_], A, B](
+ fa: NonEmptyVector[A]
+ )(f: (A) => G[B])(implicit G: Applicative[G]): G[NonEmptyVector[B]] =
G.map2Eval(f(fa.head), Always(Traverse[Vector].traverse(fa.tail)(f)))(NonEmptyVector(_, _)).value
override def zipWithIndex[A](fa: NonEmptyVector[A]): NonEmptyVector[(A, Int)] =
@@ -294,16 +302,21 @@ private[data] sealed abstract class NonEmptyVectorInstances {
override def foldMap[A, B](fa: NonEmptyVector[A])(f: A => B)(implicit B: Monoid[B]): B =
B.combineAll(fa.toVector.iterator.map(f))
- override def nonEmptyPartition[A, B, C](fa: NonEmptyVector[A])(f: (A) => Either[B, C]): Ior[NonEmptyList[B], NonEmptyList[C]] = {
+ override def nonEmptyPartition[A, B, C](
+ fa: NonEmptyVector[A]
+ )(f: (A) => Either[B, C]): Ior[NonEmptyList[B], NonEmptyList[C]] = {
import cats.syntax.either._
import cats.syntax.reducible._
- reduceLeftTo(fa)(a => f(a).bimap(NonEmptyVector.one, NonEmptyVector.one).toIor)((ior, a) => (f(a), ior) match {
- case (Right(c), Ior.Left(_)) => ior.putRight(NonEmptyVector.one(c))
- case (Right(c), _) => ior.map(_ :+ c)
- case (Left(b), Ior.Right(_)) => ior.putLeft(NonEmptyVector.one(b))
- case (Left(b), _) => ior.leftMap(_ :+ b)
- }).bimap(_.toNonEmptyList, _.toNonEmptyList)
+ reduceLeftTo(fa)(a => f(a).bimap(NonEmptyVector.one, NonEmptyVector.one).toIor)(
+ (ior, a) =>
+ (f(a), ior) match {
+ case (Right(c), Ior.Left(_)) => ior.putRight(NonEmptyVector.one(c))
+ case (Right(c), _) => ior.map(_ :+ c)
+ case (Left(b), Ior.Right(_)) => ior.putLeft(NonEmptyVector.one(b))
+ case (Left(b), _) => ior.leftMap(_ :+ b)
+ }
+ ).bimap(_.toNonEmptyList, _.toNonEmptyList)
}
@@ -313,14 +326,14 @@ private[data] sealed abstract class NonEmptyVectorInstances {
def tailRecM[A, B](a: A)(f: A => NonEmptyVector[Either[A, B]]): NonEmptyVector[B] = {
val buf = new VectorBuilder[B]
@tailrec def go(v: NonEmptyVector[Either[A, B]]): Unit = v.head match {
- case Right(b) =>
+ case Right(b) =>
buf += b
NonEmptyVector.fromVector(v.tail) match {
case Some(t) => go(t)
- case None => ()
+ case None => ()
}
case Left(a) => go(f(a).concat(v.tail))
- }
+ }
go(f(a))
NonEmptyVector.fromVectorUnsafe(buf.result())
}
@@ -344,7 +357,7 @@ private[data] sealed abstract class NonEmptyVectorInstances {
}
implicit def catsDataEqForNonEmptyVector[A](implicit A: Eq[A]): Eq[NonEmptyVector[A]] =
- new Eq[NonEmptyVector[A]]{
+ new Eq[NonEmptyVector[A]] {
def eqv(x: NonEmptyVector[A], y: NonEmptyVector[A]): Boolean = x === y
}
@@ -402,13 +415,13 @@ object NonEmptyVector extends NonEmptyVectorInstances with Serializable {
implicit val catsDataCommutativeApplyForZipNonEmptyVector: CommutativeApply[ZipNonEmptyVector] =
new CommutativeApply[ZipNonEmptyVector] {
def ap[A, B](ff: ZipNonEmptyVector[A => B])(fa: ZipNonEmptyVector[A]): ZipNonEmptyVector[B] =
- ZipNonEmptyVector(ff.value.zipWith(fa.value)(_ apply _))
+ ZipNonEmptyVector(ff.value.zipWith(fa.value)(_.apply(_)))
override def map[A, B](fa: ZipNonEmptyVector[A])(f: (A) => B): ZipNonEmptyVector[B] =
ZipNonEmptyVector(fa.value.map(f))
override def product[A, B](fa: ZipNonEmptyVector[A], fb: ZipNonEmptyVector[B]): ZipNonEmptyVector[(A, B)] =
- ZipNonEmptyVector(fa.value.zipWith(fb.value){ case (a, b) => (a, b) })
+ ZipNonEmptyVector(fa.value.zipWith(fb.value) { case (a, b) => (a, b) })
}
implicit def zipNevEq[A: Eq]: Eq[ZipNonEmptyVector[A]] = Eq.by(_.value)
diff --git a/core/src/main/scala/cats/data/OneAnd.scala b/core/src/main/scala/cats/data/OneAnd.scala
index 3d4454f989..466934a011 100644
--- a/core/src/main/scala/cats/data/OneAnd.scala
+++ b/core/src/main/scala/cats/data/OneAnd.scala
@@ -54,7 +54,6 @@ final case class OneAnd[F[_], A](head: A, tail: F[A]) {
def forall(p: A => Boolean)(implicit F: Foldable[F]): Boolean =
p(head) && F.forall(tail)(p)
-
def reduceLeft(f: (A, A) => A)(implicit F: Foldable[F]): A =
F.foldLeft(tail, head)(f)
@@ -104,11 +103,11 @@ final case class OneAnd[F[_], A](head: A, tail: F[A]) {
s"OneAnd(${A.show(head)}, ${FA.show(tail)})"
}
+sealed abstract private[data] class OneAndInstances extends OneAndLowPriority0 {
-private[data] sealed abstract class OneAndInstances extends OneAndLowPriority0 {
-
- implicit def catsDataParallelForOneAnd[A, M[_] : Alternative, F[_] : Alternative]
- (implicit P: Parallel[M, F]): Parallel[OneAnd[M, ?], OneAnd[F, ?]] =
+ implicit def catsDataParallelForOneAnd[A, M[_]: Alternative, F[_]: Alternative](
+ implicit P: Parallel[M, F]
+ ): Parallel[OneAnd[M, ?], OneAnd[F, ?]] =
new Parallel[OneAnd[M, ?], OneAnd[F, ?]] {
def monad: Monad[OneAnd[M, ?]] = catsDataMonadForOneAnd(P.monad, Alternative[M])
@@ -123,7 +122,7 @@ private[data] sealed abstract class OneAndInstances extends OneAndLowPriority0 {
}
implicit def catsDataEqForOneAnd[A, F[_]](implicit A: Eq[A], FA: Eq[F[A]]): Eq[OneAnd[F, A]] =
- new Eq[OneAnd[F, A]]{
+ new Eq[OneAnd[F, A]] {
def eqv(x: OneAnd[F, A], y: OneAnd[F, A]): Boolean = x === y
}
@@ -133,14 +132,14 @@ private[data] sealed abstract class OneAndInstances extends OneAndLowPriority0 {
implicit def catsDataSemigroupKForOneAnd[F[_]: Alternative]: SemigroupK[OneAnd[F, ?]] =
new SemigroupK[OneAnd[F, ?]] {
def combineK[A](a: OneAnd[F, A], b: OneAnd[F, A]): OneAnd[F, A] =
- a combine b
+ a.combine(b)
}
implicit def catsDataSemigroupForOneAnd[F[_]: Alternative, A]: Semigroup[OneAnd[F, A]] =
catsDataSemigroupKForOneAnd[F].algebra
-
- implicit def catsDataMonadForOneAnd[F[_]](implicit monad: Monad[F], alternative: Alternative[F]): Monad[OneAnd[F, ?]] =
+ implicit def catsDataMonadForOneAnd[F[_]](implicit monad: Monad[F],
+ alternative: Alternative[F]): Monad[OneAnd[F, ?]] =
new Monad[OneAnd[F, ?]] {
override def map[A, B](fa: OneAnd[F, A])(f: A => B): OneAnd[F, B] =
fa.map(f)(monad)
@@ -170,8 +169,8 @@ private[data] sealed abstract class OneAndInstances extends OneAndLowPriority0 {
// This could probably be in SemigroupK to perform well
@tailrec
def combineAll(items: List[F[B]]): F[B] = items match {
- case Nil => alternative.empty
- case h :: Nil => h
+ case Nil => alternative.empty
+ case h :: Nil => h
case h1 :: h2 :: tail => combineAll(alternative.combineK(h1, h2) :: tail)
}
@@ -191,7 +190,7 @@ private[data] sealed abstract class OneAndInstances extends OneAndLowPriority0 {
}
}
-private[data] sealed abstract class OneAndLowPriority4 {
+sealed abstract private[data] class OneAndLowPriority4 {
implicit val catsDataComonadForNonEmptyStream: Comonad[OneAnd[Stream, ?]] =
new Comonad[OneAnd[Stream, ?]] {
def coflatMap[A, B](fa: OneAnd[Stream, A])(f: OneAnd[Stream, A] => B): OneAnd[Stream, B] = {
@@ -208,21 +207,21 @@ private[data] sealed abstract class OneAndLowPriority4 {
fa.head
def map[A, B](fa: OneAnd[Stream, A])(f: A => B): OneAnd[Stream, B] =
- fa map f
+ fa.map(f)
}
}
-private[data] sealed abstract class OneAndLowPriority3 extends OneAndLowPriority4 {
+sealed abstract private[data] class OneAndLowPriority3 extends OneAndLowPriority4 {
implicit def catsDataFunctorForOneAnd[F[_]](implicit F: Functor[F]): Functor[OneAnd[F, ?]] =
new Functor[OneAnd[F, ?]] {
def map[A, B](fa: OneAnd[F, A])(f: A => B): OneAnd[F, B] =
- fa map f
+ fa.map(f)
}
}
-private[data] sealed abstract class OneAndLowPriority2 extends OneAndLowPriority3 {
+sealed abstract private[data] class OneAndLowPriority2 extends OneAndLowPriority3 {
implicit def catsDataApplicativeForOneAnd[F[_]](implicit F: Alternative[F]): Applicative[OneAnd[F, ?]] =
new Applicative[OneAnd[F, ?]] {
@@ -242,25 +241,22 @@ private[data] sealed abstract class OneAndLowPriority2 extends OneAndLowPriority
}
-private[data] sealed abstract class OneAndLowPriority1 extends OneAndLowPriority2 {
+sealed abstract private[data] class OneAndLowPriority1 extends OneAndLowPriority2 {
implicit def catsDataTraverseForOneAnd[F[_]](implicit F: Traverse[F]): Traverse[OneAnd[F, ?]] =
new Traverse[OneAnd[F, ?]] {
- def traverse[G[_], A, B](fa: OneAnd[F, A])(f: (A) => G[B])(implicit G: Applicative[G]): G[OneAnd[F, B]] = {
+ def traverse[G[_], A, B](fa: OneAnd[F, A])(f: (A) => G[B])(implicit G: Applicative[G]): G[OneAnd[F, B]] =
G.map2Eval(f(fa.head), Always(F.traverse(fa.tail)(f)))(OneAnd(_, _)).value
- }
- def foldLeft[A, B](fa: OneAnd[F, A], b: B)(f: (B, A) => B): B = {
+ def foldLeft[A, B](fa: OneAnd[F, A], b: B)(f: (B, A) => B): B =
fa.foldLeft(b)(f)
- }
- def foldRight[A, B](fa: OneAnd[F, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] = {
+ def foldRight[A, B](fa: OneAnd[F, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
fa.foldRight(lb)(f)
- }
}
}
-private[data] sealed abstract class OneAndLowPriority0_5 extends OneAndLowPriority1 {
+sealed abstract private[data] class OneAndLowPriority0_5 extends OneAndLowPriority1 {
implicit def catsDataReducibleForOneAnd[F[_]](implicit F: Foldable[F]): Reducible[OneAnd[F, ?]] =
new NonEmptyReducible[OneAnd[F, ?], F] {
override def split[A](fa: OneAnd[F, A]): (A, F[A]) = (fa.head, fa.tail)
@@ -272,8 +268,9 @@ private[data] sealed abstract class OneAndLowPriority0_5 extends OneAndLowPriori
}
}
-private[data] sealed abstract class OneAndLowPriority0 extends OneAndLowPriority0_5 {
- implicit def catsDataNonEmptyTraverseForOneAnd[F[_]](implicit F: Traverse[F], F2: Alternative[F]): NonEmptyTraverse[OneAnd[F, ?]] =
+sealed abstract private[data] class OneAndLowPriority0 extends OneAndLowPriority0_5 {
+ implicit def catsDataNonEmptyTraverseForOneAnd[F[_]](implicit F: Traverse[F],
+ F2: Alternative[F]): NonEmptyTraverse[OneAnd[F, ?]] =
new NonEmptyReducible[OneAnd[F, ?], F] with NonEmptyTraverse[OneAnd[F, ?]] {
def nonEmptyTraverse[G[_], A, B](fa: OneAnd[F, A])(f: (A) => G[B])(implicit G: Apply[G]): G[OneAnd[F, B]] = {
import cats.syntax.apply._
@@ -282,10 +279,8 @@ private[data] sealed abstract class OneAndLowPriority0 extends OneAndLowPriority
.reduceLeft(((acc, a) => (acc, a).mapN((x: OneAnd[F, B], y: OneAnd[F, B]) => x.combine(y))))
}
-
- override def traverse[G[_], A, B](fa: OneAnd[F, A])(f: (A) => G[B])(implicit G: Applicative[G]): G[OneAnd[F, B]] = {
+ override def traverse[G[_], A, B](fa: OneAnd[F, A])(f: (A) => G[B])(implicit G: Applicative[G]): G[OneAnd[F, B]] =
G.map2Eval(f(fa.head), Always(F.traverse(fa.tail)(f)))(OneAnd(_, _)).value
- }
def split[A](fa: OneAnd[F, A]): (A, F[A]) = (fa.head, fa.tail)
}
diff --git a/core/src/main/scala/cats/data/Op.scala b/core/src/main/scala/cats/data/Op.scala
index e93d3be648..39a4bf234f 100644
--- a/core/src/main/scala/cats/data/Op.scala
+++ b/core/src/main/scala/cats/data/Op.scala
@@ -16,7 +16,7 @@ final case class Op[Arr[_, _], A, B](run: Arr[B, A]) {
object Op extends OpInstances
-private[data] sealed abstract class OpInstances extends OpInstances0 {
+sealed abstract private[data] class OpInstances extends OpInstances0 {
implicit def catsDataCategoryForOp[Arr[_, _]](implicit ArrC: Category[Arr]): Category[Op[Arr, ?, ?]] =
new OpCategory[Arr] { def Arr: Category[Arr] = ArrC }
@@ -24,7 +24,7 @@ private[data] sealed abstract class OpInstances extends OpInstances0 {
new OpEq[Arr, A, B] { def Arr: Eq[Arr[B, A]] = ArrEq }
}
-private[data] sealed abstract class OpInstances0 {
+sealed abstract private[data] class OpInstances0 {
implicit def catsDataComposeForOp[Arr[_, _]](implicit ArrC: Compose[Arr]): Compose[Op[Arr, ?, ?]] =
new OpCompose[Arr] { def Arr: Compose[Arr] = ArrC }
}
diff --git a/core/src/main/scala/cats/data/OptionT.scala b/core/src/main/scala/cats/data/OptionT.scala
index ff57f9c3b0..1b5b19c84d 100644
--- a/core/src/main/scala/cats/data/OptionT.scala
+++ b/core/src/main/scala/cats/data/OptionT.scala
@@ -30,12 +30,12 @@ final case class OptionT[F[_], A](value: F[Option[A]]) {
def imap[B](f: A => B)(g: B => A)(implicit F: Invariant[F]): OptionT[F, B] =
OptionT {
- F.imap(value)(_ map f)(_ map g)
+ F.imap(value)(_.map(f))(_.map(g))
}
def contramap[B](f: B => A)(implicit F: Contravariant[F]): OptionT[F, B] =
OptionT {
- F.contramap(value)(_ map f)
+ F.contramap(value)(_.map(f))
}
/**
@@ -98,11 +98,10 @@ final case class OptionT[F[_], A](value: F[Option[A]]) {
orElseF(default.value)
def orElseF(default: => F[Option[A]])(implicit F: Monad[F]): OptionT[F, A] =
- OptionT(
- F.flatMap(value) {
- case s @ Some(_) => F.pure(s)
- case None => default
- })
+ OptionT(F.flatMap(value) {
+ case s @ Some(_) => F.pure(s)
+ case None => default
+ })
def toRight[L](left: => L)(implicit F: Functor[F]): EitherT[F, L, A] =
EitherT(cata(Left(left), Right.apply))
@@ -157,7 +156,7 @@ object OptionT extends OptionTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class PurePartiallyApplied[F[_]](val dummy: Boolean = true ) extends AnyVal {
+ final private[data] class PurePartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[A](value: A)(implicit F: Applicative[F]): OptionT[F, A] =
OptionT(F.pure(Some(value)))
}
@@ -184,7 +183,7 @@ object OptionT extends OptionTInstances {
*/
def some[F[_]]: PurePartiallyApplied[F] = pure
- def none[F[_], A](implicit F: Applicative[F]) : OptionT[F, A] =
+ def none[F[_], A](implicit F: Applicative[F]): OptionT[F, A] =
OptionT(F.pure(None))
/**
@@ -202,7 +201,7 @@ object OptionT extends OptionTInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class FromOptionPartiallyApplied[F[_]](val dummy: Boolean = true ) extends AnyVal {
+ final private[data] class FromOptionPartiallyApplied[F[_]](val dummy: Boolean = true) extends AnyVal {
def apply[A](value: Option[A])(implicit F: Applicative[F]): OptionT[F, A] =
OptionT(F.pure(value))
}
@@ -226,7 +225,7 @@ object OptionT extends OptionTInstances {
λ[F ~> OptionT[F, ?]](OptionT.liftF(_))
}
-private[data] sealed abstract class OptionTInstances extends OptionTInstances0 {
+sealed abstract private[data] class OptionTInstances extends OptionTInstances0 {
// to maintain binary compatibility
def catsDataMonadForOptionT[F[_]](implicit F0: Monad[F]): Monad[OptionT[F, ?]] =
new OptionTMonad[F] { implicit val F = F0 }
@@ -255,26 +254,28 @@ private[data] sealed abstract class OptionTInstances extends OptionTInstances0 {
val traverse: Traverse[OptionT[F, ?]] = OptionT.catsDataTraverseForOptionT[F]
- def traverseFilter[G[_], A, B](fa: OptionT[F, A])
- (f: A => G[Option[B]])
- (implicit G: Applicative[G]): G[OptionT[F, B]] =
- G.map(Traverse[F].traverse[G, Option[A], Option[B]](fa.value) {
- oa => TraverseFilter[Option].traverseFilter(oa)(f)
- })(OptionT[F, B])
+ def traverseFilter[G[_], A, B](
+ fa: OptionT[F, A]
+ )(f: A => G[Option[B]])(implicit G: Applicative[G]): G[OptionT[F, B]] =
+ G.map(Traverse[F].traverse[G, Option[A], Option[B]](fa.value) { oa =>
+ TraverseFilter[Option].traverseFilter(oa)(f)
+ })(OptionT[F, B])
- override def filterA[G[_], A](fa: OptionT[F, A])
- (f: A => G[Boolean])
- (implicit G: Applicative[G]): G[OptionT[F, A]] =
- G.map(Traverse[F].traverse(fa.value)(TraverseFilter[Option].filterA[G, A](_)(f)))(OptionT[F, A])
+ override def filterA[G[_], A](
+ fa: OptionT[F, A]
+ )(f: A => G[Boolean])(implicit G: Applicative[G]): G[OptionT[F, A]] =
+ G.map(Traverse[F].traverse(fa.value)(TraverseFilter[Option].filterA[G, A](_)(f)))(OptionT[F, A])
}
}
-private[data] sealed abstract class OptionTInstances0 extends OptionTInstances1 {
+sealed abstract private[data] class OptionTInstances0 extends OptionTInstances1 {
implicit def catsDataMonadErrorMonadForOptionT[F[_]](implicit F0: Monad[F]): MonadError[OptionT[F, ?], Unit] =
new OptionTMonadErrorMonad[F] { implicit val F = F0 }
- implicit def catsDataContravariantMonoidalForOptionT[F[_]](implicit F0: ContravariantMonoidal[F]): ContravariantMonoidal[OptionT[F, ?]] =
+ implicit def catsDataContravariantMonoidalForOptionT[F[_]](
+ implicit F0: ContravariantMonoidal[F]
+ ): ContravariantMonoidal[OptionT[F, ?]] =
new OptionTContravariantMonoidal[F] { implicit val F = F0 }
implicit def catsDataMonoidKForOptionT[F[_]](implicit F0: Monad[F]): MonoidK[OptionT[F, ?]] =
@@ -283,7 +284,9 @@ private[data] sealed abstract class OptionTInstances0 extends OptionTInstances1
implicit def catsDataSemigroupForOptionT[F[_], A](implicit F0: Semigroup[F[Option[A]]]): Semigroup[OptionT[F, A]] =
new OptionTSemigroup[F, A] { implicit val F = F0 }
- implicit def catsDataPartialOrderForOptionT[F[_], A](implicit F0: PartialOrder[F[Option[A]]]): PartialOrder[OptionT[F, A]] =
+ implicit def catsDataPartialOrderForOptionT[F[_], A](
+ implicit F0: PartialOrder[F[Option[A]]]
+ ): PartialOrder[OptionT[F, A]] =
new OptionTPartialOrder[F, A] { implicit val F = F0 }
implicit def catsDateFunctorFilterForOptionT[F[_]](implicit F0: Functor[F]): FunctorFilter[OptionT[F, ?]] =
@@ -293,7 +296,7 @@ private[data] sealed abstract class OptionTInstances0 extends OptionTInstances1
new OptionTContravariant[F] { implicit val F = F0 }
}
-private[data] sealed abstract class OptionTInstances1 extends OptionTInstances2 {
+sealed abstract private[data] class OptionTInstances1 extends OptionTInstances2 {
implicit def catsDataSemigroupKForOptionT[F[_]](implicit F0: Monad[F]): SemigroupK[OptionT[F, ?]] =
new OptionTSemigroupK[F] { implicit val F = F0 }
@@ -304,7 +307,7 @@ private[data] sealed abstract class OptionTInstances1 extends OptionTInstances2
new OptionTMonadError[F, E] { implicit val F = F0 }
}
-private[data] sealed abstract class OptionTInstances2 extends OptionTInstances3 {
+sealed abstract private[data] class OptionTInstances2 extends OptionTInstances3 {
implicit def catsDataFoldableForOptionT[F[_]](implicit F0: Foldable[F]): Foldable[OptionT[F, ?]] =
new OptionTFoldable[F] { implicit val F = F0 }
@@ -312,7 +315,7 @@ private[data] sealed abstract class OptionTInstances2 extends OptionTInstances3
new OptionTInvariant[F] { implicit val F = F0 }
}
-private[data] sealed abstract class OptionTInstances3 {
+sealed abstract private[data] class OptionTInstances3 {
implicit def catsDataFunctorForOptionT[F[_]](implicit F0: Functor[F]): Functor[OptionT[F, ?]] =
new OptionTFunctor[F] { implicit val F = F0 }
}
@@ -323,18 +326,18 @@ private[data] trait OptionTFunctor[F[_]] extends Functor[OptionT[F, ?]] {
override def map[A, B](fa: OptionT[F, A])(f: A => B): OptionT[F, B] = fa.map(f)
}
-private[data] sealed trait OptionTInvariant[F[_]] extends Invariant[OptionT[F, ?]] {
+sealed private[data] trait OptionTInvariant[F[_]] extends Invariant[OptionT[F, ?]] {
implicit def F: Invariant[F]
override def imap[A, B](fa: OptionT[F, A])(f: A => B)(g: B => A): OptionT[F, B] =
fa.imap(f)(g)
}
-private[data] sealed trait OptionTContravariant[F[_]] extends Contravariant[OptionT[F, ?]] {
+sealed private[data] trait OptionTContravariant[F[_]] extends Contravariant[OptionT[F, ?]] {
implicit def F: Contravariant[F]
override def contramap[A, B](fa: OptionT[F, A])(f: B => A): OptionT[F, B] =
- fa contramap f
+ fa.contramap(f)
}
private[data] trait OptionTMonad[F[_]] extends Monad[OptionT[F, ?]] {
@@ -347,9 +350,14 @@ private[data] trait OptionTMonad[F[_]] extends Monad[OptionT[F, ?]] {
override def map[A, B](fa: OptionT[F, A])(f: A => B): OptionT[F, B] = fa.map(f)
def tailRecM[A, B](a: A)(f: A => OptionT[F, Either[A, B]]): OptionT[F, B] =
- OptionT(F.tailRecM(a)(a0 => F.map(f(a0).value)(
- _.fold(Either.right[A, Option[B]](None))(_.map(b => Some(b): Option[B]))
- )))
+ OptionT(
+ F.tailRecM(a)(
+ a0 =>
+ F.map(f(a0).value)(
+ _.fold(Either.right[A, Option[B]](None))(_.map(b => Some(b): Option[B]))
+ )
+ )
+ )
}
private[data] trait OptionTMonadErrorMonad[F[_]] extends MonadError[OptionT[F, ?], Unit] with OptionTMonad[F] {
@@ -360,7 +368,7 @@ private[data] trait OptionTMonadErrorMonad[F[_]] extends MonadError[OptionT[F, ?
override def handleErrorWith[A](fa: OptionT[F, A])(f: Unit => OptionT[F, A]): OptionT[F, A] =
OptionT(F.flatMap(fa.value) {
case s @ Some(_) => F.pure(s)
- case None => f(()).value
+ case None => f(()).value
})
}
@@ -380,15 +388,18 @@ private trait OptionTContravariantMonoidal[F[_]] extends ContravariantMonoidal[O
override def unit: OptionT[F, Unit] = OptionT(F.trivial)
override def contramap[A, B](fa: OptionT[F, A])(f: B => A): OptionT[F, B] =
- OptionT(F.contramap(fa.value)(_ map f))
+ OptionT(F.contramap(fa.value)(_.map(f)))
override def product[A, B](fa: OptionT[F, A], fb: OptionT[F, B]): OptionT[F, (A, B)] =
- OptionT(F.contramap(F.product(fa.value, fb.value))(
- (t: Option[(A, B)]) => t match {
- case Some((x, y)) => (Some(x), Some(y))
- case None => (None, None)
+ OptionT(
+ F.contramap(F.product(fa.value, fb.value))(
+ (t: Option[(A, B)]) =>
+ t match {
+ case Some((x, y)) => (Some(x), Some(y))
+ case None => (None, None)
}
- ))
+ )
+ )
}
private[data] trait OptionTFoldable[F[_]] extends Foldable[OptionT[F, ?]] {
@@ -401,11 +412,11 @@ private[data] trait OptionTFoldable[F[_]] extends Foldable[OptionT[F, ?]] {
fa.foldRight(lb)(f)
}
-private[data] sealed trait OptionTTraverse[F[_]] extends Traverse[OptionT[F, ?]] with OptionTFoldable[F] {
+sealed private[data] trait OptionTTraverse[F[_]] extends Traverse[OptionT[F, ?]] with OptionTFoldable[F] {
implicit def F: Traverse[F]
def traverse[G[_]: Applicative, A, B](fa: OptionT[F, A])(f: A => G[B]): G[OptionT[F, B]] =
- fa traverse f
+ fa.traverse(f)
}
private[data] trait OptionTSemigroup[F[_], A] extends Semigroup[OptionT[F, A]] {
@@ -424,26 +435,26 @@ private[data] trait OptionTMonoid[F[_], A] extends Monoid[OptionT[F, A]] with Op
private[data] trait OptionTSemigroupK[F[_]] extends SemigroupK[OptionT[F, ?]] {
implicit def F: Monad[F]
- def combineK[A](x: OptionT[F, A], y: OptionT[F, A]): OptionT[F, A] = x orElse y
+ def combineK[A](x: OptionT[F, A], y: OptionT[F, A]): OptionT[F, A] = x.orElse(y)
}
private[data] trait OptionTMonoidK[F[_]] extends MonoidK[OptionT[F, ?]] with OptionTSemigroupK[F] {
def empty[A]: OptionT[F, A] = OptionT.none[F, A]
}
-private[data] sealed trait OptionTEq[F[_], A] extends Eq[OptionT[F, A]] {
+sealed private[data] trait OptionTEq[F[_], A] extends Eq[OptionT[F, A]] {
implicit def F: Eq[F[Option[A]]]
override def eqv(x: OptionT[F, A], y: OptionT[F, A]): Boolean = x === y
}
-private[data] sealed trait OptionTPartialOrder[F[_], A] extends PartialOrder[OptionT[F, A]] with OptionTEq[F, A]{
- override implicit def F: PartialOrder[F[Option[A]]]
+sealed private[data] trait OptionTPartialOrder[F[_], A] extends PartialOrder[OptionT[F, A]] with OptionTEq[F, A] {
+ implicit override def F: PartialOrder[F[Option[A]]]
- override def partialCompare(x: OptionT[F, A], y: OptionT[F, A]): Double = x partialCompare y
+ override def partialCompare(x: OptionT[F, A], y: OptionT[F, A]): Double = x.partialCompare(y)
}
-private[data] sealed trait OptionTFunctorFilter[F[_]] extends FunctorFilter[OptionT[F, ?]] {
+sealed private[data] trait OptionTFunctorFilter[F[_]] extends FunctorFilter[OptionT[F, ?]] {
implicit def F: Functor[F]
def functor: Functor[OptionT[F, ?]] = OptionT.catsDataFunctorForOptionT[F]
@@ -457,8 +468,8 @@ private[data] sealed trait OptionTFunctorFilter[F[_]] extends FunctorFilter[Opti
override def filter[A](fa: OptionT[F, A])(f: (A) => Boolean): OptionT[F, A] = fa.filter(f)
}
-private[data] sealed trait OptionTOrder[F[_], A] extends Order[OptionT[F, A]] with OptionTPartialOrder[F, A]{
- override implicit def F: Order[F[Option[A]]]
+sealed private[data] trait OptionTOrder[F[_], A] extends Order[OptionT[F, A]] with OptionTPartialOrder[F, A] {
+ implicit override def F: Order[F[Option[A]]]
- override def compare(x: OptionT[F, A], y: OptionT[F, A]): Int = x compare y
+ override def compare(x: OptionT[F, A], y: OptionT[F, A]): Int = x.compare(y)
}
diff --git a/core/src/main/scala/cats/data/RepresentableStore.scala b/core/src/main/scala/cats/data/RepresentableStore.scala
index 4a0349e221..dae140fe1f 100644
--- a/core/src/main/scala/cats/data/RepresentableStore.scala
+++ b/core/src/main/scala/cats/data/RepresentableStore.scala
@@ -7,6 +7,7 @@ import cats.{Comonad, Functor, Representable}
* `Store` is the dual of `State`
*/
final case class RepresentableStore[F[_], S, A](fa: F[A], index: S)(implicit R: Representable.Aux[F, S]) {
+
/**
* Inspect the value at "index" s
*/
@@ -23,9 +24,8 @@ final case class RepresentableStore[F[_], S, A](fa: F[A], index: S)(implicit R:
lazy val coflatten: RepresentableStore[F, S, RepresentableStore[F, S, A]] =
RepresentableStore(R.tabulate(idx => RepresentableStore(fa, idx)), index)
- def map[B](f: A => B): RepresentableStore[F, S, B] = {
+ def map[B](f: A => B): RepresentableStore[F, S, B] =
RepresentableStore(R.F.map(fa)(f), index)
- }
/**
* Given a functorial computation on the index `S` peek at the value in that functor.
@@ -40,19 +40,22 @@ final case class RepresentableStore[F[_], S, A](fa: F[A], index: S)(implicit R:
* require(adjacent == List("", "a", "b"))
* }}}
*/
- def experiment[G[_]](fn: S => G[S])(implicit G: Functor[G]): G[A] = {
+ def experiment[G[_]](fn: S => G[S])(implicit G: Functor[G]): G[A] =
G.map(fn(index))(peek)
- }
}
object RepresentableStore {
- implicit def catsDataRepresentableStoreComonad[F[_], S](implicit R: Representable[F]): Comonad[RepresentableStore[F, S, ?]] =
+ implicit def catsDataRepresentableStoreComonad[F[_], S](
+ implicit R: Representable[F]
+ ): Comonad[RepresentableStore[F, S, ?]] =
new Comonad[RepresentableStore[F, S, ?]] {
override def extract[B](x: RepresentableStore[F, S, B]): B =
x.extract
- override def coflatMap[A, B](fa: RepresentableStore[F, S, A])(f: RepresentableStore[F, S, A] => B): RepresentableStore[F, S, B] =
+ override def coflatMap[A, B](
+ fa: RepresentableStore[F, S, A]
+ )(f: RepresentableStore[F, S, A] => B): RepresentableStore[F, S, B] =
fa.coflatten.map(f)
override def map[A, B](fa: RepresentableStore[F, S, A])(f: A => B): RepresentableStore[F, S, B] =
diff --git a/core/src/main/scala/cats/data/Tuple2K.scala b/core/src/main/scala/cats/data/Tuple2K.scala
index 18aa1ca282..adbc79bbaf 100644
--- a/core/src/main/scala/cats/data/Tuple2K.scala
+++ b/core/src/main/scala/cats/data/Tuple2K.scala
@@ -21,16 +21,22 @@ final case class Tuple2K[F[_], G[_], A](first: F[A], second: G[A]) {
object Tuple2K extends Tuple2KInstances
-private[data] sealed abstract class Tuple2KInstances extends Tuple2KInstances0 {
- implicit def catsDataOrderForTuple2K[F[_], G[_], A](implicit FF: Order[F[A]], GF: Order[G[A]]): Order[Tuple2K[F, G, A]] = new Tuple2KOrder[F, G, A] {
- def F: Order[F[A]] = FF
- def G: Order[G[A]] = GF
- }
- implicit def catsDataShowForTuple2K[F[_], G[_], A](implicit FF: Show[F[A]], GF: Show[G[A]]): Show[Tuple2K[F, G, A]] = new Tuple2KShow[F, G, A] {
- def F: Show[F[A]] = FF
- def G: Show[G[A]] = GF
- }
- implicit def catsDataContravariantMonoidalForTuple2k[F[_], G[_]](implicit FD: ContravariantMonoidal[F], GD: ContravariantMonoidal[G]): ContravariantMonoidal[λ[α => Tuple2K[F, G, α]]] =
+sealed abstract private[data] class Tuple2KInstances extends Tuple2KInstances0 {
+ implicit def catsDataOrderForTuple2K[F[_], G[_], A](implicit FF: Order[F[A]],
+ GF: Order[G[A]]): Order[Tuple2K[F, G, A]] =
+ new Tuple2KOrder[F, G, A] {
+ def F: Order[F[A]] = FF
+ def G: Order[G[A]] = GF
+ }
+ implicit def catsDataShowForTuple2K[F[_], G[_], A](implicit FF: Show[F[A]], GF: Show[G[A]]): Show[Tuple2K[F, G, A]] =
+ new Tuple2KShow[F, G, A] {
+ def F: Show[F[A]] = FF
+ def G: Show[G[A]] = GF
+ }
+ implicit def catsDataContravariantMonoidalForTuple2k[F[_], G[_]](
+ implicit FD: ContravariantMonoidal[F],
+ GD: ContravariantMonoidal[G]
+ ): ContravariantMonoidal[λ[α => Tuple2K[F, G, α]]] =
new Tuple2KContravariantMonoidal[F, G] with Tuple2KContravariant[F, G] {
def F: ContravariantMonoidal[F] = FD
def G: ContravariantMonoidal[G] = GD
@@ -47,120 +53,152 @@ private[data] sealed abstract class Tuple2KInstances extends Tuple2KInstances0 {
}
}
-private[data] sealed abstract class Tuple2KInstances0 extends Tuple2KInstances1 {
- implicit def catsDataTraverseForTuple2K[F[_], G[_]](implicit FF: Traverse[F], GF: Traverse[G]): Traverse[λ[α => Tuple2K[F, G, α]]] =
+sealed abstract private[data] class Tuple2KInstances0 extends Tuple2KInstances1 {
+ implicit def catsDataTraverseForTuple2K[F[_], G[_]](implicit FF: Traverse[F],
+ GF: Traverse[G]): Traverse[λ[α => Tuple2K[F, G, α]]] =
new Tuple2KTraverse[F, G] with Tuple2KFunctor[F, G] {
def F: Traverse[F] = FF
def G: Traverse[G] = GF
}
- implicit def catsDataContravariantForTuple2K[F[_], G[_]](implicit FC: Contravariant[F], GC: Contravariant[G]): Contravariant[λ[α => Tuple2K[F, G, α]]] = new Tuple2KContravariant[F, G] {
+ implicit def catsDataContravariantForTuple2K[F[_], G[_]](
+ implicit FC: Contravariant[F],
+ GC: Contravariant[G]
+ ): Contravariant[λ[α => Tuple2K[F, G, α]]] = new Tuple2KContravariant[F, G] {
def F: Contravariant[F] = FC
def G: Contravariant[G] = GC
}
- implicit def catsDataEqForTuple2K[F[_], G[_], A](implicit FF: Eq[F[A]], GG: Eq[G[A]]): Eq[Tuple2K[F, G, A]] = new Eq[Tuple2K[F, G, A]] {
- def eqv(x: Tuple2K[F, G, A], y: Tuple2K[F, G, A]): Boolean =
- FF.eqv(x.first, y.first) && GG.eqv(x.second, y.second)
- }
+ implicit def catsDataEqForTuple2K[F[_], G[_], A](implicit FF: Eq[F[A]], GG: Eq[G[A]]): Eq[Tuple2K[F, G, A]] =
+ new Eq[Tuple2K[F, G, A]] {
+ def eqv(x: Tuple2K[F, G, A], y: Tuple2K[F, G, A]): Boolean =
+ FF.eqv(x.first, y.first) && GG.eqv(x.second, y.second)
+ }
}
-private[data] sealed abstract class Tuple2KInstances1 extends Tuple2KInstances2 {
- implicit def catsDataAlternativeForTuple2K[F[_], G[_]](implicit FF: Alternative[F], GG: Alternative[G]): Alternative[λ[α => Tuple2K[F, G, α]]] = new Tuple2KAlternative[F, G] {
- def F: Alternative[F] = FF
- def G: Alternative[G] = GG
- }
- implicit def catsDataFoldableForTuple2K[F[_], G[_]](implicit FF: Foldable[F], GF: Foldable[G]): Foldable[λ[α => Tuple2K[F, G, α]]] = new Tuple2KFoldable[F, G] {
- def F: Foldable[F] = FF
- def G: Foldable[G] = GF
- }
+sealed abstract private[data] class Tuple2KInstances1 extends Tuple2KInstances2 {
+ implicit def catsDataAlternativeForTuple2K[F[_], G[_]](implicit FF: Alternative[F],
+ GG: Alternative[G]): Alternative[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KAlternative[F, G] {
+ def F: Alternative[F] = FF
+ def G: Alternative[G] = GG
+ }
+ implicit def catsDataFoldableForTuple2K[F[_], G[_]](implicit FF: Foldable[F],
+ GF: Foldable[G]): Foldable[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KFoldable[F, G] {
+ def F: Foldable[F] = FF
+ def G: Foldable[G] = GF
+ }
}
-private[data] sealed abstract class Tuple2KInstances2 extends Tuple2KInstances3 {
- implicit def catsDataMonadForTuple2K[F[_], G[_]](implicit FM: Monad[F], GM: Monad[G]): Monad[λ[α => Tuple2K[F, G, α]]] = new Tuple2KMonad[F, G] {
- def F: Monad[F] = FM
- def G: Monad[G] = GM
- }
- implicit def catsDataMonoidKForTuple2K[F[_], G[_]](implicit FF: MonoidK[F], GG: MonoidK[G]): MonoidK[λ[α => Tuple2K[F, G, α]]] = new Tuple2KMonoidK[F, G] {
- def F: MonoidK[F] = FF
- def G: MonoidK[G] = GG
- }
+sealed abstract private[data] class Tuple2KInstances2 extends Tuple2KInstances3 {
+ implicit def catsDataMonadForTuple2K[F[_], G[_]](implicit FM: Monad[F],
+ GM: Monad[G]): Monad[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KMonad[F, G] {
+ def F: Monad[F] = FM
+ def G: Monad[G] = GM
+ }
+ implicit def catsDataMonoidKForTuple2K[F[_], G[_]](implicit FF: MonoidK[F],
+ GG: MonoidK[G]): MonoidK[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KMonoidK[F, G] {
+ def F: MonoidK[F] = FF
+ def G: MonoidK[G] = GG
+ }
}
-private[data] sealed abstract class Tuple2KInstances3 extends Tuple2KInstances4 {
- implicit def catsDataCommutativeApplicativeForTuple2K[F[_], G[_]](implicit FF: CommutativeApplicative[F], GG: CommutativeApplicative[G]): CommutativeApplicative[λ[α => Tuple2K[F, G, α]]] =
+sealed abstract private[data] class Tuple2KInstances3 extends Tuple2KInstances4 {
+ implicit def catsDataCommutativeApplicativeForTuple2K[F[_], G[_]](
+ implicit FF: CommutativeApplicative[F],
+ GG: CommutativeApplicative[G]
+ ): CommutativeApplicative[λ[α => Tuple2K[F, G, α]]] =
new Tuple2KApplicative[F, G] with CommutativeApplicative[λ[α => Tuple2K[F, G, α]]] {
def F: Applicative[F] = FF
def G: Applicative[G] = GG
}
}
-private[data] sealed abstract class Tuple2KInstances4 extends Tuple2KInstances5 {
- implicit def catsDataSemigroupKForTuple2K[F[_], G[_]](implicit FF: SemigroupK[F], GG: SemigroupK[G]): SemigroupK[λ[α => Tuple2K[F, G, α]]] = new Tuple2KSemigroupK[F, G] {
- def F: SemigroupK[F] = FF
- def G: SemigroupK[G] = GG
- }
- implicit def catsDataCommutativeApplyForTuple2K[F[_], G[_]](implicit FF: CommutativeApply[F], GG: CommutativeApply[G]): CommutativeApply[λ[α => Tuple2K[F, G, α]]] =
+sealed abstract private[data] class Tuple2KInstances4 extends Tuple2KInstances5 {
+ implicit def catsDataSemigroupKForTuple2K[F[_], G[_]](implicit FF: SemigroupK[F],
+ GG: SemigroupK[G]): SemigroupK[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KSemigroupK[F, G] {
+ def F: SemigroupK[F] = FF
+ def G: SemigroupK[G] = GG
+ }
+ implicit def catsDataCommutativeApplyForTuple2K[F[_], G[_]](
+ implicit FF: CommutativeApply[F],
+ GG: CommutativeApply[G]
+ ): CommutativeApply[λ[α => Tuple2K[F, G, α]]] =
new Tuple2KApply[F, G] with CommutativeApply[λ[α => Tuple2K[F, G, α]]] {
def F: Apply[F] = FF
def G: Apply[G] = GG
}
}
-private[data] sealed abstract class Tuple2KInstances5 extends Tuple2KInstances6 {
- implicit def catsDataApplicativeForTuple2K[F[_], G[_]](implicit FF: Applicative[F], GG: Applicative[G]): Applicative[λ[α => Tuple2K[F, G, α]]] = new Tuple2KApplicative[F, G] {
- def F: Applicative[F] = FF
- def G: Applicative[G] = GG
- }
+sealed abstract private[data] class Tuple2KInstances5 extends Tuple2KInstances6 {
+ implicit def catsDataApplicativeForTuple2K[F[_], G[_]](implicit FF: Applicative[F],
+ GG: Applicative[G]): Applicative[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KApplicative[F, G] {
+ def F: Applicative[F] = FF
+ def G: Applicative[G] = GG
+ }
}
-
-private[data] sealed abstract class Tuple2KInstances6 extends Tuple2KInstances7 {
- implicit def catsDataApplyForTuple2K[F[_], G[_]](implicit FF: Apply[F], GG: Apply[G]): Apply[λ[α => Tuple2K[F, G, α]]] = new Tuple2KApply[F, G] {
- def F: Apply[F] = FF
- def G: Apply[G] = GG
- }
+sealed abstract private[data] class Tuple2KInstances6 extends Tuple2KInstances7 {
+ implicit def catsDataApplyForTuple2K[F[_], G[_]](implicit FF: Apply[F],
+ GG: Apply[G]): Apply[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KApply[F, G] {
+ def F: Apply[F] = FF
+ def G: Apply[G] = GG
+ }
}
-private[data] sealed abstract class Tuple2KInstances7 extends Tuple2KInstances8 {
- implicit def catsDataDistributiveForTuple2K[F[_], G[_]](implicit FF: Distributive[F], GG: Distributive[G]): Distributive[λ[α => Tuple2K[F, G, α]]] =
+sealed abstract private[data] class Tuple2KInstances7 extends Tuple2KInstances8 {
+ implicit def catsDataDistributiveForTuple2K[F[_], G[_]](implicit FF: Distributive[F],
+ GG: Distributive[G]): Distributive[λ[α => Tuple2K[F, G, α]]] =
new Tuple2KDistributive[F, G] with Tuple2KFunctor[F, G] {
def F: Distributive[F] = FF
def G: Distributive[G] = GG
}
}
-private[data] sealed abstract class Tuple2KInstances8 {
- implicit def catsDataFunctorForTuple2K[F[_], G[_]](implicit FF: Functor[F], GG: Functor[G]): Functor[λ[α => Tuple2K[F, G, α]]] = new Tuple2KFunctor[F, G] {
- def F: Functor[F] = FF
- def G: Functor[G] = GG
- }
+sealed abstract private[data] class Tuple2KInstances8 {
+ implicit def catsDataFunctorForTuple2K[F[_], G[_]](implicit FF: Functor[F],
+ GG: Functor[G]): Functor[λ[α => Tuple2K[F, G, α]]] =
+ new Tuple2KFunctor[F, G] {
+ def F: Functor[F] = FF
+ def G: Functor[G] = GG
+ }
}
-private[data] sealed trait Tuple2KFunctor[F[_], G[_]] extends Functor[λ[α => Tuple2K[F, G, α]]] {
+sealed private[data] trait Tuple2KFunctor[F[_], G[_]] extends Functor[λ[α => Tuple2K[F, G, α]]] {
def F: Functor[F]
def G: Functor[G]
- override def map[A, B](fa: Tuple2K[F, G, A])(f: A => B): Tuple2K[F, G, B] = Tuple2K(F.map(fa.first)(f), G.map(fa.second)(f))
+ override def map[A, B](fa: Tuple2K[F, G, A])(f: A => B): Tuple2K[F, G, B] =
+ Tuple2K(F.map(fa.first)(f), G.map(fa.second)(f))
}
-
-private[data] sealed trait Tuple2KDistributive[F[_], G[_]] extends Distributive[λ[α => Tuple2K[F, G, α]]] {
+sealed private[data] trait Tuple2KDistributive[F[_], G[_]] extends Distributive[λ[α => Tuple2K[F, G, α]]] {
def F: Distributive[F]
def G: Distributive[G]
override def distribute[H[_]: Functor, A, B](ha: H[A])(f: A => Tuple2K[F, G, B]): Tuple2K[F, G, H[B]] =
- Tuple2K(F.distribute(ha){a => f(a).first}, G.distribute(ha){a => f(a).second})
+ Tuple2K(F.distribute(ha) { a =>
+ f(a).first
+ }, G.distribute(ha) { a =>
+ f(a).second
+ })
override def map[A, B](fa: Tuple2K[F, G, A])(f: A => B): Tuple2K[F, G, B] =
Tuple2K(F.map(fa.first)(f), G.map(fa.second)(f))
}
-private[data] sealed trait Tuple2KContravariant[F[_], G[_]] extends Contravariant[λ[α => Tuple2K[F, G, α]]] {
+sealed private[data] trait Tuple2KContravariant[F[_], G[_]] extends Contravariant[λ[α => Tuple2K[F, G, α]]] {
def F: Contravariant[F]
def G: Contravariant[G]
override def contramap[A, B](fa: Tuple2K[F, G, A])(f: B => A): Tuple2K[F, G, B] =
Tuple2K(F.contramap(fa.first)(f), G.contramap(fa.second)(f))
}
-private[data] sealed trait Tuple2KContravariantMonoidal[F[_], G[_]] extends ContravariantMonoidal[λ[α => Tuple2K[F, G, α]]] {
+sealed private[data] trait Tuple2KContravariantMonoidal[F[_], G[_]]
+ extends ContravariantMonoidal[λ[α => Tuple2K[F, G, α]]] {
def F: ContravariantMonoidal[F]
def G: ContravariantMonoidal[G]
def unit: Tuple2K[F, G, Unit] = Tuple2K(F.unit, G.unit)
@@ -170,14 +208,15 @@ private[data] sealed trait Tuple2KContravariantMonoidal[F[_], G[_]] extends Cont
Tuple2K(F.contramap(fa.first)(f), G.contramap(fa.second)(f))
}
-private[data] sealed trait Tuple2KApply[F[_], G[_]] extends Apply[λ[α => Tuple2K[F, G, α]]] with Tuple2KFunctor[F, G] {
+sealed private[data] trait Tuple2KApply[F[_], G[_]] extends Apply[λ[α => Tuple2K[F, G, α]]] with Tuple2KFunctor[F, G] {
def F: Apply[F]
def G: Apply[G]
override def ap[A, B](f: Tuple2K[F, G, A => B])(fa: Tuple2K[F, G, A]): Tuple2K[F, G, B] =
Tuple2K(F.ap(f.first)(fa.first), G.ap(f.second)(fa.second))
override def product[A, B](fa: Tuple2K[F, G, A], fb: Tuple2K[F, G, B]): Tuple2K[F, G, (A, B)] =
Tuple2K(F.product(fa.first, fb.first), G.product(fa.second, fb.second))
- override def map2Eval[A, B, Z](fa: Tuple2K[F, G, A], fb: Eval[Tuple2K[F, G, B]])(f: (A, B) => Z): Eval[Tuple2K[F, G, Z]] = {
+ override def map2Eval[A, B, Z](fa: Tuple2K[F, G, A],
+ fb: Eval[Tuple2K[F, G, B]])(f: (A, B) => Z): Eval[Tuple2K[F, G, Z]] = {
val fbmemo = fb.memoize // don't recompute this twice internally
for {
fz <- F.map2Eval(fa.first, fbmemo.map(_.first))(f)
@@ -186,33 +225,41 @@ private[data] sealed trait Tuple2KApply[F[_], G[_]] extends Apply[λ[α => Tuple
}
}
-private[data] sealed trait Tuple2KApplicative[F[_], G[_]] extends Applicative[λ[α => Tuple2K[F, G, α]]] with Tuple2KApply[F, G] {
+sealed private[data] trait Tuple2KApplicative[F[_], G[_]]
+ extends Applicative[λ[α => Tuple2K[F, G, α]]]
+ with Tuple2KApply[F, G] {
def F: Applicative[F]
def G: Applicative[G]
def pure[A](a: A): Tuple2K[F, G, A] = Tuple2K(F.pure(a), G.pure(a))
}
-private[data] sealed trait Tuple2KSemigroupK[F[_], G[_]] extends SemigroupK[λ[α => Tuple2K[F, G, α]]] {
+sealed private[data] trait Tuple2KSemigroupK[F[_], G[_]] extends SemigroupK[λ[α => Tuple2K[F, G, α]]] {
def F: SemigroupK[F]
def G: SemigroupK[G]
override def combineK[A](x: Tuple2K[F, G, A], y: Tuple2K[F, G, A]): Tuple2K[F, G, A] =
Tuple2K(F.combineK(x.first, y.first), G.combineK(x.second, y.second))
}
-private[data] sealed trait Tuple2KMonoidK[F[_], G[_]] extends MonoidK[λ[α => Tuple2K[F, G, α]]] with Tuple2KSemigroupK[F, G] {
+sealed private[data] trait Tuple2KMonoidK[F[_], G[_]]
+ extends MonoidK[λ[α => Tuple2K[F, G, α]]]
+ with Tuple2KSemigroupK[F, G] {
def F: MonoidK[F]
def G: MonoidK[G]
override def empty[A]: Tuple2K[F, G, A] =
Tuple2K(F.empty[A], G.empty[A])
}
-private[data] sealed trait Tuple2KAlternative[F[_], G[_]] extends Alternative[λ[α => Tuple2K[F, G, α]]]
- with Tuple2KApplicative[F, G] with Tuple2KMonoidK[F, G] {
+sealed private[data] trait Tuple2KAlternative[F[_], G[_]]
+ extends Alternative[λ[α => Tuple2K[F, G, α]]]
+ with Tuple2KApplicative[F, G]
+ with Tuple2KMonoidK[F, G] {
def F: Alternative[F]
def G: Alternative[G]
}
-private[data] sealed trait Tuple2KMonad[F[_], G[_]] extends Monad[λ[α => Tuple2K[F, G, α]]] with Tuple2KApplicative[F, G] {
+sealed private[data] trait Tuple2KMonad[F[_], G[_]]
+ extends Monad[λ[α => Tuple2K[F, G, α]]]
+ with Tuple2KApplicative[F, G] {
def F: Monad[F]
def G: Monad[G]
override def pure[A](a: A): Tuple2K[F, G, A] =
@@ -225,7 +272,7 @@ private[data] sealed trait Tuple2KMonad[F[_], G[_]] extends Monad[λ[α => Tuple
Tuple2K(F.tailRecM(a)(f(_).first), G.tailRecM(a)(f(_).second))
}
-private[data] sealed trait Tuple2KFoldable[F[_], G[_]] extends Foldable[λ[α => Tuple2K[F, G, α]]] {
+sealed private[data] trait Tuple2KFoldable[F[_], G[_]] extends Foldable[λ[α => Tuple2K[F, G, α]]] {
def F: Foldable[F]
def G: Foldable[G]
@@ -236,22 +283,26 @@ private[data] sealed trait Tuple2KFoldable[F[_], G[_]] extends Foldable[λ[α =>
F.foldRight(fa.first, G.foldRight(fa.second, lb)(f))(f)
}
-private[data] sealed trait Tuple2KTraverse[F[_], G[_]] extends Traverse[λ[α => Tuple2K[F, G, α]]] with Tuple2KFoldable[F, G] {
+sealed private[data] trait Tuple2KTraverse[F[_], G[_]]
+ extends Traverse[λ[α => Tuple2K[F, G, α]]]
+ with Tuple2KFoldable[F, G] {
def F: Traverse[F]
def G: Traverse[G]
- override def traverse[H[_], A, B](fa: Tuple2K[F, G, A])(f: A => H[B])(implicit H: Applicative[H]): H[Tuple2K[F, G, B]] =
+ override def traverse[H[_], A, B](
+ fa: Tuple2K[F, G, A]
+ )(f: A => H[B])(implicit H: Applicative[H]): H[Tuple2K[F, G, B]] =
H.map2(F.traverse(fa.first)(f), G.traverse(fa.second)(f))(Tuple2K(_, _))
}
-private[data] sealed trait Tuple2KShow[F[_], G[_], A] extends Show[Tuple2K[F, G, A]] {
+sealed private[data] trait Tuple2KShow[F[_], G[_], A] extends Show[Tuple2K[F, G, A]] {
def F: Show[F[A]]
def G: Show[G[A]]
def show(tuple: Tuple2K[F, G, A]): String = s"Tuple2K(${F.show(tuple.first)}, ${G.show(tuple.second)})"
}
-private[data] sealed trait Tuple2KOrder[F[_], G[_], A] extends Order[Tuple2K[F, G, A]] {
+sealed private[data] trait Tuple2KOrder[F[_], G[_], A] extends Order[Tuple2K[F, G, A]] {
def F: Order[F[A]]
def G: Order[G[A]]
diff --git a/core/src/main/scala/cats/data/Validated.scala b/core/src/main/scala/cats/data/Validated.scala
index 86b41f875b..862878a32b 100644
--- a/core/src/main/scala/cats/data/Validated.scala
+++ b/core/src/main/scala/cats/data/Validated.scala
@@ -12,17 +12,17 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
def fold[B](fe: E => B, fa: A => B): B =
this match {
case Invalid(e) => fe(e)
- case Valid(a) => fa(a)
+ case Valid(a) => fa(a)
}
def isValid: Boolean = this match {
case Invalid(_) => false
- case _ => true
+ case _ => true
}
def isInvalid: Boolean = this match {
case Invalid(_) => true
- case _ => false
+ case _ => false
}
/**
@@ -30,7 +30,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def foreach(f: A => Unit): Unit = this match {
case Valid(a) => f(a)
- case _ => ()
+ case _ => ()
}
/**
@@ -38,15 +38,15 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def getOrElse[B >: A](default: => B): B = this match {
case Valid(a) => a
- case _ => default
+ case _ => default
}
/**
- * Return the Valid value, or the result of f if Invalid
- */
+ * Return the Valid value, or the result of f if Invalid
+ */
def valueOr[B >: A](f: E => B): B = this match {
case Invalid(e) => f(e)
- case Valid(a) => a
+ case Valid(a) => a
}
/**
@@ -54,7 +54,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def exists(predicate: A => Boolean): Boolean = this match {
case Valid(a) => predicate(a)
- case _ => false
+ case _ => false
}
/**
@@ -62,7 +62,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def forall(f: A => Boolean): Boolean = this match {
case Valid(a) => f(a)
- case _ => true
+ case _ => true
}
/**
@@ -73,27 +73,29 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
def orElse[EE, AA >: A](default: => Validated[EE, AA]): Validated[EE, AA] =
this match {
case v @ Valid(_) => v
- case _ => default
+ case _ => default
}
/**
- * If `this` is valid return `this`, otherwise if `that` is valid return `that`, otherwise combine the failures.
- * This is similar to [[orElse]] except that here failures are accumulated.
- */
- def findValid[EE >: E, AA >: A](that: => Validated[EE, AA])(implicit EE: Semigroup[EE]): Validated[EE, AA] = this match {
- case v @ Valid(_) => v
- case Invalid(e) => that match {
+ * If `this` is valid return `this`, otherwise if `that` is valid return `that`, otherwise combine the failures.
+ * This is similar to [[orElse]] except that here failures are accumulated.
+ */
+ def findValid[EE >: E, AA >: A](that: => Validated[EE, AA])(implicit EE: Semigroup[EE]): Validated[EE, AA] =
+ this match {
case v @ Valid(_) => v
- case Invalid(ee) => Invalid(EE.combine(e, ee))
+ case Invalid(e) =>
+ that match {
+ case v @ Valid(_) => v
+ case Invalid(ee) => Invalid(EE.combine(e, ee))
+ }
}
- }
/**
* Converts the value to an Either[E, A]
*/
def toEither: Either[E, A] = this match {
case Invalid(e) => Left(e)
- case Valid(a) => Right(a)
+ case Valid(a) => Right(a)
}
/**
@@ -101,15 +103,15 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def toOption: Option[A] = this match {
case Valid(a) => Some(a)
- case _ => None
+ case _ => None
}
/**
- * Returns Valid values wrapped in Ior.Right, and None for Ior.Left values
- */
+ * Returns Valid values wrapped in Ior.Right, and None for Ior.Left values
+ */
def toIor: Ior[E, A] = this match {
case Invalid(e) => Ior.Left(e)
- case Valid(a) => Ior.Right(a)
+ case Valid(a) => Ior.Right(a)
}
/**
@@ -118,21 +120,21 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def toList: List[A] = this match {
case Valid(a) => List(a)
- case _ => Nil
+ case _ => Nil
}
/** Lift the Invalid value into a NonEmptyList. */
def toValidatedNel[EE >: E, AA >: A]: ValidatedNel[EE, AA] =
this match {
case v @ Valid(_) => v
- case Invalid(e) => Validated.invalidNel(e)
+ case Invalid(e) => Validated.invalidNel(e)
}
/** Lift the Invalid value into a NonEmptyChain. */
def toValidatedNec[EE >: E, AA >: A]: ValidatedNec[EE, AA] =
this match {
case v @ Valid(_) => v
- case Invalid(e) => Validated.invalidNec(e)
+ case Invalid(e) => Validated.invalidNec(e)
}
/**
@@ -147,27 +149,28 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
* given functions.
*/
def bimap[EE, AA](fe: E => EE, fa: A => AA): Validated[EE, AA] =
- fold(fe andThen Invalid.apply,
- fa andThen Valid.apply)
-
- def compare[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: Order[EE], AA: Order[AA]): Int = (this, that) match {
- case (Valid(a), Valid(aa)) => AA.compare(a, aa)
- case (Invalid(e), Invalid(ee)) => EE.compare(e, ee)
- case (Invalid(_), _) => -1
- case (Valid(_), _) => 1
- }
+ fold(fe.andThen(Invalid.apply), fa.andThen(Valid.apply))
- def partialCompare[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: PartialOrder[EE], AA: PartialOrder[AA]): Double = (this, that) match {
- case (Valid(a), Valid(aa)) => AA.partialCompare(a, aa)
+ def compare[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: Order[EE], AA: Order[AA]): Int =
+ (this, that) match {
+ case (Valid(a), Valid(aa)) => AA.compare(a, aa)
+ case (Invalid(e), Invalid(ee)) => EE.compare(e, ee)
+ case (Invalid(_), _) => -1
+ case (Valid(_), _) => 1
+ }
+
+ def partialCompare[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: PartialOrder[EE],
+ AA: PartialOrder[AA]): Double = (this, that) match {
+ case (Valid(a), Valid(aa)) => AA.partialCompare(a, aa)
case (Invalid(e), Invalid(ee)) => EE.partialCompare(e, ee)
- case (Invalid(_), _) => -1
- case (Valid(_), _) => 1
+ case (Invalid(_), _) => -1
+ case (Valid(_), _) => 1
}
def ===[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: Eq[EE], AA: Eq[AA]): Boolean = (this, that) match {
case (Invalid(e), Invalid(ee)) => EE.eqv(e, ee)
- case (Valid(a), Valid(aa)) => AA.eqv(a, aa)
- case _ => false
+ case (Valid(a), Valid(aa)) => AA.eqv(a, aa)
+ case _ => false
}
/**
@@ -176,10 +179,10 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def ap[EE >: E, B](f: Validated[EE, A => B])(implicit EE: Semigroup[EE]): Validated[EE, B] =
(this, f) match {
- case (Valid(a), Valid(f)) => Valid(f(a))
+ case (Valid(a), Valid(f)) => Valid(f(a))
case (Invalid(e1), Invalid(e2)) => Invalid(EE.combine(e2, e1))
- case (e@Invalid(_), _) => e
- case (_, e@Invalid(_)) => e
+ case (e @ Invalid(_), _) => e
+ case (_, e @ Invalid(_)) => e
}
/**
@@ -187,10 +190,10 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def product[EE >: E, B](fb: Validated[EE, B])(implicit EE: Semigroup[EE]): Validated[EE, (A, B)] =
(this, fb) match {
- case (Valid(a), Valid(b)) => Valid((a, b))
+ case (Valid(a), Valid(b)) => Valid((a, b))
case (Invalid(e1), Invalid(e2)) => Invalid(EE.combine(e1, e2))
- case (e @ Invalid(_), _) => e
- case (_, e @ Invalid(_)) => e
+ case (e @ Invalid(_), _) => e
+ case (_, e @ Invalid(_)) => e
}
/**
@@ -198,7 +201,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def map[B](f: A => B): Validated[E, B] = this match {
case i @ Invalid(_) => i
- case Valid(a) => Valid(f(a))
+ case Valid(a) => Valid(f(a))
}
/**
@@ -207,7 +210,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def leftMap[EE](f: E => EE): Validated[EE, A] = this match {
case a @ Valid(_) => a
- case Invalid(e) => Invalid(f(e))
+ case Invalid(e) => Invalid(f(e))
}
/**
@@ -216,7 +219,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
* when Invalid, lift the Error into the Applicative's context
*/
def traverse[F[_], EE >: E, B](f: A => F[B])(implicit F: Applicative[F]): F[Validated[EE, B]] = this match {
- case Valid(a) => F.map(f(a))(Valid.apply)
+ case Valid(a) => F.map(f(a))(Valid.apply)
case e @ Invalid(_) => F.pure(e)
}
@@ -226,8 +229,8 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def foldLeft[B](b: B)(f: (B, A) => B): B = this match {
case Valid(a) => f(b, a)
- case _ => b
- }
+ case _ => b
+ }
/**
* Lazily-apply the given function to the value with the given B
@@ -235,16 +238,14 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def foldRight[B](lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] = this match {
case Valid(a) => f(a, lb)
- case _ => lb
+ case _ => lb
}
-
def show[EE >: E, AA >: A](implicit EE: Show[EE], AA: Show[AA]): String = this match {
case Invalid(e) => s"Invalid(${EE.show(e)})"
- case Valid(a) => s"Valid(${AA.show(a)})"
+ case Valid(a) => s"Valid(${AA.show(a)})"
}
-
/**
* Apply a function (that returns a `Validated`) in the valid case.
* Otherwise return the original `Validated`.
@@ -260,7 +261,7 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def andThen[EE >: E, B](f: A => Validated[EE, B]): Validated[EE, B] =
this match {
- case Valid(a) => f(a)
+ case Valid(a) => f(a)
case i @ Invalid(_) => i
}
@@ -270,22 +271,23 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
* will be `Valid`, if, and only if, both this `Validated` instance and the
* supplied `Validated` instance are also `Valid`.
*/
- def combine[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: Semigroup[EE], AA: Semigroup[AA]): Validated[EE, AA] =
+ def combine[EE >: E, AA >: A](that: Validated[EE, AA])(implicit EE: Semigroup[EE],
+ AA: Semigroup[AA]): Validated[EE, AA] =
(this, that) match {
- case (Valid(a), Valid(b)) => Valid(AA.combine(a, b))
+ case (Valid(a), Valid(b)) => Valid(AA.combine(a, b))
case (Invalid(a), Invalid(b)) => Invalid(EE.combine(a, b))
- case (Invalid(_), _) => this
- case _ => that
+ case (Invalid(_), _) => this
+ case _ => that
}
def swap: Validated[A, E] = this match {
- case Valid(a) => Invalid(a)
+ case Valid(a) => Invalid(a)
case Invalid(e) => Valid(e)
}
def merge[EE >: E](implicit ev: A <:< EE): EE = this match {
case Invalid(e) => e
- case Valid(a) => ev(a)
+ case Valid(a) => ev(a)
}
/**
@@ -301,23 +303,23 @@ sealed abstract class Validated[+E, +A] extends Product with Serializable {
*/
def ensure[EE >: E](onFailure: => EE)(f: A => Boolean): Validated[EE, A] = this match {
case Valid(a) => if (f(a)) this else Validated.invalid(onFailure)
- case _ => this
+ case _ => this
}
/**
- * Ensure that a successful result passes the given predicate,
- * falling back to the an Invalid of the result of `onFailure` if the predicate
- * returns false.
- *
- * For example:
- * {{{
- * scala> Validated.valid("ab").ensureOr(s => new IllegalArgumentException("Must be longer than 3, provided '" + s + "'"))(_.length > 3)
- * res0: Validated[IllegalArgumentException, String] = Invalid(java.lang.IllegalArgumentException: Must be longer than 3, provided 'ab')
- * }}}
- */
+ * Ensure that a successful result passes the given predicate,
+ * falling back to the an Invalid of the result of `onFailure` if the predicate
+ * returns false.
+ *
+ * For example:
+ * {{{
+ * scala> Validated.valid("ab").ensureOr(s => new IllegalArgumentException("Must be longer than 3, provided '" + s + "'"))(_.length > 3)
+ * res0: Validated[IllegalArgumentException, String] = Invalid(java.lang.IllegalArgumentException: Must be longer than 3, provided 'ab')
+ * }}}
+ */
def ensureOr[EE >: E](onFailure: A => EE)(f: A => Boolean): Validated[EE, A] = this match {
case Valid(a) => if (f(a)) this else Validated.invalid(onFailure(a))
- case _ => this
+ case _ => this
}
}
@@ -325,7 +327,6 @@ object Validated extends ValidatedInstances with ValidatedFunctions with Validat
final case class Valid[+A](a: A) extends Validated[Nothing, A]
final case class Invalid[+E](e: E) extends Validated[E, Nothing]
-
/**
* Evaluates the specified block, catching exceptions of the specified type and returning them on the invalid side of
* the resulting `Validated`. Uncaught exceptions are propagated.
@@ -345,7 +346,7 @@ object Validated extends ValidatedInstances with ValidatedFunctions with Validat
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[data] final class CatchOnlyPartiallyApplied[T](val dummy: Boolean = true ) extends AnyVal{
+ final private[data] class CatchOnlyPartiallyApplied[T](val dummy: Boolean = true) extends AnyVal {
def apply[A](f: => A)(implicit T: ClassTag[T], NT: NotNull[T]): Validated[T, A] =
try {
valid(f)
@@ -356,52 +357,58 @@ object Validated extends ValidatedInstances with ValidatedFunctions with Validat
}
}
-private[data] sealed abstract class ValidatedInstances extends ValidatedInstances1 {
+sealed abstract private[data] class ValidatedInstances extends ValidatedInstances1 {
implicit def catsDataSemigroupKForValidated[A](implicit A: Semigroup[A]): SemigroupK[Validated[A, ?]] =
new SemigroupK[Validated[A, ?]] {
def combineK[B](x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x match {
case v @ Valid(_) => v
- case Invalid(ix) => y match {
- case Invalid(iy) => Invalid(A.combine(ix, iy))
- case v @ Valid(_) => v
- }
+ case Invalid(ix) =>
+ y match {
+ case Invalid(iy) => Invalid(A.combine(ix, iy))
+ case v @ Valid(_) => v
+ }
}
}
- implicit def catsDataMonoidForValidated[A, B](implicit A: Semigroup[A], B: Monoid[B]): Monoid[Validated[A, B]] = new Monoid[Validated[A, B]] {
- def empty: Validated[A, B] = Valid(B.empty)
- def combine(x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x combine y
- }
+ implicit def catsDataMonoidForValidated[A, B](implicit A: Semigroup[A], B: Monoid[B]): Monoid[Validated[A, B]] =
+ new Monoid[Validated[A, B]] {
+ def empty: Validated[A, B] = Valid(B.empty)
+ def combine(x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x.combine(y)
+ }
implicit def catsDataOrderForValidated[A: Order, B: Order]: Order[Validated[A, B]] = new Order[Validated[A, B]] {
- def compare(x: Validated[A, B], y: Validated[A, B]): Int = x compare y
- override def partialCompare(x: Validated[A, B], y: Validated[A, B]): Double = x partialCompare y
+ def compare(x: Validated[A, B], y: Validated[A, B]): Int = x.compare(y)
+ override def partialCompare(x: Validated[A, B], y: Validated[A, B]): Double = x.partialCompare(y)
override def eqv(x: Validated[A, B], y: Validated[A, B]): Boolean = x === y
}
- implicit def catsDataShowForValidated[A, B](implicit A: Show[A], B: Show[B]): Show[Validated[A, B]] = new Show[Validated[A, B]] {
- def show(f: Validated[A, B]): String = f.show
- }
+ implicit def catsDataShowForValidated[A, B](implicit A: Show[A], B: Show[B]): Show[Validated[A, B]] =
+ new Show[Validated[A, B]] {
+ def show(f: Validated[A, B]): String = f.show
+ }
implicit val catsDataBitraverseForValidated: Bitraverse[Validated] =
new Bitraverse[Validated] {
- def bitraverse[G[_], A, B, C, D](fab: Validated[A, B])(f: A => G[C], g: B => G[D])(implicit G: Applicative[G]): G[Validated[C, D]] =
+ def bitraverse[G[_], A, B, C, D](
+ fab: Validated[A, B]
+ )(f: A => G[C], g: B => G[D])(implicit G: Applicative[G]): G[Validated[C, D]] =
fab match {
case Invalid(a) => G.map(f(a))(Validated.invalid)
- case Valid(b) => G.map(g(b))(Validated.valid)
+ case Valid(b) => G.map(g(b))(Validated.valid)
}
def bifoldLeft[A, B, C](fab: Validated[A, B], c: C)(f: (C, A) => C, g: (C, B) => C): C =
fab match {
case Invalid(a) => f(c, a)
- case Valid(b) => g(c, b)
+ case Valid(b) => g(c, b)
}
- def bifoldRight[A, B, C](fab: Validated[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ def bifoldRight[A, B, C](fab: Validated[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
fab match {
case Invalid(a) => f(a, c)
- case Valid(b) => g(b, c)
+ case Valid(b) => g(b, c)
}
override def bimap[A, B, C, D](fab: Validated[A, B])(f: A => C, g: B => D): Validated[C, D] =
@@ -416,31 +423,33 @@ private[data] sealed abstract class ValidatedInstances extends ValidatedInstance
def handleErrorWith[A](fa: Validated[E, A])(f: E => Validated[E, A]): Validated[E, A] =
fa match {
- case Validated.Invalid(e) => f(e)
+ case Validated.Invalid(e) => f(e)
case v @ Validated.Valid(_) => v
}
def raiseError[A](e: E): Validated[E, A] = Validated.Invalid(e)
}
}
-private[data] sealed abstract class ValidatedInstances1 extends ValidatedInstances2 {
+sealed abstract private[data] class ValidatedInstances1 extends ValidatedInstances2 {
- implicit def catsDataSemigroupForValidated[A, B](implicit A: Semigroup[A], B: Semigroup[B]): Semigroup[Validated[A, B]] =
+ implicit def catsDataSemigroupForValidated[A, B](implicit A: Semigroup[A],
+ B: Semigroup[B]): Semigroup[Validated[A, B]] =
new Semigroup[Validated[A, B]] {
- def combine(x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x combine y
+ def combine(x: Validated[A, B], y: Validated[A, B]): Validated[A, B] = x.combine(y)
}
- implicit def catsDataCommutativeApplicativeForValidated[E: CommutativeSemigroup]: CommutativeApplicative[Validated[E, ?]] =
+ implicit def catsDataCommutativeApplicativeForValidated[E: CommutativeSemigroup]
+ : CommutativeApplicative[Validated[E, ?]] =
new ValidatedApplicative[E] with CommutativeApplicative[Validated[E, ?]]
implicit def catsDataPartialOrderForValidated[A: PartialOrder, B: PartialOrder]: PartialOrder[Validated[A, B]] =
new PartialOrder[Validated[A, B]] {
- def partialCompare(x: Validated[A, B], y: Validated[A, B]): Double = x partialCompare y
+ def partialCompare(x: Validated[A, B], y: Validated[A, B]): Double = x.partialCompare(y)
override def eqv(x: Validated[A, B], y: Validated[A, B]): Boolean = x === y
}
}
-private[data] sealed abstract class ValidatedInstances2 {
+sealed abstract private[data] class ValidatedInstances2 {
implicit def catsDataEqForValidated[A: Eq, B: Eq]: Eq[Validated[A, B]] =
new Eq[Validated[A, B]] {
def eqv(x: Validated[A, B], y: Validated[A, B]): Boolean = x === y
@@ -450,7 +459,7 @@ private[data] sealed abstract class ValidatedInstances2 {
implicit def catsDataTraverseFunctorForValidated[E]: Traverse[Validated[E, ?]] =
new Traverse[Validated[E, ?]] {
- override def traverse[G[_] : Applicative, A, B](fa: Validated[E, A])(f: (A) => G[B]): G[Validated[E, B]] =
+ override def traverse[G[_]: Applicative, A, B](fa: Validated[E, A])(f: (A) => G[B]): G[Validated[E, B]] =
fa.traverse(f)
override def foldLeft[A, B](fa: Validated[E, A], b: B)(f: (B, A) => B): B =
@@ -465,7 +474,9 @@ private[data] sealed abstract class ValidatedInstances2 {
override def reduceLeftToOption[A, B](fa: Validated[E, A])(f: A => B)(g: (B, A) => B): Option[B] =
fa.map(f).toOption
- override def reduceRightToOption[A, B](fa: Validated[E, A])(f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[Option[B]] =
+ override def reduceRightToOption[A, B](
+ fa: Validated[E, A]
+ )(f: A => B)(g: (A, Eval[B]) => Eval[B]): Eval[Option[B]] =
Now(fa.map(f).toOption)
override def reduceLeftOption[A](fa: Validated[E, A])(f: (A, A) => A): Option[A] =
@@ -476,7 +487,7 @@ private[data] sealed abstract class ValidatedInstances2 {
override def size[A](fa: Validated[E, A]): Long = fa match {
case Invalid(_) => 0L
- case _ => 1L
+ case _ => 1L
}
override def get[A](fa: Validated[E, A])(idx: Long): Option[A] =
@@ -484,7 +495,7 @@ private[data] sealed abstract class ValidatedInstances2 {
override def foldMap[A, B](fa: Validated[E, A])(f: A => B)(implicit B: Monoid[B]): B = fa match {
case Valid(a) => f(a)
- case _ => B.empty
+ case _ => B.empty
}
override def find[A](fa: Validated[E, A])(f: A => Boolean): Option[A] =
@@ -498,7 +509,7 @@ private[data] sealed abstract class ValidatedInstances2 {
override def toList[A](fa: Validated[E, A]): List[A] = fa match {
case Valid(a) => a :: Nil
- case _ => Nil
+ case _ => Nil
}
override def isEmpty[A](fa: Validated[E, A]): Boolean = fa.isInvalid
@@ -520,48 +531,49 @@ private[data] class ValidatedApplicative[E: Semigroup] extends CommutativeApplic
}
private[data] trait ValidatedFunctions {
+
/**
- * Converts an `E` to a `Validated[E, A]`.
- *
- * For example:
- * {{{
- * scala> Validated.invalid[IllegalArgumentException, String](new IllegalArgumentException("Argument is nonzero"))
- * res0: Validated[IllegalArgumentException, String] = Invalid(java.lang.IllegalArgumentException: Argument is nonzero)
- * }}}
- */
+ * Converts an `E` to a `Validated[E, A]`.
+ *
+ * For example:
+ * {{{
+ * scala> Validated.invalid[IllegalArgumentException, String](new IllegalArgumentException("Argument is nonzero"))
+ * res0: Validated[IllegalArgumentException, String] = Invalid(java.lang.IllegalArgumentException: Argument is nonzero)
+ * }}}
+ */
def invalid[E, A](e: E): Validated[E, A] = Validated.Invalid(e)
/**
- * Converts an `E` to a `ValidatedNel[E, A]`.
- *
- * For example:
- * {{{
- * scala> Validated.invalidNel[IllegalArgumentException, String](new IllegalArgumentException("Argument is nonzero"))
- * res0: ValidatedNel[IllegalArgumentException, String] = Invalid(NonEmptyList(java.lang.IllegalArgumentException: Argument is nonzero))
- * }}}
- */
+ * Converts an `E` to a `ValidatedNel[E, A]`.
+ *
+ * For example:
+ * {{{
+ * scala> Validated.invalidNel[IllegalArgumentException, String](new IllegalArgumentException("Argument is nonzero"))
+ * res0: ValidatedNel[IllegalArgumentException, String] = Invalid(NonEmptyList(java.lang.IllegalArgumentException: Argument is nonzero))
+ * }}}
+ */
def invalidNel[E, A](e: E): ValidatedNel[E, A] = Validated.Invalid(NonEmptyList(e, Nil))
/**
- * Converts a `A` to a `Validated[E, A]`.
- *
- * For example:
- * {{{
- * scala> Validated.valid[IllegalArgumentException, String]("Hello world")
- * res0: Validated[IllegalArgumentException, String] = Valid(Hello world)
- * }}}
- */
+ * Converts a `A` to a `Validated[E, A]`.
+ *
+ * For example:
+ * {{{
+ * scala> Validated.valid[IllegalArgumentException, String]("Hello world")
+ * res0: Validated[IllegalArgumentException, String] = Valid(Hello world)
+ * }}}
+ */
def valid[E, A](a: A): Validated[E, A] = Validated.Valid(a)
/**
- * Converts a `A` to a `ValidatedNel[E, A]`.
- *
- * For example:
- * {{{
- * scala> Validated.validNel[IllegalArgumentException, String]("Hello world")
- * res0: ValidatedNel[IllegalArgumentException, String] = Valid(Hello world)
- * }}}
- */
+ * Converts a `A` to a `ValidatedNel[E, A]`.
+ *
+ * For example:
+ * {{{
+ * scala> Validated.validNel[IllegalArgumentException, String]("Hello world")
+ * res0: ValidatedNel[IllegalArgumentException, String] = Valid(Hello world)
+ * }}}
+ */
def validNel[E, A](a: A): ValidatedNel[E, A] = Validated.Valid(a)
def catchNonFatal[A](f: => A): Validated[Throwable, A] =
@@ -591,8 +603,8 @@ private[data] trait ValidatedFunctions {
def fromOption[A, B](o: Option[B], ifNone: => A): Validated[A, B] = o.fold(invalid[A, B](ifNone))(valid)
/**
- * Converts an `Ior[A, B]` to a `Validated[A, B]`.
- */
+ * Converts an `Ior[A, B]` to a `Validated[A, B]`.
+ */
def fromIor[A, B](ior: Ior[A, B]): Validated[A, B] = ior.fold(invalid, valid, (_, b) => valid(b))
/**
@@ -612,7 +624,6 @@ private[data] trait ValidatedFunctions {
private[data] trait ValidatedFunctionsBinCompat0 {
-
/**
* Converts a `B` to a `ValidatedNec[A, B]`.
*
@@ -624,8 +635,6 @@ private[data] trait ValidatedFunctionsBinCompat0 {
*/
def validNec[A, B](b: B): ValidatedNec[A, B] = Validated.Valid(b)
-
-
/**
* Converts an `A` to a `ValidatedNec[A, B]`.
*
diff --git a/core/src/main/scala/cats/data/WriterT.scala b/core/src/main/scala/cats/data/WriterT.scala
index 9dcb53ec2b..4b15308aae 100644
--- a/core/src/main/scala/cats/data/WriterT.scala
+++ b/core/src/main/scala/cats/data/WriterT.scala
@@ -17,14 +17,15 @@ final case class WriterT[F[_], L, V](run: F[(L, V)]) {
functorF.map(run)(_._2)
def ap[Z](f: WriterT[F, L, V => Z])(implicit F: Apply[F], L: Semigroup[L]): WriterT[F, L, Z] =
- WriterT(
- F.map2(f.run, run){
- case ((l1, fvz), (l2, v)) => (L.combine(l1, l2), fvz(v))
- })
+ WriterT(F.map2(f.run, run) {
+ case ((l1, fvz), (l2, v)) => (L.combine(l1, l2), fvz(v))
+ })
def map[Z](fn: V => Z)(implicit functorF: Functor[F]): WriterT[F, L, Z] =
WriterT {
- functorF.map(run) { z => (z._1, fn(z._2)) }
+ functorF.map(run) { z =>
+ (z._1, fn(z._2))
+ }
}
def imap[Z](f: V => Z)(g: Z => V)(implicit F: Invariant[F]): WriterT[F, L, Z] =
@@ -40,7 +41,9 @@ final case class WriterT[F[_], L, V](run: F[(L, V)]) {
def contramap[Z](fn: Z => V)(implicit F: Contravariant[F]): WriterT[F, L, Z] =
WriterT {
- F.contramap(run) { z => (z._1, fn(z._2)) }
+ F.contramap(run) { z =>
+ (z._1, fn(z._2))
+ }
}
def flatMap[U](f: V => WriterT[F, L, U])(implicit flatMapF: FlatMap[F], semigroupL: Semigroup[L]): WriterT[F, L, U] =
@@ -105,8 +108,11 @@ object WriterT extends WriterTInstances with WriterTFunctions {
}
-private[data] sealed abstract class WriterTInstances extends WriterTInstances0 {
- implicit def catsDataCommutativeMonadForWriterT[F[_], L](implicit F: CommutativeMonad[F], L: CommutativeMonoid[L]): CommutativeMonad[WriterT[F, L, ?]] =
+sealed abstract private[data] class WriterTInstances extends WriterTInstances0 {
+ implicit def catsDataCommutativeMonadForWriterT[F[_], L](
+ implicit F: CommutativeMonad[F],
+ L: CommutativeMonoid[L]
+ ): CommutativeMonad[WriterT[F, L, ?]] =
new WriterTMonad[F, L] with CommutativeMonad[WriterT[F, L, ?]] {
implicit val F0: Monad[F] = F
implicit val L0: Monoid[L] = L
@@ -122,7 +128,7 @@ private[data] sealed abstract class WriterTInstances extends WriterTInstances0 {
}
}
-private[data] sealed abstract class WriterTInstances0 extends WriterTInstances1 {
+sealed abstract private[data] class WriterTInstances0 extends WriterTInstances1 {
implicit def catsDataTraverseForWriterT[F[_], L](implicit F: Traverse[F]): Traverse[WriterT[F, L, ?]] =
new WriterTTraverse[F, L] {
@@ -133,15 +139,17 @@ private[data] sealed abstract class WriterTInstances0 extends WriterTInstances1
catsDataFoldableForWriterT[Id, L](F)
}
-private[data] sealed abstract class WriterTInstances1 extends WriterTInstances2 {
- implicit def catsDataMonadErrorForWriterT[F[_], L, E](implicit F: MonadError[F, E], L: Monoid[L]): MonadError[WriterT[F, L, ?], E] =
+sealed abstract private[data] class WriterTInstances1 extends WriterTInstances2 {
+ implicit def catsDataMonadErrorForWriterT[F[_], L, E](implicit F: MonadError[F, E],
+ L: Monoid[L]): MonadError[WriterT[F, L, ?], E] =
new WriterTMonadError[F, L, E] {
implicit val F0: MonadError[F, E] = F
implicit val L0: Monoid[L] = L
}
- implicit def catsDataParallelForWriterT[F[_], M[_], L: Monoid]
- (implicit P: Parallel[M, F]): Parallel[WriterT[M, L, ?], WriterT[F, L, ?]] = new Parallel[WriterT[M, L, ?], WriterT[F, L, ?]]{
+ implicit def catsDataParallelForWriterT[F[_], M[_], L: Monoid](
+ implicit P: Parallel[M, F]
+ ): Parallel[WriterT[M, L, ?], WriterT[F, L, ?]] = new Parallel[WriterT[M, L, ?], WriterT[F, L, ?]] {
implicit val appF = P.applicative
implicit val monadM = P.monad
@@ -158,40 +166,41 @@ private[data] sealed abstract class WriterTInstances1 extends WriterTInstances2
implicit def catsDataEqForWriterTId[L: Eq, V: Eq]: Eq[WriterT[Id, L, V]] =
catsDataEqForWriterT[Id, L, V]
- implicit def catsDataBifunctorForWriterT[F[_]:Functor]: Bifunctor[WriterT[F, ?, ?]] =
+ implicit def catsDataBifunctorForWriterT[F[_]: Functor]: Bifunctor[WriterT[F, ?, ?]] =
new Bifunctor[WriterT[F, ?, ?]] {
def bimap[A, B, C, D](fab: WriterT[F, A, B])(f: A => C, g: B => D): WriterT[F, C, D] =
fab.bimap(f, g)
}
- implicit def catsDataShowForWriterT[F[_], L, V](implicit F: Show[F[(L, V)]]): Show[WriterT[F, L, V]] = new Show[WriterT[F, L, V]] {
- override def show(f: WriterT[F, L, V]): String = f.show
- }
+ implicit def catsDataShowForWriterT[F[_], L, V](implicit F: Show[F[(L, V)]]): Show[WriterT[F, L, V]] =
+ new Show[WriterT[F, L, V]] {
+ override def show(f: WriterT[F, L, V]): String = f.show
+ }
- implicit def catsDataMonoidForWriterTId[L:Monoid, V:Monoid]: Monoid[WriterT[Id, L, V]] =
+ implicit def catsDataMonoidForWriterTId[L: Monoid, V: Monoid]: Monoid[WriterT[Id, L, V]] =
catsDataMonoidForWriterT[Id, L, V]
implicit def catsDataFoldableForWriterT[F[_], L](implicit F: Foldable[F]): Foldable[WriterT[F, L, ?]] =
- new WriterTFoldable[F, L]{
+ new WriterTFoldable[F, L] {
val F0: Foldable[F] = F
}
}
-private[data] sealed abstract class WriterTInstances2 extends WriterTInstances3 {
- implicit def catsDataMonadForWriterTId[L:Monoid]: Monad[WriterT[Id, L, ?]] =
+sealed abstract private[data] class WriterTInstances2 extends WriterTInstances3 {
+ implicit def catsDataMonadForWriterTId[L: Monoid]: Monad[WriterT[Id, L, ?]] =
catsDataMonadForWriterT[Id, L]
implicit def catsDataEqForWriterT[F[_], L, V](implicit F: Eq[F[(L, V)]]): Eq[WriterT[F, L, V]] =
Eq.by[WriterT[F, L, V], F[(L, V)]](_.run)
- implicit def catsDataSemigroupForWriterTId[L:Semigroup, V:Semigroup]: Semigroup[WriterT[Id, L, V]] =
+ implicit def catsDataSemigroupForWriterTId[L: Semigroup, V: Semigroup]: Semigroup[WriterT[Id, L, V]] =
catsDataSemigroupForWriterT[Id, L, V]
implicit def catsDataComonadForWriterTId[L](implicit F: Comonad[Id]): Comonad[WriterT[Id, L, ?]] =
catsDataComonadForWriterT[Id, L](F)
}
-private[data] sealed abstract class WriterTInstances3 extends WriterTInstances4 {
+sealed abstract private[data] class WriterTInstances3 extends WriterTInstances4 {
implicit def catsDataMonadForWriterT[F[_], L](implicit F: Monad[F], L: Monoid[L]): Monad[WriterT[F, L, ?]] =
new WriterTMonad[F, L] {
implicit val F0: Monad[F] = F
@@ -207,12 +216,12 @@ private[data] sealed abstract class WriterTInstances3 extends WriterTInstances4
catsDataCoflatMapForWriterT[Id, L]
}
-private[data] sealed abstract class WriterTInstances4 extends WriterTInstances5 {
- implicit def catsDataFlatMapForWriterTId[L:Semigroup]: FlatMap[WriterT[Id, L, ?]] =
+sealed abstract private[data] class WriterTInstances4 extends WriterTInstances5 {
+ implicit def catsDataFlatMapForWriterTId[L: Semigroup]: FlatMap[WriterT[Id, L, ?]] =
catsDataFlatMapForWriterT2[Id, L]
}
-private[data] sealed abstract class WriterTInstances5 extends WriterTInstances6 {
+sealed abstract private[data] class WriterTInstances5 extends WriterTInstances6 {
implicit def catsDataFlatMapForWriterT1[F[_], L](implicit F: FlatMap[F], L: Monoid[L]): FlatMap[WriterT[F, L, ?]] =
new WriterTFlatMap1[F, L] {
implicit val F0: FlatMap[F] = F
@@ -225,28 +234,32 @@ private[data] sealed abstract class WriterTInstances5 extends WriterTInstances6
}
}
-private[data] sealed abstract class WriterTInstances6 extends WriterTInstances7 {
- implicit def catsDataApplicativeErrorForWriterT[F[_], L, E](implicit F: ApplicativeError[F, E], L: Monoid[L]): ApplicativeError[WriterT[F, L, ?], E] =
+sealed abstract private[data] class WriterTInstances6 extends WriterTInstances7 {
+ implicit def catsDataApplicativeErrorForWriterT[F[_], L, E](implicit F: ApplicativeError[F, E],
+ L: Monoid[L]): ApplicativeError[WriterT[F, L, ?], E] =
new WriterTApplicativeError[F, L, E] {
implicit val F0: ApplicativeError[F, E] = F
implicit val L0: Monoid[L] = L
}
}
-private[data] sealed abstract class WriterTInstances7 extends WriterTInstances8 {
- implicit def catsDataAlternativeForWriterT[F[_], L](implicit F: Alternative[F], L: Monoid[L]): Alternative[WriterT[F, L, ?]] =
+sealed abstract private[data] class WriterTInstances7 extends WriterTInstances8 {
+ implicit def catsDataAlternativeForWriterT[F[_], L](implicit F: Alternative[F],
+ L: Monoid[L]): Alternative[WriterT[F, L, ?]] =
new WriterTAlternative[F, L] {
implicit val F0: Alternative[F] = F
implicit val L0: Monoid[L] = L
}
- implicit def catsDataContravariantMonoidalForWriterT[F[_], L](implicit F: ContravariantMonoidal[F]): ContravariantMonoidal[WriterT[F, L, ?]] =
+ implicit def catsDataContravariantMonoidalForWriterT[F[_], L](
+ implicit F: ContravariantMonoidal[F]
+ ): ContravariantMonoidal[WriterT[F, L, ?]] =
new WriterTContravariantMonoidal[F, L] {
implicit val F0: ContravariantMonoidal[F] = F
}
}
-private[data] sealed abstract class WriterTInstances8 extends WriterTInstances9 {
+sealed abstract private[data] class WriterTInstances8 extends WriterTInstances9 {
implicit def catsDataMonoidKForWriterT[F[_], L](implicit F: MonoidK[F]): MonoidK[WriterT[F, L, ?]] =
new WriterTMonoidK[F, L] {
implicit val F0: MonoidK[F] = F
@@ -264,13 +277,14 @@ private[data] sealed abstract class WriterTInstances8 extends WriterTInstances9
}
}
-private[data] sealed abstract class WriterTInstances9 extends WriterTInstances10 {
+sealed abstract private[data] class WriterTInstances9 extends WriterTInstances10 {
implicit def catsDataSemigroupKForWriterT[F[_], L](implicit F: SemigroupK[F]): SemigroupK[WriterT[F, L, ?]] =
new WriterTSemigroupK[F, L] {
implicit val F0: SemigroupK[F] = F
}
- implicit def catsDataApplicativeForWriterT[F[_], L](implicit F: Applicative[F], L: Monoid[L]): Applicative[WriterT[F, L, ?]] =
+ implicit def catsDataApplicativeForWriterT[F[_], L](implicit F: Applicative[F],
+ L: Monoid[L]): Applicative[WriterT[F, L, ?]] =
new WriterTApplicative[F, L] {
implicit val F0: Applicative[F] = F
implicit val L0: Monoid[L] = L
@@ -280,7 +294,7 @@ private[data] sealed abstract class WriterTInstances9 extends WriterTInstances10
new WriterTInvariant[F, L] { implicit val F = F0 }
}
-private[data] sealed abstract class WriterTInstances10 extends WriterTInstances11 {
+sealed abstract private[data] class WriterTInstances10 extends WriterTInstances11 {
implicit def catsDataApplyForWriterT[F[_], L](implicit F: Apply[F], L: Semigroup[L]): Apply[WriterT[F, L, ?]] =
new WriterTApply[F, L] {
implicit val F0: Apply[F] = F
@@ -288,49 +302,50 @@ private[data] sealed abstract class WriterTInstances10 extends WriterTInstances1
}
}
-private[data] sealed abstract class WriterTInstances11 extends WriterTInstances12 {
+sealed abstract private[data] class WriterTInstances11 extends WriterTInstances12 {
implicit def catsDataComonadForWriterT[F[_], L](implicit F: Comonad[F]): Comonad[WriterT[F, L, ?]] =
new WriterTComonad[F, L] {
implicit val F0: Comonad[F] = F
}
}
-private[data] sealed abstract class WriterTInstances12 {
+sealed abstract private[data] class WriterTInstances12 {
implicit def catsDataCoflatMapForWriterT[F[_], L](implicit F: Functor[F]): CoflatMap[WriterT[F, L, ?]] =
new WriterTCoflatMap[F, L] {
implicit val F0: Functor[F] = F
}
}
-private[data] sealed trait WriterTFunctor[F[_], L] extends Functor[WriterT[F, L, ?]] {
+sealed private[data] trait WriterTFunctor[F[_], L] extends Functor[WriterT[F, L, ?]] {
implicit def F0: Functor[F]
override def map[A, B](fa: WriterT[F, L, A])(f: A => B): WriterT[F, L, B] =
fa.map(f)
}
-private[data] sealed trait WriterTContravariant[F[_], L] extends Contravariant[WriterT[F, L, ?]] {
+sealed private[data] trait WriterTContravariant[F[_], L] extends Contravariant[WriterT[F, L, ?]] {
implicit def F0: Contravariant[F]
override def contramap[A, B](fa: WriterT[F, L, A])(f: B => A): WriterT[F, L, B] =
fa.contramap(f)
}
-private[data] sealed trait WriterTInvariant[F[_], L] extends Invariant[WriterT[F, L, ?]] {
+sealed private[data] trait WriterTInvariant[F[_], L] extends Invariant[WriterT[F, L, ?]] {
implicit def F: Invariant[F]
override def imap[A, B](fa: WriterT[F, L, A])(f: A => B)(g: B => A): WriterT[F, L, B] =
fa.imap(f)(g)
}
-private[data] sealed trait WriterTApply[F[_], L] extends WriterTFunctor[F, L] with Apply[WriterT[F, L, ?]] {
- override implicit def F0: Apply[F]
+sealed private[data] trait WriterTApply[F[_], L] extends WriterTFunctor[F, L] with Apply[WriterT[F, L, ?]] {
+ implicit override def F0: Apply[F]
implicit def L0: Semigroup[L]
def ap[A, B](f: WriterT[F, L, A => B])(fa: WriterT[F, L, A]): WriterT[F, L, B] =
- fa ap f
+ fa.ap(f)
- override def map2Eval[A, B, Z](fa: WriterT[F, L, A], fb: Eval[WriterT[F, L, B]])(f: (A, B) => Z): Eval[WriterT[F, L, Z]] =
+ override def map2Eval[A, B, Z](fa: WriterT[F, L, A],
+ fb: Eval[WriterT[F, L, B]])(f: (A, B) => Z): Eval[WriterT[F, L, Z]] =
F0.map2Eval(fa.run, fb.map(_.run)) { case ((la, a), (lb, b)) => (L0.combine(la, lb), f(a, b)) }
.map(WriterT(_)) // F0 may have a lazy map2Eval
@@ -338,8 +353,8 @@ private[data] sealed trait WriterTApply[F[_], L] extends WriterTFunctor[F, L] wi
WriterT(F0.map(F0.product(fa.run, fb.run)) { case ((l1, a), (l2, b)) => (L0.combine(l1, l2), (a, b)) })
}
-private[data] sealed trait WriterTFlatMap1[F[_], L] extends WriterTApply[F, L] with FlatMap[WriterT[F, L, ?]] {
- override implicit def F0: FlatMap[F]
+sealed private[data] trait WriterTFlatMap1[F[_], L] extends WriterTApply[F, L] with FlatMap[WriterT[F, L, ?]] {
+ implicit override def F0: FlatMap[F]
implicit def L0: Monoid[L]
def flatMap[A, B](fa: WriterT[F, L, A])(f: A => WriterT[F, L, B]): WriterT[F, L, B] =
@@ -363,8 +378,8 @@ private[data] sealed trait WriterTFlatMap1[F[_], L] extends WriterTApply[F, L] w
}
}
-private[data] sealed trait WriterTFlatMap2[F[_], L] extends WriterTApply[F, L] with FlatMap[WriterT[F, L, ?]] {
- override implicit def F0: Monad[F]
+sealed private[data] trait WriterTFlatMap2[F[_], L] extends WriterTApply[F, L] with FlatMap[WriterT[F, L, ?]] {
+ implicit override def F0: Monad[F]
implicit def L0: Semigroup[L]
def flatMap[A, B](fa: WriterT[F, L, A])(f: A => WriterT[F, L, B]): WriterT[F, L, B] =
@@ -393,21 +408,26 @@ private[data] sealed trait WriterTFlatMap2[F[_], L] extends WriterTApply[F, L] w
}
}
-private[data] sealed trait WriterTApplicative[F[_], L] extends WriterTApply[F, L] with Applicative[WriterT[F, L, ?]] {
- override implicit def F0: Applicative[F]
- override implicit def L0: Monoid[L]
+sealed private[data] trait WriterTApplicative[F[_], L] extends WriterTApply[F, L] with Applicative[WriterT[F, L, ?]] {
+ implicit override def F0: Applicative[F]
+ implicit override def L0: Monoid[L]
def pure[A](a: A): WriterT[F, L, A] =
WriterT.value[F, L, A](a)
}
-private[data] sealed trait WriterTMonad[F[_], L] extends WriterTApplicative[F, L] with WriterTFlatMap1[F, L] with Monad[WriterT[F, L, ?]] {
- override implicit def F0: Monad[F]
- override implicit def L0: Monoid[L]
+sealed private[data] trait WriterTMonad[F[_], L]
+ extends WriterTApplicative[F, L]
+ with WriterTFlatMap1[F, L]
+ with Monad[WriterT[F, L, ?]] {
+ implicit override def F0: Monad[F]
+ implicit override def L0: Monoid[L]
}
-private[data] sealed trait WriterTApplicativeError[F[_], L, E] extends ApplicativeError[WriterT[F, L, ?], E] with WriterTApplicative[F, L] {
- override implicit def F0: ApplicativeError[F, E]
+sealed private[data] trait WriterTApplicativeError[F[_], L, E]
+ extends ApplicativeError[WriterT[F, L, ?], E]
+ with WriterTApplicative[F, L] {
+ implicit override def F0: ApplicativeError[F, E]
def raiseError[A](e: E): WriterT[F, L, A] = WriterT(F0.raiseError[(L, A)](e))
@@ -415,28 +435,34 @@ private[data] sealed trait WriterTApplicativeError[F[_], L, E] extends Applicati
WriterT(F0.handleErrorWith(fa.run)(e => f(e).run))
}
-private[data] sealed trait WriterTMonadError[F[_], L, E] extends MonadError[WriterT[F, L, ?], E] with WriterTMonad[F, L] with WriterTApplicativeError[F, L, E]{
- override implicit def F0: MonadError[F, E]
+sealed private[data] trait WriterTMonadError[F[_], L, E]
+ extends MonadError[WriterT[F, L, ?], E]
+ with WriterTMonad[F, L]
+ with WriterTApplicativeError[F, L, E] {
+ implicit override def F0: MonadError[F, E]
}
-private[data] sealed trait WriterTSemigroupK[F[_], L] extends SemigroupK[WriterT[F, L, ?]] {
+sealed private[data] trait WriterTSemigroupK[F[_], L] extends SemigroupK[WriterT[F, L, ?]] {
implicit def F0: SemigroupK[F]
def combineK[A](x: WriterT[F, L, A], y: WriterT[F, L, A]): WriterT[F, L, A] =
WriterT(F0.combineK(x.run, y.run))
}
-private[data] sealed trait WriterTMonoidK[F[_], L] extends MonoidK[WriterT[F, L, ?]] with WriterTSemigroupK[F, L] {
- override implicit def F0: MonoidK[F]
+sealed private[data] trait WriterTMonoidK[F[_], L] extends MonoidK[WriterT[F, L, ?]] with WriterTSemigroupK[F, L] {
+ implicit override def F0: MonoidK[F]
def empty[A]: WriterT[F, L, A] = WriterT(F0.empty)
}
-private[data] sealed trait WriterTAlternative[F[_], L] extends Alternative[WriterT[F, L, ?]] with WriterTMonoidK[F, L] with WriterTApplicative[F, L] {
- override implicit def F0: Alternative[F]
+sealed private[data] trait WriterTAlternative[F[_], L]
+ extends Alternative[WriterT[F, L, ?]]
+ with WriterTMonoidK[F, L]
+ with WriterTApplicative[F, L] {
+ implicit override def F0: Alternative[F]
}
-private[data] sealed trait WriterTContravariantMonoidal[F[_], L] extends ContravariantMonoidal[WriterT[F, L, ?]] {
+sealed private[data] trait WriterTContravariantMonoidal[F[_], L] extends ContravariantMonoidal[WriterT[F, L, ?]] {
implicit def F0: ContravariantMonoidal[F]
override def unit: WriterT[F, L, Unit] = WriterT(F0.trivial[(L, Unit)])
@@ -446,32 +472,34 @@ private[data] sealed trait WriterTContravariantMonoidal[F[_], L] extends Contrav
override def product[A, B](fa: WriterT[F, L, A], fb: WriterT[F, L, B]): WriterT[F, L, (A, B)] =
WriterT(
- F0.contramap(
- F0.product(fa.run, fb.run))(
- (t: (L, (A, B))) => t match {
+ F0.contramap(F0.product(fa.run, fb.run))(
+ (t: (L, (A, B))) =>
+ t match {
case (l, (a, b)) => ((l, a), (l, b))
- }))
+ }
+ )
+ )
}
-private[data] sealed trait WriterTSemigroup[F[_], L, A] extends Semigroup[WriterT[F, L, A]] {
+sealed private[data] trait WriterTSemigroup[F[_], L, A] extends Semigroup[WriterT[F, L, A]] {
implicit def F0: Semigroup[F[(L, A)]]
def combine(x: WriterT[F, L, A], y: WriterT[F, L, A]): WriterT[F, L, A] =
WriterT(F0.combine(x.run, y.run))
}
-private[data] sealed trait WriterTMonoid[F[_], L, A] extends Monoid[WriterT[F, L, A]] with WriterTSemigroup[F, L, A] {
- override implicit def F0: Monoid[F[(L, A)]]
+sealed private[data] trait WriterTMonoid[F[_], L, A] extends Monoid[WriterT[F, L, A]] with WriterTSemigroup[F, L, A] {
+ implicit override def F0: Monoid[F[(L, A)]]
def empty: WriterT[F, L, A] = WriterT(F0.empty)
}
-private[data] sealed trait WriterTCoflatMap[F[_], L] extends CoflatMap[WriterT[F, L, ?]] with WriterTFunctor[F, L] {
+sealed private[data] trait WriterTCoflatMap[F[_], L] extends CoflatMap[WriterT[F, L, ?]] with WriterTFunctor[F, L] {
def coflatMap[A, B](fa: WriterT[F, L, A])(f: WriterT[F, L, A] => B): WriterT[F, L, B] = fa.map(_ => f(fa))
}
-private[data] sealed trait WriterTFoldable[F[_], L] extends Foldable[WriterT[F, L, ?]] {
+sealed private[data] trait WriterTFoldable[F[_], L] extends Foldable[WriterT[F, L, ?]] {
implicit def F0: Foldable[F]
@@ -479,16 +507,19 @@ private[data] sealed trait WriterTFoldable[F[_], L] extends Foldable[WriterT[F,
def foldRight[A, B](fa: WriterT[F, L, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] = fa.foldRight(lb)(f)
}
-private[data] sealed trait WriterTTraverse[F[_], L] extends Traverse[WriterT[F, L, ?]] with WriterTFoldable[F, L] with WriterTFunctor[F, L] {
+sealed private[data] trait WriterTTraverse[F[_], L]
+ extends Traverse[WriterT[F, L, ?]]
+ with WriterTFoldable[F, L]
+ with WriterTFunctor[F, L] {
- override implicit def F0: Traverse[F]
+ implicit override def F0: Traverse[F]
def traverse[G[_]: Applicative, A, B](fa: WriterT[F, L, A])(f: A => G[B]): G[WriterT[F, L, B]] = fa.traverse(f)
}
-private[data] sealed trait WriterTComonad[F[_], L] extends Comonad[WriterT[F, L, ?]] with WriterTCoflatMap[F, L] {
+sealed private[data] trait WriterTComonad[F[_], L] extends Comonad[WriterT[F, L, ?]] with WriterTCoflatMap[F, L] {
- override implicit def F0: Comonad[F]
+ implicit override def F0: Comonad[F]
def extract[A](fa: WriterT[F, L, A]): A = F0.extract(F0.map(fa.run)(_._2))
}
diff --git a/core/src/main/scala/cats/data/ZipList.scala b/core/src/main/scala/cats/data/ZipList.scala
index 603ab1acdb..8bca9d7d31 100644
--- a/core/src/main/scala/cats/data/ZipList.scala
+++ b/core/src/main/scala/cats/data/ZipList.scala
@@ -15,7 +15,7 @@ object ZipList {
ZipList(fa.value.map(f))
def ap[A, B](ff: ZipList[A => B])(fa: ZipList[A]): ZipList[B] =
- ZipList((ff.value, fa.value).zipped.map(_ apply _))
+ ZipList((ff.value, fa.value).zipped.map(_.apply(_)))
override def product[A, B](fa: ZipList[A], fb: ZipList[B]): ZipList[(A, B)] =
ZipList(fa.value.zip(fb.value))
diff --git a/core/src/main/scala/cats/data/ZipStream.scala b/core/src/main/scala/cats/data/ZipStream.scala
index 9c3861a828..775d870a58 100644
--- a/core/src/main/scala/cats/data/ZipStream.scala
+++ b/core/src/main/scala/cats/data/ZipStream.scala
@@ -17,7 +17,7 @@ object ZipStream {
ZipStream(fa.value.map(f))
def ap[A, B](ff: ZipStream[A => B])(fa: ZipStream[A]): ZipStream[B] =
- ZipStream((ff.value, fa.value).zipped.map(_ apply _))
+ ZipStream((ff.value, fa.value).zipped.map(_.apply(_)))
override def product[A, B](fa: ZipStream[A], fb: ZipStream[B]): ZipStream[(A, B)] =
ZipStream(fa.value.zip(fb.value))
diff --git a/core/src/main/scala/cats/data/ZipVector.scala b/core/src/main/scala/cats/data/ZipVector.scala
index 74a0529adb..02153b4973 100644
--- a/core/src/main/scala/cats/data/ZipVector.scala
+++ b/core/src/main/scala/cats/data/ZipVector.scala
@@ -14,7 +14,7 @@ object ZipVector {
override def map[A, B](fa: ZipVector[A])(f: (A) => B): ZipVector[B] =
ZipVector(fa.value.map(f))
def ap[A, B](ff: ZipVector[A => B])(fa: ZipVector[A]): ZipVector[B] =
- ZipVector((ff.value, fa.value).zipped.map(_ apply _))
+ ZipVector((ff.value, fa.value).zipped.map(_.apply(_)))
}
diff --git a/core/src/main/scala/cats/data/package.scala b/core/src/main/scala/cats/data/package.scala
index d60fa9756a..518be35a49 100644
--- a/core/src/main/scala/cats/data/package.scala
+++ b/core/src/main/scala/cats/data/package.scala
@@ -16,7 +16,6 @@ package object data {
def NonEmptyStream[A](head: A, tail: A*): NonEmptyStream[A] =
OneAnd(head, tail.toStream)
-
type NonEmptyMap[K, +A] = NonEmptyMapImpl.Type[K, A]
val NonEmptyMap = NonEmptyMapImpl
@@ -39,7 +38,7 @@ package object data {
object Writer {
def apply[L, V](l: L, v: V): WriterT[Id, L, V] = WriterT[Id, L, V]((l, v))
- def value[L:Monoid, V](v: V): Writer[L, V] = WriterT.value(v)
+ def value[L: Monoid, V](v: V): Writer[L, V] = WriterT.value(v)
def tell[L](l: L): Writer[L, Unit] = WriterT.tell(l)
}
diff --git a/core/src/main/scala/cats/evidence/As.scala b/core/src/main/scala/cats/evidence/As.scala
index 13a4334b23..0b3ece56ef 100644
--- a/core/src/main/scala/cats/evidence/As.scala
+++ b/core/src/main/scala/cats/evidence/As.scala
@@ -20,13 +20,14 @@ import arrow.Category
* The original contribution to scalaz came from Jason Zaugg
*/
sealed abstract class As[-A, +B] extends Serializable {
+
/**
* Use this subtyping relationship to replace B with a value of type
* A in a contravariant context. This would commonly be the input
* to a function, such as F in: `type F[-B] = B => String`. In this
* case, we could use A As B to turn an F[B] Into F[A].
*/
- def substitute[F[-_]](p: F[B]): F[A]
+ def substitute[F[- _]](p: F[B]): F[A]
@inline final def andThen[C](that: (B As C)): (A As C) = As.compose(that, this)
@@ -44,18 +45,20 @@ sealed abstract class AsInstances {
implicit val liskov: Category[As] = new Category[As] {
def id[A]: (A As A) = refl[A]
- def compose[A, B, C](bc: B As C, ab: A As B): (A As C) = bc compose ab
+ def compose[A, B, C](bc: B As C, ab: A As B): (A As C) = bc.compose(ab)
}
}
object As extends AsInstances {
+
/**
* In truth, "all values of `A Is B` are `refl`". `reflAny` is that
* single value.
*/
private[this] val reflAny = new (Any As Any) {
- def substitute[F[-_]](fa: F[Any]) = fa
+ def substitute[F[- _]](fa: F[Any]) = fa
}
+
/**
* Subtyping is reflexive
*/
@@ -80,41 +83,41 @@ object As extends AsInstances {
@inline def reify[A, B >: A]: (A As B) = refl
/**
- * It can be convenient to convert a <:< value into a `<~<` value.
- * This is not strictly valid as while it is almost certainly true that
- * `A <:< B` implies `A <~< B` it is not the case that you can create
- * evidence of `A <~< B` except via a coercion. Use responsibly.
- */
+ * It can be convenient to convert a <:< value into a `<~<` value.
+ * This is not strictly valid as while it is almost certainly true that
+ * `A <:< B` implies `A <~< B` it is not the case that you can create
+ * evidence of `A <~< B` except via a coercion. Use responsibly.
+ */
def fromPredef[A, B](eq: A <:< B): A As B =
reflAny.asInstanceOf[A As B]
/**
* We can lift subtyping into any covariant type constructor
*/
- def co[T[+_], A, A2] (a: A As A2): (T[A] As T[A2]) =
+ def co[T[+ _], A, A2](a: A As A2): (T[A] As T[A2]) =
a.substitute[λ[`-α` => T[α] As T[A2]]](refl)
// Similarly, we can do this any time we find a covariant type
// parameter. Here we provide the proof for what we expect to be the
// most common shapes.
- def co2[T[+_, _], Z, A, B](a: A As Z): T[A, B] As T[Z, B] =
+ def co2[T[+ _, _], Z, A, B](a: A As Z): T[A, B] As T[Z, B] =
a.substitute[λ[`-α` => T[α, B] As T[Z, B]]](refl)
/**
* Widen a F[X,+A] to a F[X,B] if (A As B). This can be used to widen
* the output of a Function1, for example.
*/
- def co2_2[T[_, +_], Z, A, B](a: B As Z): T[A, B] As T[A, Z] =
+ def co2_2[T[_, + _], Z, A, B](a: B As Z): T[A, B] As T[A, Z] =
a.substitute[λ[`-α` => T[A, α] As T[A, Z]]](refl)
- def co3[T[+_, _, _], Z, A, B, C](a: A As Z): T[A, B, C] As T[Z, B, C] =
+ def co3[T[+ _, _, _], Z, A, B, C](a: A As Z): T[A, B, C] As T[Z, B, C] =
a.substitute[λ[`-α` => T[α, B, C] As T[Z, B, C]]](refl)
- def co3_2[T[_, +_, _], Z, A, B, C](a: B As Z): T[A, B, C] As T[A, Z, C] =
+ def co3_2[T[_, + _, _], Z, A, B, C](a: B As Z): T[A, B, C] As T[A, Z, C] =
a.substitute[λ[`-α` => T[A, α, C] As T[A, Z, C]]](refl)
- def co3_3[T[+_, _, +_], Z, A, B, C](a: C As Z): T[A, B, C] As T[A, B, Z] =
+ def co3_3[T[+ _, _, + _], Z, A, B, C](a: C As Z): T[A, B, C] As T[A, B, Z] =
a.substitute[λ[`-α` => T[A, B, α] As T[A, B, Z]]](refl)
/**
@@ -128,7 +131,7 @@ object As extends AsInstances {
*
* lift2(a,b) = co1_2(a) compose co2_2(b)
*/
- def lift2[T[+_, +_], A, A2, B, B2](
+ def lift2[T[+ _, + _], A, A2, B, B2](
a: A As A2,
b: B As B2
): (T[A, B] As T[A2, B2]) = {
@@ -144,26 +147,26 @@ object As extends AsInstances {
* Given that F has the shape: F[-_], we show that:
* (A As B) implies (F[B] As F[A])
*/
- def contra[T[-_], A, B](a: A As B): (T[B] As T[A]) =
+ def contra[T[- _], A, B](a: A As B): (T[B] As T[A]) =
a.substitute[λ[`-α` => T[B] As T[α]]](refl)
// Similarly, we can do this any time we find a contravariant type
// parameter. Here we provide the proof for what we expect to be the
// most common shapes.
- def contra1_2[T[-_, _], Z, A, B](a: A As Z): (T[Z, B] As T[A, B]) =
+ def contra1_2[T[- _, _], Z, A, B](a: A As Z): (T[Z, B] As T[A, B]) =
a.substitute[λ[`-α` => T[Z, B] As T[α, B]]](refl)
- def contra2_2[T[_, -_], Z, A, B](a: B As Z): (T[A, Z] As T[A, B]) =
+ def contra2_2[T[_, - _], Z, A, B](a: B As Z): (T[A, Z] As T[A, B]) =
a.substitute[λ[`-α` => T[A, Z] As T[A, α]]](refl)
- def contra1_3[T[-_, _, _], Z, A, B, C](a: A As Z): (T[Z, B, C] As T[A, B, C]) =
+ def contra1_3[T[- _, _, _], Z, A, B, C](a: A As Z): (T[Z, B, C] As T[A, B, C]) =
a.substitute[λ[`-α` => T[Z, B, C] As T[α, B, C]]](refl)
- def contra2_3[T[_, -_, _], Z, A, B, C](a: B As Z): (T[A, Z, C] As T[A, B, C]) =
+ def contra2_3[T[_, - _, _], Z, A, B, C](a: B As Z): (T[A, Z, C] As T[A, B, C]) =
a.substitute[λ[`-α` => T[A, Z, C] As T[A, α, C]]](refl)
- def contra3_3[T[_, _, -_], Z, A, B, C](a: C As Z): (T[A, B, Z] As T[A, B, C]) =
+ def contra3_3[T[_, _, - _], Z, A, B, C](a: C As Z): (T[A, B, Z] As T[A, B, C]) =
a.substitute[λ[`-α` => T[A, B, Z] As T[A, B, α]]](refl)
/**
diff --git a/core/src/main/scala/cats/evidence/Is.scala b/core/src/main/scala/cats/evidence/Is.scala
index e27c782524..d9b2a9c1f1 100644
--- a/core/src/main/scala/cats/evidence/Is.scala
+++ b/core/src/main/scala/cats/evidence/Is.scala
@@ -22,31 +22,31 @@ abstract class Is[A, B] extends Serializable {
def substitute[F[_]](fa: F[A]): F[B]
/**
- * `Is` is transitive and therefore values of `Is` can be composed in a
- * chain much like functions. See also `compose`.
- */
+ * `Is` is transitive and therefore values of `Is` can be composed in a
+ * chain much like functions. See also `compose`.
+ */
@inline final def andThen[C](next: B Is C): A Is C =
next.substitute[A Is ?](this)
/**
- * `Is` is transitive and therefore values of `Is` can be composed in a
- * chain much like functions. See also `andThen`.
- */
+ * `Is` is transitive and therefore values of `Is` can be composed in a
+ * chain much like functions. See also `andThen`.
+ */
@inline final def compose[C](prev: C Is A): C Is B =
- prev andThen this
+ prev.andThen(this)
/**
- * `Is` is symmetric and therefore can be flipped around. Flipping is its
- * own inverse, so `x.flip.flip == x`.
- */
+ * `Is` is symmetric and therefore can be flipped around. Flipping is its
+ * own inverse, so `x.flip.flip == x`.
+ */
@inline final def flip: B Is A =
this.substitute[? Is A](Is.refl)
/**
- * Sometimes for more complex substitutions it helps the typechecker to
- * wrap one layer of `F[_]` context around the types you're equating
- * before substitution.
- */
+ * Sometimes for more complex substitutions it helps the typechecker to
+ * wrap one layer of `F[_]` context around the types you're equating
+ * before substitution.
+ */
@inline final def lift[F[_]]: F[A] Is F[B] =
substitute[λ[α => F[A] Is F[α]]](Is.refl)
@@ -58,9 +58,9 @@ abstract class Is[A, B] extends Serializable {
substitute[Id](a)
/**
- * A value `A Is B` is always sufficient to produce a similar `Predef.=:=`
- * value.
- */
+ * A value `A Is B` is always sufficient to produce a similar `Predef.=:=`
+ * value.
+ */
@inline final def predefEq: A =:= B =
substitute[A =:= ?](implicitly[A =:= A])
}
@@ -97,4 +97,3 @@ object Is {
reflAny.asInstanceOf[A Is B]
}
-
diff --git a/core/src/main/scala/cats/evidence/package.scala b/core/src/main/scala/cats/evidence/package.scala
index becac9b56e..bd428361ae 100644
--- a/core/src/main/scala/cats/evidence/package.scala
+++ b/core/src/main/scala/cats/evidence/package.scala
@@ -1,6 +1,7 @@
package cats
package object evidence {
+
/**
* A convenient type alias for Is, which declares that A is the same
* type as B.
diff --git a/core/src/main/scala/cats/instances/all.scala b/core/src/main/scala/cats/instances/all.scala
index f270ec61f2..3cc7339d9d 100644
--- a/core/src/main/scala/cats/instances/all.scala
+++ b/core/src/main/scala/cats/instances/all.scala
@@ -2,40 +2,38 @@ package cats
package instances
trait AllInstances
- extends AnyValInstances
- with BigIntInstances
- with BigDecimalInstances
- with BitSetInstances
- with EitherInstances
- with EqInstances
- with EquivInstances
- with FunctionInstances
- with FutureInstances
- with HashInstances
- with InvariantMonoidalInstances
- with ListInstances
- with MapInstances
- with OptionInstances
- with OrderInstances
- with OrderingInstances
- with ParallelInstances
- with PartialOrderInstances
- with PartialOrderingInstances
- with QueueInstances
- with SetInstances
- with SortedMapInstances
- with SortedSetInstances
- with StreamInstances
- with StringInstances
- with SymbolInstances
- with TryInstances
- with TupleInstances
- with UUIDInstances
- with VectorInstances
+ extends AnyValInstances
+ with BigIntInstances
+ with BigDecimalInstances
+ with BitSetInstances
+ with EitherInstances
+ with EqInstances
+ with EquivInstances
+ with FunctionInstances
+ with FutureInstances
+ with HashInstances
+ with InvariantMonoidalInstances
+ with ListInstances
+ with MapInstances
+ with OptionInstances
+ with OrderInstances
+ with OrderingInstances
+ with ParallelInstances
+ with PartialOrderInstances
+ with PartialOrderingInstances
+ with QueueInstances
+ with SetInstances
+ with SortedMapInstances
+ with SortedSetInstances
+ with StreamInstances
+ with StringInstances
+ with SymbolInstances
+ with TryInstances
+ with TupleInstances
+ with UUIDInstances
+ with VectorInstances
-trait AllInstancesBinCompat0
- extends FunctionInstancesBinCompat0
- with Tuple2InstancesBinCompat0
+trait AllInstancesBinCompat0 extends FunctionInstancesBinCompat0 with Tuple2InstancesBinCompat0
trait AllInstancesBinCompat1
extends OptionInstancesBinCompat0
@@ -45,6 +43,4 @@ trait AllInstancesBinCompat1
with MapInstancesBinCompat0
with SortedMapInstancesBinCompat0
-trait AllInstancesBinCompat2
- extends DurationInstances
- with FiniteDurationInstances
+trait AllInstancesBinCompat2 extends DurationInstances with FiniteDurationInstances
diff --git a/core/src/main/scala/cats/instances/anyval.scala b/core/src/main/scala/cats/instances/anyval.scala
index 05060c3da9..8f8827738f 100644
--- a/core/src/main/scala/cats/instances/anyval.scala
+++ b/core/src/main/scala/cats/instances/anyval.scala
@@ -2,16 +2,16 @@ package cats
package instances
trait AnyValInstances
- extends IntInstances
- with ByteInstances
- with CharInstances
- with LongInstances
- with ShortInstances
- with FloatInstances
- with DoubleInstances
- with BooleanInstances
- with UnitInstances
- with TupleInstances
+ extends IntInstances
+ with ByteInstances
+ with CharInstances
+ with LongInstances
+ with ShortInstances
+ with FloatInstances
+ with DoubleInstances
+ with BooleanInstances
+ with UnitInstances
+ with TupleInstances
trait IntInstances extends cats.kernel.instances.IntInstances {
implicit val catsStdShowForInt: Show[Int] = Show.fromToString[Int]
diff --git a/core/src/main/scala/cats/instances/either.scala b/core/src/main/scala/cats/instances/either.scala
index c5adfab099..79ae373c68 100644
--- a/core/src/main/scala/cats/instances/either.scala
+++ b/core/src/main/scala/cats/instances/either.scala
@@ -8,21 +8,23 @@ import scala.annotation.tailrec
trait EitherInstances extends cats.kernel.instances.EitherInstances {
implicit val catsStdBitraverseForEither: Bitraverse[Either] =
new Bitraverse[Either] {
- def bitraverse[G[_], A, B, C, D](fab: Either[A, B])(f: A => G[C], g: B => G[D])(implicit G: Applicative[G]): G[Either[C, D]] =
+ def bitraverse[G[_], A, B, C, D](fab: Either[A, B])(f: A => G[C],
+ g: B => G[D])(implicit G: Applicative[G]): G[Either[C, D]] =
fab match {
- case Left(a) => G.map(f(a))(Left(_))
+ case Left(a) => G.map(f(a))(Left(_))
case Right(b) => G.map(g(b))(Right(_))
}
def bifoldLeft[A, B, C](fab: Either[A, B], c: C)(f: (C, A) => C, g: (C, B) => C): C =
fab match {
- case Left(a) => f(c, a)
+ case Left(a) => f(c, a)
case Right(b) => g(c, b)
}
- def bifoldRight[A, B, C](fab: Either[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ def bifoldRight[A, B, C](fab: Either[A, B], c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
fab match {
- case Left(a) => f(a, c)
+ case Left(a) => f(a, c)
case Right(b) => g(b, c)
}
}
@@ -37,7 +39,7 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
def handleErrorWith[B](fea: Either[A, B])(f: A => Either[A, B]): Either[A, B] =
fea match {
- case Left(e) => f(e)
+ case Left(e) => f(e)
case r @ Right(_) => r
}
@@ -53,7 +55,7 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
left.rightCast[C]
case Right(e) =>
e match {
- case Left(b1) => tailRecM(b1)(f)
+ case Left(b1) => tailRecM(b1)(f)
case right @ Right(_) => right.leftCast[A]
}
}
@@ -61,7 +63,7 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
override def map2Eval[B, C, Z](fb: Either[A, B], fc: Eval[Either[A, C]])(f: (B, C) => Z): Eval[Either[A, Z]] =
fb match {
case l @ Left(_) => Now(EitherUtil.rightCast(l))
- case Right(b) => fc.map(_.right.map(f(b, _)))
+ case Right(b) => fc.map(_.right.map(f(b, _)))
}
def traverse[F[_], B, C](fa: Either[A, B])(f: B => F[C])(implicit F: Applicative[F]): F[Either[A, C]] =
@@ -72,13 +74,13 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
def foldLeft[B, C](fa: Either[A, B], c: C)(f: (C, B) => C): C =
fa match {
- case Left(_) => c
+ case Left(_) => c
case Right(b) => f(c, b)
}
def foldRight[B, C](fa: Either[A, B], lc: Eval[C])(f: (B, Eval[C]) => Eval[C]): Eval[C] =
fa match {
- case Left(_) => lc
+ case Left(_) => lc
case Right(b) => f(b, lc)
}
@@ -86,10 +88,10 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
Right(fab)
override def recover[B](fab: Either[A, B])(pf: PartialFunction[A, B]): Either[A, B] =
- fab recover pf
+ fab.recover(pf)
override def recoverWith[B](fab: Either[A, B])(pf: PartialFunction[A, Either[A, B]]): Either[A, B] =
- fab recoverWith pf
+ fab.recoverWith(pf)
override def fromEither[B](fab: Either[A, B]): Either[A, B] =
fab
@@ -103,7 +105,9 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
override def reduceLeftToOption[B, C](fab: Either[A, B])(f: B => C)(g: (C, B) => C): Option[C] =
fab.right.map(f).toOption
- override def reduceRightToOption[B, C](fab: Either[A, B])(f: B => C)(g: (B, Eval[C]) => Eval[C]): Eval[Option[C]] =
+ override def reduceRightToOption[B, C](
+ fab: Either[A, B]
+ )(f: B => C)(g: (B, Eval[C]) => Eval[C]): Eval[Option[C]] =
Now(fab.right.map(f).toOption)
override def reduceLeftOption[B](fab: Either[A, B])(f: (B, B) => B): Option[B] =
@@ -141,7 +145,7 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
implicit def catsStdSemigroupKForEither[L]: SemigroupK[Either[L, ?]] =
new SemigroupK[Either[L, ?]] {
def combineK[A](x: Either[L, A], y: Either[L, A]): Either[L, A] = x match {
- case Left(_) => y
+ case Left(_) => y
case Right(_) => x
}
}
@@ -150,7 +154,7 @@ trait EitherInstances extends cats.kernel.instances.EitherInstances {
new Show[Either[A, B]] {
def show(x: Either[A, B]): String =
x match {
- case Left(a) => "Left(" + A.show(a) + ")"
+ case Left(a) => "Left(" + A.show(a) + ")"
case Right(b) => "Right(" + B.show(b) + ")"
}
}
diff --git a/core/src/main/scala/cats/instances/eq.scala b/core/src/main/scala/cats/instances/eq.scala
index 310975db7e..5140bca36f 100644
--- a/core/src/main/scala/cats/instances/eq.scala
+++ b/core/src/main/scala/cats/instances/eq.scala
@@ -4,6 +4,7 @@ package instances
trait EqInstances extends kernel.instances.EqInstances {
implicit val catsContravariantMonoidalForEq: ContravariantMonoidal[Eq] =
new ContravariantMonoidal[Eq] {
+
/**
* Defaults to the trivial equivalence relation
* contracting the type to a point
diff --git a/core/src/main/scala/cats/instances/equiv.scala b/core/src/main/scala/cats/instances/equiv.scala
index 6ae653cf98..d441bf5d61 100644
--- a/core/src/main/scala/cats/instances/equiv.scala
+++ b/core/src/main/scala/cats/instances/equiv.scala
@@ -4,6 +4,7 @@ package instances
trait EquivInstances {
implicit val catsContravariantMonoidalForEquiv: ContravariantMonoidal[Equiv] =
new ContravariantMonoidal[Equiv] {
+
/**
* Defaults to trivially contracting the type
* to a point
diff --git a/core/src/main/scala/cats/instances/function.scala b/core/src/main/scala/cats/instances/function.scala
index 7cbfa937a8..b5ba248e79 100644
--- a/core/src/main/scala/cats/instances/function.scala
+++ b/core/src/main/scala/cats/instances/function.scala
@@ -2,24 +2,24 @@ package cats
package instances
import cats.Contravariant
-import cats.arrow.{Category, ArrowChoice, CommutativeArrow}
+import cats.arrow.{ArrowChoice, Category, CommutativeArrow}
import annotation.tailrec
-
-trait FunctionInstances extends cats.kernel.instances.FunctionInstances
- with Function0Instances with Function1Instances
+trait FunctionInstances extends cats.kernel.instances.FunctionInstances with Function0Instances with Function1Instances
trait FunctionInstancesBinCompat0 {
+
/**
* Witness for: E => A <-> E => A
*/
- implicit def catsStdRepresentableForFunction1[E](implicit EF: Functor[E => ?]): Representable.Aux[E => ?, E] = new Representable[E => ?] {
- override type Representation = E
- override val F: Functor[E => ?] = EF
- override def tabulate[A](f: E => A): E => A = f
- override def index[A](f: E => A): E => A = f
- }
+ implicit def catsStdRepresentableForFunction1[E](implicit EF: Functor[E => ?]): Representable.Aux[E => ?, E] =
+ new Representable[E => ?] {
+ override type Representation = E
+ override val F: Functor[E => ?] = EF
+ override def tabulate[A](f: E => A): E => A = f
+ override def index[A](f: E => A): E => A = f
+ }
implicit val catsSddDeferForFunction0: Defer[Function0] =
new Defer[Function0] {
@@ -29,7 +29,7 @@ trait FunctionInstancesBinCompat0 {
def loop(f: () => Function0[A]): A =
f() match {
case Deferred(f) => loop(f)
- case next => next()
+ case next => next()
}
loop(fa)
}
@@ -48,7 +48,7 @@ trait FunctionInstancesBinCompat0 {
def loop(f: () => A => B): B =
f() match {
case Deferred(f) => loop(f)
- case next => next(a)
+ case next => next(a)
}
loop(fa)
}
@@ -60,7 +60,7 @@ trait FunctionInstancesBinCompat0 {
}
}
-private[instances] sealed trait Function0Instances extends Function0Instances0 {
+sealed private[instances] trait Function0Instances extends Function0Instances0 {
implicit val catsStdBimonadForFunction0: Bimonad[Function0] =
new Bimonad[Function0] {
def extract[A](x: () => A): A = x()
@@ -77,7 +77,7 @@ private[instances] sealed trait Function0Instances extends Function0Instances0 {
() => {
@tailrec
def loop(thisA: A): B = fn(thisA)() match {
- case Right(b) => b
+ case Right(b) => b
case Left(nextA) => loop(nextA)
}
loop(a)
@@ -86,23 +86,26 @@ private[instances] sealed trait Function0Instances extends Function0Instances0 {
}
-private[instances] sealed trait Function0Instances0 {
- implicit def function0Distributive: Distributive[Function0] = new Distributive[Function0] {
- def distribute[F[_]: Functor, A, B](fa: F[A])(f: A => Function0[B]): Function0[F[B]] = {() => Functor[F].map(fa)(a => f(a)()) }
+sealed private[instances] trait Function0Instances0 {
+ implicit def function0Distributive: Distributive[Function0] = new Distributive[Function0] {
+ def distribute[F[_]: Functor, A, B](fa: F[A])(f: A => Function0[B]): Function0[F[B]] = { () =>
+ Functor[F].map(fa)(a => f(a)())
+ }
def map[A, B](fa: Function0[A])(f: A => B): Function0[B] = () => f(fa())
}
}
-private[instances] sealed trait Function1Instances extends Function1Instances0 {
+sealed private[instances] trait Function1Instances extends Function1Instances0 {
implicit def catsStdContravariantMonoidalForFunction1[R: Monoid]: ContravariantMonoidal[? => R] =
new ContravariantMonoidal[? => R] {
def unit: Unit => R = Function.const(Monoid[R].empty)
def contramap[A, B](fa: A => R)(f: B => A): B => R =
- fa compose f
+ fa.compose(f)
def product[A, B](fa: A => R, fb: B => R): ((A, B)) => R =
- (ab: (A, B)) => ab match {
- case (a, b) => Monoid[R].combine(fa(a), fb(b))
+ (ab: (A, B)) =>
+ ab match {
+ case (a, b) => Monoid[R].combine(fa(a), fb(b))
}
}
@@ -120,7 +123,7 @@ private[instances] sealed trait Function1Instances extends Function1Instances0 {
(t: T1) => {
@tailrec
def step(thisA: A): B = fn(thisA)(t) match {
- case Right(b) => b
+ case Right(b) => b
case Left(nextA) => step(nextA)
}
step(a)
@@ -131,7 +134,7 @@ private[instances] sealed trait Function1Instances extends Function1Instances0 {
new ArrowChoice[Function1] with CommutativeArrow[Function1] {
def choose[A, B, C, D](f: A => C)(g: B => D): Either[A, B] => Either[C, D] =
_ match {
- case Left(a) => Left(f(a))
+ case Left(a) => Left(f(a))
case Right(b) => Right(g(b))
}
@@ -151,10 +154,9 @@ private[instances] sealed trait Function1Instances extends Function1Instances0 {
implicit val catsStdMonoidKForFunction1: MonoidK[Endo] =
Category[Function1].algebraK
-
}
-private[instances] sealed trait Function1Instances0 {
+sealed private[instances] trait Function1Instances0 {
implicit def catsStdContravariantForFunction1[R]: Contravariant[? => R] =
new Contravariant[? => R] {
def contramap[T1, T0](fa: T1 => R)(f: T0 => T1): T0 => R =
@@ -162,8 +164,12 @@ private[instances] sealed trait Function1Instances0 {
}
implicit def catsStdDistributiveForFunction1[T1]: Distributive[T1 => ?] = new Distributive[T1 => ?] {
- def distribute[F[_]: Functor, A, B](fa: F[A])(f: A => (T1 => B)): T1 => F[B] = {t1 => Functor[F].map(fa)(a => f(a)(t1)) }
+ def distribute[F[_]: Functor, A, B](fa: F[A])(f: A => (T1 => B)): T1 => F[B] = { t1 =>
+ Functor[F].map(fa)(a => f(a)(t1))
+ }
- def map[A, B](fa: T1 => A)(f: A => B): T1 => B = {t1 => f(fa(t1))}
+ def map[A, B](fa: T1 => A)(f: A => B): T1 => B = { t1 =>
+ f(fa(t1))
+ }
}
}
diff --git a/core/src/main/scala/cats/instances/future.scala b/core/src/main/scala/cats/instances/future.scala
index 2c62956816..0518529ed0 100644
--- a/core/src/main/scala/cats/instances/future.scala
+++ b/core/src/main/scala/cats/instances/future.scala
@@ -6,7 +6,9 @@ import scala.concurrent.{ExecutionContext, Future}
trait FutureInstances extends FutureInstances1 {
- implicit def catsStdInstancesForFuture(implicit ec: ExecutionContext): MonadError[Future, Throwable] with CoflatMap[Future] with Monad[Future] =
+ implicit def catsStdInstancesForFuture(
+ implicit ec: ExecutionContext
+ ): MonadError[Future, Throwable] with CoflatMap[Future] with Monad[Future] =
new FutureCoflatMap with MonadError[Future, Throwable] with Monad[Future] with StackSafeMonad[Future] {
def pure[A](x: A): Future[A] = Future.successful(x)
@@ -18,11 +20,12 @@ trait FutureInstances extends FutureInstances1 {
override def handleError[A](fea: Future[A])(f: Throwable => A): Future[A] = fea.recover { case t => f(t) }
override def attempt[A](fa: Future[A]): Future[Either[Throwable, A]] =
- (fa.map(a => Right[Throwable, A](a))) recover { case NonFatal(t) => Left(t) }
+ (fa.map(a => Right[Throwable, A](a))).recover { case NonFatal(t) => Left(t) }
override def recover[A](fa: Future[A])(pf: PartialFunction[Throwable, A]): Future[A] = fa.recover(pf)
- override def recoverWith[A](fa: Future[A])(pf: PartialFunction[Throwable, Future[A]]): Future[A] = fa.recoverWith(pf)
+ override def recoverWith[A](fa: Future[A])(pf: PartialFunction[Throwable, Future[A]]): Future[A] =
+ fa.recoverWith(pf)
override def map[A, B](fa: Future[A])(f: A => B): Future[B] = fa.map(f)
@@ -32,23 +35,23 @@ trait FutureInstances extends FutureInstances1 {
}
}
-private[instances] sealed trait FutureInstances1 extends FutureInstances2 {
+sealed private[instances] trait FutureInstances1 extends FutureInstances2 {
implicit def catsStdMonoidForFuture[A: Monoid](implicit ec: ExecutionContext): Monoid[Future[A]] =
new FutureMonoid[A]
}
-private[instances] sealed trait FutureInstances2 {
+sealed private[instances] trait FutureInstances2 {
implicit def catsStdSemigroupForFuture[A: Semigroup](implicit ec: ExecutionContext): Semigroup[Future[A]] =
new FutureSemigroup[A]
}
-private[cats] abstract class FutureCoflatMap(implicit ec: ExecutionContext) extends CoflatMap[Future] {
+abstract private[cats] class FutureCoflatMap(implicit ec: ExecutionContext) extends CoflatMap[Future] {
def map[A, B](fa: Future[A])(f: A => B): Future[B] = fa.map(f)
def coflatMap[A, B](fa: Future[A])(f: Future[A] => B): Future[B] = Future(f(fa))
}
private[cats] class FutureSemigroup[A: Semigroup](implicit ec: ExecutionContext)
- extends ApplySemigroup[Future, A](future.catsStdInstancesForFuture, implicitly)
+ extends ApplySemigroup[Future, A](future.catsStdInstancesForFuture, implicitly)
private[cats] class FutureMonoid[A](implicit A: Monoid[A], ec: ExecutionContext)
- extends ApplicativeMonoid[Future, A](future.catsStdInstancesForFuture, implicitly)
+ extends ApplicativeMonoid[Future, A](future.catsStdInstancesForFuture, implicitly)
diff --git a/core/src/main/scala/cats/instances/hash.scala b/core/src/main/scala/cats/instances/hash.scala
index 2401313148..5b55765823 100644
--- a/core/src/main/scala/cats/instances/hash.scala
+++ b/core/src/main/scala/cats/instances/hash.scala
@@ -1,11 +1,11 @@
package cats
package instances
-
trait HashInstances extends kernel.instances.HashInstances {
implicit val catsContravariantForHash: Contravariant[Hash] =
new Contravariant[Hash] {
+
/**
* Derive a `Hash` for `B` given an `Hash[A]` and a function `B => A`.
*/
diff --git a/core/src/main/scala/cats/instances/invariant.scala b/core/src/main/scala/cats/instances/invariant.scala
index e683941543..0479941cb1 100644
--- a/core/src/main/scala/cats/instances/invariant.scala
+++ b/core/src/main/scala/cats/instances/invariant.scala
@@ -2,7 +2,7 @@ package cats.instances
import cats.kernel._
import cats.kernel.instances.unit._
-import cats.{InvariantMonoidal, Monoid, InvariantSemigroupal}
+import cats.{InvariantMonoidal, InvariantSemigroupal, Monoid}
trait InvariantMonoidalInstances {
@@ -31,16 +31,19 @@ trait InvariantMonoidalInstances {
def unit: Semigroup[Unit] = implicitly
}
- implicit val catsInvariantMonoidalCommutativeSemigroup: InvariantMonoidal[CommutativeSemigroup] = new InvariantMonoidal[CommutativeSemigroup] {
- def product[A, B](fa: CommutativeSemigroup[A], fb: CommutativeSemigroup[B]): CommutativeSemigroup[(A, B)] = new CommutativeSemigroup[(A, B)] {
- def combine(x: (A, B), y: (A, B)): (A, B) = fa.combine(x._1, y._1) -> fb.combine(x._2, y._2)
- }
+ implicit val catsInvariantMonoidalCommutativeSemigroup: InvariantMonoidal[CommutativeSemigroup] =
+ new InvariantMonoidal[CommutativeSemigroup] {
+ def product[A, B](fa: CommutativeSemigroup[A], fb: CommutativeSemigroup[B]): CommutativeSemigroup[(A, B)] =
+ new CommutativeSemigroup[(A, B)] {
+ def combine(x: (A, B), y: (A, B)): (A, B) = fa.combine(x._1, y._1) -> fb.combine(x._2, y._2)
+ }
- def imap[A, B](fa: CommutativeSemigroup[A])(f: A => B)(g: B => A): CommutativeSemigroup[B] = new CommutativeSemigroup[B] {
- def combine(x: B, y: B): B = f(fa.combine(g(x), g(y)))
- }
+ def imap[A, B](fa: CommutativeSemigroup[A])(f: A => B)(g: B => A): CommutativeSemigroup[B] =
+ new CommutativeSemigroup[B] {
+ def combine(x: B, y: B): B = f(fa.combine(g(x), g(y)))
+ }
- def unit: CommutativeSemigroup[Unit] = implicitly
- }
+ def unit: CommutativeSemigroup[Unit] = implicitly
+ }
}
diff --git a/core/src/main/scala/cats/instances/list.scala b/core/src/main/scala/cats/instances/list.scala
index 7ef2972a0b..eaee73b5bf 100644
--- a/core/src/main/scala/cats/instances/list.scala
+++ b/core/src/main/scala/cats/instances/list.scala
@@ -33,12 +33,13 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
def tailRecM[A, B](a: A)(f: A => List[Either[A, B]]): List[B] = {
val buf = List.newBuilder[B]
@tailrec def go(lists: List[List[Either[A, B]]]): Unit = lists match {
- case (ab :: abs) :: tail => ab match {
- case Right(b) => buf += b; go(abs :: tail)
- case Left(a) => go(f(a) :: abs :: tail)
- }
+ case (ab :: abs) :: tail =>
+ ab match {
+ case Right(b) => buf += b; go(abs :: tail)
+ case Left(a) => go(f(a) :: abs :: tail)
+ }
case Nil :: tail => go(tail)
- case Nil => ()
+ case Nil => ()
}
go(f(a) :: Nil)
buf.result
@@ -47,7 +48,7 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
def coflatMap[A, B](fa: List[A])(f: List[A] => B): List[B] = {
@tailrec def loop(buf: ListBuffer[B], as: List[A]): List[B] =
as match {
- case Nil => buf.toList
+ case Nil => buf.toList
case _ :: rest => loop(buf += f(as), rest)
}
loop(ListBuffer.empty[B], fa)
@@ -59,7 +60,7 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
def foldRight[A, B](fa: List[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] = {
def loop(as: List[A]): Eval[B] =
as match {
- case Nil => lb
+ case Nil => lb
case h :: t => f(h, Eval.defer(loop(t)))
}
Eval.defer(loop(fa))
@@ -69,7 +70,7 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
B.combineAll(fa.iterator.map(f))
def traverse[G[_], A, B](fa: List[A])(f: A => G[B])(implicit G: Applicative[G]): G[List[B]] =
- foldRight[A, G[List[B]]](fa, Always(G.pure(List.empty))){ (a, lglb) =>
+ foldRight[A, G[List[B]]](fa, Always(G.pure(List.empty))) { (a, lglb) =>
G.map2Eval(f(a), lglb)(_ :: _)
}.value
@@ -79,13 +80,16 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
override def zipWithIndex[A](fa: List[A]): List[(A, Int)] =
fa.zipWithIndex
- override def partitionEither[A, B, C](fa: List[A])
- (f: (A) => Either[B, C])
- (implicit A: Alternative[List]): (List[B], List[C]) =
- fa.foldRight((List.empty[B], List.empty[C]))((a, acc) => f(a) match {
- case Left(b) => (b :: acc._1, acc._2)
- case Right(c) => (acc._1, c :: acc._2)
- })
+ override def partitionEither[A, B, C](
+ fa: List[A]
+ )(f: (A) => Either[B, C])(implicit A: Alternative[List]): (List[B], List[C]) =
+ fa.foldRight((List.empty[B], List.empty[C]))(
+ (a, acc) =>
+ f(a) match {
+ case Left(b) => (b :: acc._1, acc._2)
+ case Right(c) => (acc._1, c :: acc._2)
+ }
+ )
@tailrec
override def get[A](fa: List[A])(idx: Long): Option[A] =
@@ -108,7 +112,10 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
override def foldM[G[_], A, B](fa: List[A], z: B)(f: (B, A) => G[B])(implicit G: Monad[G]): G[B] = {
def step(in: (List[A], B)): G[Either[(List[A], B), B]] = in match {
case (Nil, b) => G.pure(Right(b))
- case (a :: tail, b) => G.map(f(b, a)) { bnext => Left((tail, bnext)) }
+ case (a :: tail, b) =>
+ G.map(f(b, a)) { bnext =>
+ Left((tail, bnext))
+ }
}
G.tailRecM((fa, z))(step)
@@ -133,11 +140,12 @@ trait ListInstances extends cats.kernel.instances.ListInstances {
override def collectFirst[A, B](fa: List[A])(pf: PartialFunction[A, B]): Option[B] = fa.collectFirst(pf)
- override def collectFirstSome[A, B](fa: List[A])(f: A => Option[B]): Option[B] = fa.collectFirst(Function.unlift(f))
+ override def collectFirstSome[A, B](fa: List[A])(f: A => Option[B]): Option[B] =
+ fa.collectFirst(Function.unlift(f))
}
- implicit def catsStdShowForList[A:Show]: Show[List[A]] =
+ implicit def catsStdShowForList[A: Show]: Show[List[A]] =
new Show[List[A]] {
def show(fa: List[A]): String =
fa.iterator.map(_.show).mkString("List(", ", ", ")")
@@ -158,14 +166,14 @@ trait ListInstancesBinCompat0 {
def traverseFilter[G[_], A, B](fa: List[A])(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[List[B]] =
fa.foldRight(Eval.now(G.pure(List.empty[B])))(
- (x, xse) =>
- G.map2Eval(f(x), xse)((i, o) => i.fold(o)(_ :: o))
- ).value
+ (x, xse) => G.map2Eval(f(x), xse)((i, o) => i.fold(o)(_ :: o))
+ )
+ .value
override def filterA[G[_], A](fa: List[A])(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[List[A]] =
fa.foldRight(Eval.now(G.pure(List.empty[A])))(
- (x, xse) =>
- G.map2Eval(f(x), xse)((b, list) => if (b) x :: list else list)
- ).value
+ (x, xse) => G.map2Eval(f(x), xse)((b, list) => if (b) x :: list else list)
+ )
+ .value
}
}
diff --git a/core/src/main/scala/cats/instances/map.scala b/core/src/main/scala/cats/instances/map.scala
index fda0d30052..8ad14b2e98 100644
--- a/core/src/main/scala/cats/instances/map.scala
+++ b/core/src/main/scala/cats/instances/map.scala
@@ -20,11 +20,17 @@ trait MapInstances extends cats.kernel.instances.MapInstances {
implicit def catsStdInstancesForMap[K]: UnorderedTraverse[Map[K, ?]] with FlatMap[Map[K, ?]] =
new UnorderedTraverse[Map[K, ?]] with FlatMap[Map[K, ?]] {
- def unorderedTraverse[G[_], A, B](fa: Map[K, A])(f: A => G[B])(implicit G: CommutativeApplicative[G]): G[Map[K, B]] = {
+ def unorderedTraverse[G[_], A, B](
+ fa: Map[K, A]
+ )(f: A => G[B])(implicit G: CommutativeApplicative[G]): G[Map[K, B]] = {
val gba: Eval[G[Map[K, B]]] = Always(G.pure(Map.empty))
- val gbb = Foldable.iterateRight(fa, gba){ (kv, lbuf) =>
- G.map2Eval(f(kv._2), lbuf)({ (b, buf) => buf + (kv._1 -> b)})
- }.value
+ val gbb = Foldable
+ .iterateRight(fa, gba) { (kv, lbuf) =>
+ G.map2Eval(f(kv._2), lbuf)({ (b, buf) =>
+ buf + (kv._1 -> b)
+ })
+ }
+ .value
G.map(gbb)(_.toMap)
}
@@ -43,15 +49,16 @@ trait MapInstances extends cats.kernel.instances.MapInstances {
fa.flatMap { case (k, a) => ff.get(k).map(f => (k, f(a))) }
override def ap2[A, B, Z](f: Map[K, (A, B) => Z])(fa: Map[K, A], fb: Map[K, B]): Map[K, Z] =
- f.flatMap { case (k, f) =>
- for { a <- fa.get(k); b <- fb.get(k) } yield (k, f(a, b))
+ f.flatMap {
+ case (k, f) =>
+ for { a <- fa.get(k); b <- fb.get(k) } yield (k, f(a, b))
}
def flatMap[A, B](fa: Map[K, A])(f: (A) => Map[K, B]): Map[K, B] =
fa.flatMap { case (k, a) => f(a).get(k).map((k, _)) }
def unorderedFoldMap[A, B: CommutativeMonoid](fa: Map[K, A])(f: (A) => B) =
- fa.foldLeft(Monoid[B].empty){ case (b, (k, a)) => Monoid[B].combine(b, f(a)) }
+ fa.foldLeft(Monoid[B].empty) { case (b, (k, a)) => Monoid[B].combine(b, f(a)) }
def tailRecM[A, B](a: A)(f: A => Map[K, Either[A, B]]): Map[K, B] = {
val bldr = Map.newBuilder[K, B]
@@ -61,7 +68,7 @@ trait MapInstances extends cats.kernel.instances.MapInstances {
case Left(a) =>
f(a).get(k) match {
case Some(x) => descend(k, x)
- case None => ()
+ case None => ()
}
case Right(b) =>
bldr += ((k, b))
@@ -72,7 +79,6 @@ trait MapInstances extends cats.kernel.instances.MapInstances {
bldr.result
}
-
override def isEmpty[A](fa: Map[K, A]): Boolean = fa.isEmpty
override def unorderedFold[A](fa: Map[K, A])(implicit A: CommutativeMonoid[A]): A =
@@ -88,28 +94,27 @@ trait MapInstancesBinCompat0 {
implicit val catsStdComposeForMap: Compose[Map] = new Compose[Map] {
/**
- * Compose two maps `g` and `f` by using the values in `f` as keys for `g`.
- * {{{
- * scala> import cats.arrow.Compose
- * scala> import cats.implicits._
- * scala> val first = Map(1 -> "a", 2 -> "b", 3 -> "c", 4 -> "a")
- * scala> val second = Map("a" -> true, "b" -> false, "d" -> true)
- * scala> Compose[Map].compose(second, first)
- * res0: Map[Int, Boolean] = Map(1 -> true, 2 -> false, 4 -> true)
- * }}}
- */
- def compose[A, B, C](f: Map[B, C], g: Map[A, B]): Map[A, C] = {
+ * Compose two maps `g` and `f` by using the values in `f` as keys for `g`.
+ * {{{
+ * scala> import cats.arrow.Compose
+ * scala> import cats.implicits._
+ * scala> val first = Map(1 -> "a", 2 -> "b", 3 -> "c", 4 -> "a")
+ * scala> val second = Map("a" -> true, "b" -> false, "d" -> true)
+ * scala> Compose[Map].compose(second, first)
+ * res0: Map[Int, Boolean] = Map(1 -> true, 2 -> false, 4 -> true)
+ * }}}
+ */
+ def compose[A, B, C](f: Map[B, C], g: Map[A, B]): Map[A, C] =
g.foldLeft(Map.empty[A, C]) {
case (acc, (key, value)) =>
f.get(value) match {
case Some(other) => acc + (key -> other)
- case _ => acc
+ case _ => acc
}
}
- }
}
- implicit def catsStdFunctorFilterForMap[K]: FunctorFilter[Map[K, ?]] = {
+ implicit def catsStdFunctorFilterForMap[K]: FunctorFilter[Map[K, ?]] =
new FunctorFilter[Map[K, ?]] {
val functor: Functor[Map[K, ?]] = cats.instances.map.catsStdInstancesForMap[K]
@@ -127,6 +132,5 @@ trait MapInstancesBinCompat0 {
fa.filter { case (_, v) => f(v) }
}
- }
}
diff --git a/core/src/main/scala/cats/instances/option.scala b/core/src/main/scala/cats/instances/option.scala
index 0a84a02a65..c8641d1cf4 100644
--- a/core/src/main/scala/cats/instances/option.scala
+++ b/core/src/main/scala/cats/instances/option.scala
@@ -5,12 +5,17 @@ import scala.annotation.tailrec
trait OptionInstances extends cats.kernel.instances.OptionInstances {
- implicit val catsStdInstancesForOption: Traverse[Option] with MonadError[Option, Unit] with Alternative[Option] with CommutativeMonad[Option] with CoflatMap[Option] =
- new Traverse[Option] with MonadError[Option, Unit] with Alternative[Option] with CommutativeMonad[Option] with CoflatMap[Option] {
+ implicit val catsStdInstancesForOption: Traverse[Option]
+ with MonadError[Option, Unit]
+ with Alternative[Option]
+ with CommutativeMonad[Option]
+ with CoflatMap[Option] =
+ new Traverse[Option] with MonadError[Option, Unit] with Alternative[Option] with CommutativeMonad[Option]
+ with CoflatMap[Option] {
def empty[A]: Option[A] = None
- def combineK[A](x: Option[A], y: Option[A]): Option[A] = x orElse y
+ def combineK[A](x: Option[A], y: Option[A]): Option[A] = x.orElse(y)
def pure[A](x: A): Option[A] = Some(x)
@@ -23,7 +28,7 @@ trait OptionInstances extends cats.kernel.instances.OptionInstances {
@tailrec
def tailRecM[A, B](a: A)(f: A => Option[Either[A, B]]): Option[B] =
f(a) match {
- case None => None
+ case None => None
case Some(Left(a1)) => tailRecM(a1)(f)
case Some(Right(b)) => Some(b)
}
@@ -33,7 +38,7 @@ trait OptionInstances extends cats.kernel.instances.OptionInstances {
override def map2Eval[A, B, Z](fa: Option[A], fb: Eval[Option[B]])(f: (A, B) => Z): Eval[Option[Z]] =
fa match {
- case None => Now(None)
+ case None => Now(None)
case Some(a) => fb.map(_.map(f(a, _)))
}
@@ -42,23 +47,23 @@ trait OptionInstances extends cats.kernel.instances.OptionInstances {
def foldLeft[A, B](fa: Option[A], b: B)(f: (B, A) => B): B =
fa match {
- case None => b
+ case None => b
case Some(a) => f(b, a)
}
def foldRight[A, B](fa: Option[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
fa match {
- case None => lb
+ case None => lb
case Some(a) => f(a, lb)
}
def raiseError[A](e: Unit): Option[A] = None
- def handleErrorWith[A](fa: Option[A])(f: (Unit) => Option[A]): Option[A] = fa orElse f(())
+ def handleErrorWith[A](fa: Option[A])(f: (Unit) => Option[A]): Option[A] = fa.orElse(f(()))
def traverse[G[_]: Applicative, A, B](fa: Option[A])(f: A => G[B]): G[Option[B]] =
fa match {
- case None => Applicative[G].pure(None)
+ case None => Applicative[G].pure(None)
case Some(a) => Applicative[G].map(f(a))(Some(_))
}
@@ -117,7 +122,7 @@ trait OptionInstances extends cats.kernel.instances.OptionInstances {
new Show[Option[A]] {
def show(fa: Option[A]): String = fa match {
case Some(a) => s"Some(${A.show(a)})"
- case None => "None"
+ case None => "None"
}
}
}
@@ -136,13 +141,13 @@ trait OptionInstancesBinCompat0 {
def traverseFilter[G[_], A, B](fa: Option[A])(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[Option[B]] =
fa match {
- case None => G.pure(Option.empty[B])
+ case None => G.pure(Option.empty[B])
case Some(a) => f(a)
}
override def filterA[G[_], A](fa: Option[A])(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[Option[A]] =
fa match {
- case None => G.pure(Option.empty[A])
+ case None => G.pure(Option.empty[A])
case Some(a) => G.map(f(a))(b => if (b) Some(a) else None)
}
diff --git a/core/src/main/scala/cats/instances/order.scala b/core/src/main/scala/cats/instances/order.scala
index 4cc59ac312..873425952e 100644
--- a/core/src/main/scala/cats/instances/order.scala
+++ b/core/src/main/scala/cats/instances/order.scala
@@ -7,10 +7,12 @@ trait OrderInstances extends kernel.instances.OrderInstances {
implicit val catsContravariantMonoidalForOrder: ContravariantMonoidal[Order] =
new ContravariantMonoidal[Order] {
+
/**
* Provides trivial order
*/
def unit: Order[Unit] = Order[Unit]
+
/** Derive an `Order` for `B` given an `Order[A]` and a function `B => A`.
*
* Note: resulting instances are law-abiding only when the functions used are injective (represent a one-to-one mapping)
@@ -27,4 +29,3 @@ trait OrderInstances extends kernel.instances.OrderInstances {
}
}
}
-
diff --git a/core/src/main/scala/cats/instances/ordering.scala b/core/src/main/scala/cats/instances/ordering.scala
index 69ef920384..23cbd7e071 100644
--- a/core/src/main/scala/cats/instances/ordering.scala
+++ b/core/src/main/scala/cats/instances/ordering.scala
@@ -6,10 +6,10 @@ import cats.kernel.instances.unit._
trait OrderingInstances {
implicit val catsContravariantMonoidalForOrdering: ContravariantMonoidal[Ordering] =
new ContravariantMonoidal[Ordering] {
+
/**
* Note: resulting instances are law-abiding only when the functions used are injective (represent a one-to-one mapping)
*/
-
def unit: Ordering[Unit] = Order[Unit].toOrdering
def contramap[A, B](fa: Ordering[A])(f: B => A): Ordering[B] = fa.on(f)
diff --git a/core/src/main/scala/cats/instances/package.scala b/core/src/main/scala/cats/instances/package.scala
index 6085a85875..e32d519d53 100644
--- a/core/src/main/scala/cats/instances/package.scala
+++ b/core/src/main/scala/cats/instances/package.scala
@@ -1,43 +1,43 @@
package cats
package object instances {
- object all extends AllInstances with AllInstancesBinCompat0 with AllInstancesBinCompat1 with AllInstancesBinCompat2
- object bigInt extends BigIntInstances
- object bigDecimal extends BigDecimalInstances
- object bitSet extends BitSetInstances
- object boolean extends BooleanInstances
- object byte extends ByteInstances
- object char extends CharInstances
- object double extends DoubleInstances
- object duration extends DurationInstances
- object either extends EitherInstances
- object eq extends EqInstances
- object equiv extends EquivInstances
- object float extends FloatInstances
- object finiteDuration extends FiniteDurationInstances
- object function extends FunctionInstances with FunctionInstancesBinCompat0
- object future extends FutureInstances
- object int extends IntInstances
- object invariant extends InvariantMonoidalInstances
- object list extends ListInstances with ListInstancesBinCompat0
- object long extends LongInstances
- object option extends OptionInstances with OptionInstancesBinCompat0
- object map extends MapInstances with MapInstancesBinCompat0
- object order extends OrderInstances
- object ordering extends OrderingInstances
- object parallel extends ParallelInstances
- object partialOrder extends PartialOrderInstances
+ object all extends AllInstances with AllInstancesBinCompat0 with AllInstancesBinCompat1 with AllInstancesBinCompat2
+ object bigInt extends BigIntInstances
+ object bigDecimal extends BigDecimalInstances
+ object bitSet extends BitSetInstances
+ object boolean extends BooleanInstances
+ object byte extends ByteInstances
+ object char extends CharInstances
+ object double extends DoubleInstances
+ object duration extends DurationInstances
+ object either extends EitherInstances
+ object eq extends EqInstances
+ object equiv extends EquivInstances
+ object float extends FloatInstances
+ object finiteDuration extends FiniteDurationInstances
+ object function extends FunctionInstances with FunctionInstancesBinCompat0
+ object future extends FutureInstances
+ object int extends IntInstances
+ object invariant extends InvariantMonoidalInstances
+ object list extends ListInstances with ListInstancesBinCompat0
+ object long extends LongInstances
+ object option extends OptionInstances with OptionInstancesBinCompat0
+ object map extends MapInstances with MapInstancesBinCompat0
+ object order extends OrderInstances
+ object ordering extends OrderingInstances
+ object parallel extends ParallelInstances
+ object partialOrder extends PartialOrderInstances
object partialOrdering extends PartialOrderingInstances
- object queue extends QueueInstances
- object set extends SetInstances
- object short extends ShortInstances
- object sortedMap extends SortedMapInstances
- object sortedSet extends SortedSetInstances
- object stream extends StreamInstances with StreamInstancesBinCompat0
- object string extends StringInstances
- object try_ extends TryInstances
- object tuple extends TupleInstances with Tuple2InstancesBinCompat0
- object unit extends UnitInstances
- object uuid extends UUIDInstances
- object vector extends VectorInstances with VectorInstancesBinCompat0
+ object queue extends QueueInstances
+ object set extends SetInstances
+ object short extends ShortInstances
+ object sortedMap extends SortedMapInstances
+ object sortedSet extends SortedSetInstances
+ object stream extends StreamInstances with StreamInstancesBinCompat0
+ object string extends StringInstances
+ object try_ extends TryInstances
+ object tuple extends TupleInstances with Tuple2InstancesBinCompat0
+ object unit extends UnitInstances
+ object uuid extends UUIDInstances
+ object vector extends VectorInstances with VectorInstancesBinCompat0
}
diff --git a/core/src/main/scala/cats/instances/parallel.scala b/core/src/main/scala/cats/instances/parallel.scala
index e45f666fc1..5240b8c54b 100644
--- a/core/src/main/scala/cats/instances/parallel.scala
+++ b/core/src/main/scala/cats/instances/parallel.scala
@@ -3,24 +3,25 @@ package cats.instances
import cats.data._
import cats.kernel.Semigroup
import cats.syntax.either._
-import cats.{Applicative, Apply, FlatMap, Functor, Monad, NonEmptyParallel, Parallel, ~>}
-
+import cats.{~>, Applicative, Apply, FlatMap, Functor, Monad, NonEmptyParallel, Parallel}
trait ParallelInstances extends ParallelInstances1 {
- implicit def catsParallelForEitherValidated[E: Semigroup]: Parallel[Either[E, ?], Validated[E, ?]] = new Parallel[Either[E, ?], Validated[E, ?]] {
+ implicit def catsParallelForEitherValidated[E: Semigroup]: Parallel[Either[E, ?], Validated[E, ?]] =
+ new Parallel[Either[E, ?], Validated[E, ?]] {
- def applicative: Applicative[Validated[E, ?]] = Validated.catsDataApplicativeErrorForValidated
- def monad: Monad[Either[E, ?]] = cats.instances.either.catsStdInstancesForEither
+ def applicative: Applicative[Validated[E, ?]] = Validated.catsDataApplicativeErrorForValidated
+ def monad: Monad[Either[E, ?]] = cats.instances.either.catsStdInstancesForEither
- def sequential: Validated[E, ?] ~> Either[E, ?] =
- λ[Validated[E, ?] ~> Either[E, ?]](_.toEither)
+ def sequential: Validated[E, ?] ~> Either[E, ?] =
+ λ[Validated[E, ?] ~> Either[E, ?]](_.toEither)
- def parallel: Either[E, ?] ~> Validated[E, ?] =
- λ[Either[E, ?] ~> Validated[E, ?]](_.toValidated)
- }
+ def parallel: Either[E, ?] ~> Validated[E, ?] =
+ λ[Either[E, ?] ~> Validated[E, ?]](_.toValidated)
+ }
- implicit def catsParallelForOptionTNestedOption[F[_], M[_]]
- (implicit P: Parallel[M, F]): Parallel[OptionT[M, ?], Nested[F, Option, ?]] = new Parallel[OptionT[M, ?], Nested[F, Option, ?]] {
+ implicit def catsParallelForOptionTNestedOption[F[_], M[_]](
+ implicit P: Parallel[M, F]
+ ): Parallel[OptionT[M, ?], Nested[F, Option, ?]] = new Parallel[OptionT[M, ?], Nested[F, Option, ?]] {
implicit val appF: Applicative[F] = P.applicative
implicit val monadM: Monad[M] = P.monad
@@ -33,7 +34,7 @@ trait ParallelInstances extends ParallelInstances1 {
def sequential: Nested[F, Option, ?] ~> OptionT[M, ?] =
λ[Nested[F, Option, ?] ~> OptionT[M, ?]](nested => OptionT(P.sequential(nested.value)))
- def parallel: OptionT[M, ?]~> Nested[F, Option, ?] =
+ def parallel: OptionT[M, ?] ~> Nested[F, Option, ?] =
λ[OptionT[M, ?] ~> Nested[F, Option, ?]](optT => Nested(P.parallel(optT.value)))
}
@@ -76,42 +77,45 @@ trait ParallelInstances extends ParallelInstances1 {
λ[Stream ~> ZipStream](v => new ZipStream(v))
}
-
- implicit def catsParallelForEitherTNestedParallelValidated[F[_], M[_], E: Semigroup]
- (implicit P: Parallel[M, F]): Parallel[EitherT[M, E, ?], Nested[F, Validated[E, ?], ?]] =
+ implicit def catsParallelForEitherTNestedParallelValidated[F[_], M[_], E: Semigroup](
+ implicit P: Parallel[M, F]
+ ): Parallel[EitherT[M, E, ?], Nested[F, Validated[E, ?], ?]] =
new Parallel[EitherT[M, E, ?], Nested[F, Validated[E, ?], ?]] {
- implicit val appF: Applicative[F] = P.applicative
- implicit val monadM: Monad[M] = P.monad
- implicit val appValidated: Applicative[Validated[E, ?]] = Validated.catsDataApplicativeErrorForValidated
- implicit val monadEither: Monad[Either[E, ?]] = cats.instances.either.catsStdInstancesForEither
+ implicit val appF: Applicative[F] = P.applicative
+ implicit val monadM: Monad[M] = P.monad
+ implicit val appValidated: Applicative[Validated[E, ?]] = Validated.catsDataApplicativeErrorForValidated
+ implicit val monadEither: Monad[Either[E, ?]] = cats.instances.either.catsStdInstancesForEither
- def applicative: Applicative[Nested[F, Validated[E, ?], ?]] = cats.data.Nested.catsDataApplicativeForNested[F, Validated[E, ?]]
+ def applicative: Applicative[Nested[F, Validated[E, ?], ?]] =
+ cats.data.Nested.catsDataApplicativeForNested[F, Validated[E, ?]]
- def monad: Monad[EitherT[M, E, ?]] = cats.data.EitherT.catsDataMonadErrorForEitherT
+ def monad: Monad[EitherT[M, E, ?]] = cats.data.EitherT.catsDataMonadErrorForEitherT
- def sequential: Nested[F, Validated[E, ?], ?] ~> EitherT[M, E, ?] =
- λ[Nested[F, Validated[E, ?], ?] ~> EitherT[M, E, ?]] { nested =>
- val mva = P.sequential(nested.value)
- EitherT(Functor[M].map(mva)(_.toEither))
- }
+ def sequential: Nested[F, Validated[E, ?], ?] ~> EitherT[M, E, ?] =
+ λ[Nested[F, Validated[E, ?], ?] ~> EitherT[M, E, ?]] { nested =>
+ val mva = P.sequential(nested.value)
+ EitherT(Functor[M].map(mva)(_.toEither))
+ }
- def parallel: EitherT[M, E, ?]~> Nested[F, Validated[E, ?], ?] =
- λ[EitherT[M, E, ?] ~> Nested[F, Validated[E, ?], ?]] { eitherT =>
- val fea = P.parallel(eitherT.value)
- Nested(Functor[F].map(fea)(_.toValidated))
- }
- }
+ def parallel: EitherT[M, E, ?] ~> Nested[F, Validated[E, ?], ?] =
+ λ[EitherT[M, E, ?] ~> Nested[F, Validated[E, ?], ?]] { eitherT =>
+ val fea = P.parallel(eitherT.value)
+ Nested(Functor[F].map(fea)(_.toValidated))
+ }
+ }
}
private[instances] trait ParallelInstances1 {
- implicit def catsParallelForEitherTNestedValidated[M[_]: Monad, E: Semigroup]: Parallel[EitherT[M, E, ?], Nested[M, Validated[E, ?], ?]] =
+ implicit def catsParallelForEitherTNestedValidated[M[_]: Monad, E: Semigroup]
+ : Parallel[EitherT[M, E, ?], Nested[M, Validated[E, ?], ?]] =
new Parallel[EitherT[M, E, ?], Nested[M, Validated[E, ?], ?]] {
implicit val appValidated: Applicative[Validated[E, ?]] = Validated.catsDataApplicativeErrorForValidated
implicit val monadEither: Monad[Either[E, ?]] = cats.instances.either.catsStdInstancesForEither
- def applicative: Applicative[Nested[M, Validated[E, ?], ?]] = cats.data.Nested.catsDataApplicativeForNested[M, Validated[E, ?]]
+ def applicative: Applicative[Nested[M, Validated[E, ?], ?]] =
+ cats.data.Nested.catsDataApplicativeForNested[M, Validated[E, ?]]
def monad: Monad[EitherT[M, E, ?]] = cats.data.EitherT.catsDataMonadErrorForEitherT
@@ -120,7 +124,7 @@ private[instances] trait ParallelInstances1 {
EitherT(Monad[M].map(nested.value)(_.toEither))
}
- def parallel: EitherT[M, E, ?]~> Nested[M, Validated[E, ?], ?] =
+ def parallel: EitherT[M, E, ?] ~> Nested[M, Validated[E, ?], ?] =
λ[EitherT[M, E, ?] ~> Nested[M, Validated[E, ?], ?]] { eitherT =>
Nested(Monad[M].map(eitherT.value)(_.toValidated))
}
diff --git a/core/src/main/scala/cats/instances/partialOrder.scala b/core/src/main/scala/cats/instances/partialOrder.scala
index 5f9949eb55..a41919c48f 100644
--- a/core/src/main/scala/cats/instances/partialOrder.scala
+++ b/core/src/main/scala/cats/instances/partialOrder.scala
@@ -2,10 +2,10 @@ package cats
package instances
import cats.kernel.instances.unit._
-
trait PartialOrderInstances extends kernel.instances.PartialOrderInstances {
implicit val catsContravariantMonoidalForPartialOrder: ContravariantMonoidal[PartialOrder] =
new ContravariantMonoidal[PartialOrder] {
+
/** Derive a `PartialOrder` for `B` given a `PartialOrder[A]` and a function `B => A`.
*
* Note: resulting instances are law-abiding only when the functions used are injective (represent a one-to-one mapping)
diff --git a/core/src/main/scala/cats/instances/partialOrdering.scala b/core/src/main/scala/cats/instances/partialOrdering.scala
index 3560286635..9b1e599aaa 100644
--- a/core/src/main/scala/cats/instances/partialOrdering.scala
+++ b/core/src/main/scala/cats/instances/partialOrdering.scala
@@ -4,6 +4,7 @@ package instances
trait PartialOrderingInstances {
implicit val catsContravariantMonoidalForPartialOrdering: ContravariantMonoidal[PartialOrdering] =
new ContravariantMonoidal[PartialOrdering] {
+
/** Derive a `PartialOrdering` for `B` given a `PartialOrdering[A]` and a function `B => A`.
*
* Note: resulting instances are law-abiding only when the functions used are injective (represent a one-to-one mapping)
@@ -21,7 +22,7 @@ trait PartialOrderingInstances {
def tryCompare(x: (A, B), y: (A, B)): Option[Int] =
fa.tryCompare(x._1, y._1) match {
case Some(0) => fb.tryCompare(x._2, y._2)
- case option => option
+ case option => option
}
}
diff --git a/core/src/main/scala/cats/instances/queue.scala b/core/src/main/scala/cats/instances/queue.scala
index ca89bc8a24..aebedd10de 100644
--- a/core/src/main/scala/cats/instances/queue.scala
+++ b/core/src/main/scala/cats/instances/queue.scala
@@ -8,7 +8,8 @@ import scala.util.Try
trait QueueInstances extends cats.kernel.instances.QueueInstances {
- implicit val catsStdInstancesForQueue: Traverse[Queue] with Alternative[Queue] with Monad[Queue] with CoflatMap[Queue] =
+ implicit val catsStdInstancesForQueue
+ : Traverse[Queue] with Alternative[Queue] with Monad[Queue] with CoflatMap[Queue] =
new Traverse[Queue] with Alternative[Queue] with Monad[Queue] with CoflatMap[Queue] {
def empty[A]: Queue[A] = Queue.empty
@@ -40,7 +41,7 @@ trait QueueInstances extends cats.kernel.instances.QueueInstances {
val (e, es) = q.dequeue
e match {
case Right(b) => bldr += b; go(es :: tail)
- case Left(a) => go(f(a) :: es :: tail)
+ case Left(a) => go(f(a) :: es :: tail)
}
}
case Nil =>
@@ -78,7 +79,7 @@ trait QueueInstances extends cats.kernel.instances.QueueInstances {
B.combineAll(fa.iterator.map(f))
def traverse[G[_], A, B](fa: Queue[A])(f: A => G[B])(implicit G: Applicative[G]): G[Queue[B]] =
- foldRight[A, G[Queue[B]]](fa, Always(G.pure(Queue.empty))){ (a, lglb) =>
+ foldRight[A, G[Queue[B]]](fa, Always(G.pure(Queue.empty))) { (a, lglb) =>
G.map2Eval(f(a), lglb)(_ +: _)
}.value
@@ -109,7 +110,9 @@ trait QueueInstances extends cats.kernel.instances.QueueInstances {
if (xs.isEmpty) G.pure(Right(b))
else {
val (a, tail) = xs.dequeue
- G.map(f(b, a)) { bnext => Left((tail, bnext)) }
+ G.map(f(b, a)) { bnext =>
+ Left((tail, bnext))
+ }
}
}
@@ -140,10 +143,11 @@ trait QueueInstances extends cats.kernel.instances.QueueInstances {
override def collectFirst[A, B](fa: Queue[A])(pf: PartialFunction[A, B]): Option[B] = fa.collectFirst(pf)
- override def collectFirstSome[A, B](fa: Queue[A])(f: A => Option[B]): Option[B] = fa.collectFirst(Function.unlift(f))
+ override def collectFirstSome[A, B](fa: Queue[A])(f: A => Option[B]): Option[B] =
+ fa.collectFirst(Function.unlift(f))
}
- implicit def catsStdShowForQueue[A:Show]: Show[Queue[A]] =
+ implicit def catsStdShowForQueue[A: Show]: Show[Queue[A]] =
new Show[Queue[A]] {
def show(fa: Queue[A]): String =
fa.iterator.map(_.show).mkString("Queue(", ", ", ")")
diff --git a/core/src/main/scala/cats/instances/set.scala b/core/src/main/scala/cats/instances/set.scala
index 0343f5ae97..ba62b96b63 100644
--- a/core/src/main/scala/cats/instances/set.scala
+++ b/core/src/main/scala/cats/instances/set.scala
@@ -35,7 +35,7 @@ trait SetInstances extends cats.kernel.instances.SetInstances {
override def isEmpty[A](fa: Set[A]): Boolean = fa.isEmpty
}
- implicit def catsStdShowForSet[A:Show]: Show[Set[A]] = new Show[Set[A]] {
+ implicit def catsStdShowForSet[A: Show]: Show[Set[A]] = new Show[Set[A]] {
def show(fa: Set[A]): String =
fa.toIterator.map(_.show).mkString("Set(", ", ", ")")
}
diff --git a/core/src/main/scala/cats/instances/sortedMap.scala b/core/src/main/scala/cats/instances/sortedMap.scala
index b3d83a4e92..37239fb8cc 100644
--- a/core/src/main/scala/cats/instances/sortedMap.scala
+++ b/core/src/main/scala/cats/instances/sortedMap.scala
@@ -12,7 +12,8 @@ trait SortedMapInstances extends SortedMapInstances2 {
implicit def catsStdHashForSortedMap[K: Hash: Order, V: Hash]: Hash[SortedMap[K, V]] =
new SortedMapHash[K, V]
- implicit def catsStdCommutativeMonoidForSortedMap[K: Order, V: CommutativeSemigroup]: CommutativeMonoid[SortedMap[K, V]] =
+ implicit def catsStdCommutativeMonoidForSortedMap[K: Order, V: CommutativeSemigroup]
+ : CommutativeMonoid[SortedMap[K, V]] =
new SortedMapCommutativeMonoid[K, V]
implicit def catsStdShowForSortedMap[A: Order, B](implicit showA: Show[A], showB: Show[B]): Show[SortedMap[A, B]] =
@@ -31,9 +32,13 @@ trait SortedMapInstances extends SortedMapInstances2 {
def traverse[G[_], A, B](fa: SortedMap[K, A])(f: A => G[B])(implicit G: Applicative[G]): G[SortedMap[K, B]] = {
val gba: Eval[G[SortedMap[K, B]]] = Always(G.pure(SortedMap.empty(Order[K].toOrdering)))
- Foldable.iterateRight(fa, gba){ (kv, lbuf) =>
- G.map2Eval(f(kv._2), lbuf)({ (b, buf) => buf + (kv._1 -> b)})
- }.value
+ Foldable
+ .iterateRight(fa, gba) { (kv, lbuf) =>
+ G.map2Eval(f(kv._2), lbuf)({ (b, buf) =>
+ buf + (kv._1 -> b)
+ })
+ }
+ .value
}
def flatMap[A, B](fa: SortedMap[K, A])(f: A => SortedMap[K, B]): SortedMap[K, B] =
@@ -42,18 +47,20 @@ trait SortedMapInstances extends SortedMapInstances2 {
override def map[A, B](fa: SortedMap[K, A])(f: A => B): SortedMap[K, B] =
fa.map { case (k, a) => (k, f(a)) }
-
- override def map2Eval[A, B, Z](fa: SortedMap[K, A], fb: Eval[SortedMap[K, B]])(f: (A, B) => Z): Eval[SortedMap[K, Z]] =
+ override def map2Eval[A, B, Z](fa: SortedMap[K, A],
+ fb: Eval[SortedMap[K, B]])(f: (A, B) => Z): Eval[SortedMap[K, Z]] =
if (fa.isEmpty) Eval.now(SortedMap.empty(Order[K].toOrdering)) // no need to evaluate fb
else fb.map(fb => map2(fa, fb)(f))
- override def ap2[A, B, Z](f: SortedMap[K, (A, B) => Z])(fa: SortedMap[K, A], fb: SortedMap[K, B]): SortedMap[K, Z] =
- f.flatMap { case (k, f) =>
- for { a <- fa.get(k); b <- fb.get(k) } yield (k, f(a, b))
+ override def ap2[A, B, Z](f: SortedMap[K, (A, B) => Z])(fa: SortedMap[K, A],
+ fb: SortedMap[K, B]): SortedMap[K, Z] =
+ f.flatMap {
+ case (k, f) =>
+ for { a <- fa.get(k); b <- fb.get(k) } yield (k, f(a, b))
}
def foldLeft[A, B](fa: SortedMap[K, A], b: B)(f: (B, A) => B): B =
- fa.foldLeft(b) { case (x, (k, a)) => f(x, a)}
+ fa.foldLeft(b) { case (x, (k, a)) => f(x, a) }
def foldRight[A, B](fa: SortedMap[K, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
Foldable.iterateRight(fa.values, lb)(f)
@@ -66,7 +73,7 @@ trait SortedMapInstances extends SortedMapInstances2 {
case Left(a) =>
f(a).get(k) match {
case Some(x) => descend(k, x)
- case None => ()
+ case None => ()
}
case Right(b) =>
bldr += ((k, b))
@@ -94,12 +101,14 @@ trait SortedMapInstances extends SortedMapInstances2 {
override def toList[A](fa: SortedMap[K, A]): List[A] = fa.values.toList
- override def collectFirst[A, B](fa: SortedMap[K, A])(pf: PartialFunction[A, B]): Option[B] = fa.collectFirst(new PartialFunction[(K, A), B] {
- override def isDefinedAt(x: (K, A)) = pf.isDefinedAt(x._2)
- override def apply(v1: (K, A)) = pf(v1._2)
- })
+ override def collectFirst[A, B](fa: SortedMap[K, A])(pf: PartialFunction[A, B]): Option[B] =
+ fa.collectFirst(new PartialFunction[(K, A), B] {
+ override def isDefinedAt(x: (K, A)) = pf.isDefinedAt(x._2)
+ override def apply(v1: (K, A)) = pf(v1._2)
+ })
- override def collectFirstSome[A, B](fa: SortedMap[K, A])(f: A => Option[B]): Option[B] = collectFirst(fa)(Function.unlift(f))
+ override def collectFirstSome[A, B](fa: SortedMap[K, A])(f: A => Option[B]): Option[B] =
+ collectFirst(fa)(Function.unlift(f))
}
}
@@ -114,19 +123,22 @@ trait SortedMapInstances2 extends SortedMapInstances1 {
new SortedMapMonoid[K, V]
}
-class SortedMapHash[K, V](implicit V: Hash[V], O: Order[K], K: Hash[K]) extends SortedMapEq[K, V]()(V, O) with Hash[SortedMap[K, V]] {
+class SortedMapHash[K, V](implicit V: Hash[V], O: Order[K], K: Hash[K])
+ extends SortedMapEq[K, V]()(V, O)
+ with Hash[SortedMap[K, V]] {
// adapted from [[scala.util.hashing.MurmurHash3]],
// but modified standard `Any#hashCode` to `ev.hash`.
import scala.util.hashing.MurmurHash3._
def hash(x: SortedMap[K, V]): Int = {
var a, b, n = 0
var c = 1
- x foreach { case (k, v) =>
- val h = StaticMethods.product2Hash(K.hash(k), V.hash(v))
- a += h
- b ^= h
- if (h != 0) c *= h
- n += 1
+ x.foreach {
+ case (k, v) =>
+ val h = StaticMethods.product2Hash(K.hash(k), V.hash(v))
+ a += h
+ b ^= h
+ if (h != 0) c *= h
+ n += 1
}
var h = mapSeed
h = mix(h, a)
@@ -139,29 +151,34 @@ class SortedMapHash[K, V](implicit V: Hash[V], O: Order[K], K: Hash[K]) extends
class SortedMapEq[K, V](implicit V: Eq[V], O: Order[K]) extends Eq[SortedMap[K, V]] {
def eqv(x: SortedMap[K, V], y: SortedMap[K, V]): Boolean =
if (x eq y) true
- else x.size == y.size && x.forall { case (k, v1) =>
- y.get(k) match {
- case Some(v2) => V.eqv(v1, v2)
- case None => false
+ else
+ x.size == y.size && x.forall {
+ case (k, v1) =>
+ y.get(k) match {
+ case Some(v2) => V.eqv(v1, v2)
+ case None => false
+ }
}
- }
}
class SortedMapCommutativeMonoid[K, V](implicit V: CommutativeSemigroup[V], O: Order[K])
- extends SortedMapMonoid[K, V] with CommutativeMonoid[SortedMap[K, V]]
+ extends SortedMapMonoid[K, V]
+ with CommutativeMonoid[SortedMap[K, V]]
-class SortedMapMonoid[K, V](implicit V: Semigroup[V], O: Order[K]) extends Monoid[SortedMap[K, V]] {
+class SortedMapMonoid[K, V](implicit V: Semigroup[V], O: Order[K]) extends Monoid[SortedMap[K, V]] {
def empty: SortedMap[K, V] = SortedMap.empty(O.toOrdering)
def combine(xs: SortedMap[K, V], ys: SortedMap[K, V]): SortedMap[K, V] =
if (xs.size <= ys.size) {
- xs.foldLeft(ys) { case (my, (k, x)) =>
- my.updated(k, Semigroup.maybeCombine(x, my.get(k)))
+ xs.foldLeft(ys) {
+ case (my, (k, x)) =>
+ my.updated(k, Semigroup.maybeCombine(x, my.get(k)))
}
} else {
- ys.foldLeft(xs) { case (mx, (k, y)) =>
- mx.updated(k, Semigroup.maybeCombine(mx.get(k), y))
+ ys.foldLeft(xs) {
+ case (mx, (k, y)) =>
+ mx.updated(k, Semigroup.maybeCombine(mx.get(k), y))
}
}
@@ -175,14 +192,17 @@ trait SortedMapInstancesBinCompat0 {
val traverse: Traverse[SortedMap[K, ?]] = cats.instances.sortedMap.catsStdInstancesForSortedMap[K]
- override def traverseFilter[G[_], A, B]
- (fa: SortedMap[K, A])
- (f: A => G[Option[B]])
- (implicit G: Applicative[G]): G[SortedMap[K, B]] = {
+ override def traverseFilter[G[_], A, B](
+ fa: SortedMap[K, A]
+ )(f: A => G[Option[B]])(implicit G: Applicative[G]): G[SortedMap[K, B]] = {
val gba: Eval[G[SortedMap[K, B]]] = Always(G.pure(SortedMap.empty))
- Foldable.iterateRight(fa, gba) { (kv, lbuf) =>
- G.map2Eval(f(kv._2), lbuf)({ (ob, buf) => ob.fold(buf)(b => buf + (kv._1 -> b)) })
- }.value
+ Foldable
+ .iterateRight(fa, gba) { (kv, lbuf) =>
+ G.map2Eval(f(kv._2), lbuf)({ (ob, buf) =>
+ ob.fold(buf)(b => buf + (kv._1 -> b))
+ })
+ }
+ .value
}
override def mapFilter[A, B](fa: SortedMap[K, A])(f: (A) => Option[B]): SortedMap[K, B] =
@@ -197,11 +217,9 @@ trait SortedMapInstancesBinCompat0 {
override def filter[A](fa: SortedMap[K, A])(f: (A) => Boolean): SortedMap[K, A] =
fa.filter { case (_, v) => f(v) }
-
- override def filterA[G[_], A]
- (fa: SortedMap[K, A])
- (f: (A) => G[Boolean])
- (implicit G: Applicative[G]): G[SortedMap[K, A]] =
+ override def filterA[G[_], A](
+ fa: SortedMap[K, A]
+ )(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[SortedMap[K, A]] =
traverseFilter(fa)(a => G.map(f(a))(if (_) Some(a) else None))
}
}
diff --git a/core/src/main/scala/cats/instances/sortedSet.scala b/core/src/main/scala/cats/instances/sortedSet.scala
index f30aff1ec9..dce7fe8359 100644
--- a/core/src/main/scala/cats/instances/sortedSet.scala
+++ b/core/src/main/scala/cats/instances/sortedSet.scala
@@ -24,15 +24,15 @@ trait SortedSetInstances extends SortedSetInstances1 {
override def get[A](fa: SortedSet[A])(idx: Long): Option[A] = {
@tailrec
- def go(idx: Int, it: Iterator[A]): Option[A] = {
+ def go(idx: Int, it: Iterator[A]): Option[A] =
if (it.hasNext) {
- if (idx == 0) Some(it.next) else {
+ if (idx == 0) Some(it.next)
+ else {
it.next
go(idx - 1, it)
}
} else None
- }
- if (idx < Int.MaxValue && idx >= 0L) go(idx.toInt, fa.toIterator) else None
+ if (idx < Int.MaxValue && idx >= 0L) go(idx.toInt, fa.toIterator) else None
}
override def size[A](fa: SortedSet[A]): Long = fa.size.toLong
@@ -79,13 +79,11 @@ trait SortedSetInstances1 {
}
class SortedSetOrder[A: Order] extends Order[SortedSet[A]] {
- def compare(a1: SortedSet[A], a2: SortedSet[A]): Int = {
-
+ def compare(a1: SortedSet[A], a2: SortedSet[A]): Int =
Order[Int].compare(a1.size, a2.size) match {
case 0 => Order.compare(a1.toStream, a2.toStream)
case x => x
}
- }
override def eqv(s1: SortedSet[A], s2: SortedSet[A]): Boolean = {
implicit val x = Order[A].toOrdering
@@ -101,7 +99,7 @@ class SortedSetHash[A: Order: Hash] extends Hash[SortedSet[A]] {
def hash(xs: SortedSet[A]): Int = {
var a, b, n = 0
var c = 1
- xs foreach { x =>
+ xs.foreach { x =>
val h = Hash[A].hash(x)
a += h
b ^= h
@@ -124,4 +122,3 @@ class SortedSetSemilattice[A: Order] extends BoundedSemilattice[SortedSet[A]] {
def empty: SortedSet[A] = SortedSet.empty(implicitly[Order[A]].toOrdering)
def combine(x: SortedSet[A], y: SortedSet[A]): SortedSet[A] = x | y
}
-
diff --git a/core/src/main/scala/cats/instances/stream.scala b/core/src/main/scala/cats/instances/stream.scala
index 1d97c90fb0..e8c38a50ac 100644
--- a/core/src/main/scala/cats/instances/stream.scala
+++ b/core/src/main/scala/cats/instances/stream.scala
@@ -6,7 +6,8 @@ import cats.syntax.show._
import scala.annotation.tailrec
trait StreamInstances extends cats.kernel.instances.StreamInstances {
- implicit val catsStdInstancesForStream: Traverse[Stream] with Alternative[Stream] with Monad[Stream] with CoflatMap[Stream] =
+ implicit val catsStdInstancesForStream
+ : Traverse[Stream] with Alternative[Stream] with Monad[Stream] with CoflatMap[Stream] =
new Traverse[Stream] with Alternative[Stream] with Monad[Stream] with CoflatMap[Stream] {
def empty[A]: Stream[A] = Stream.Empty
@@ -45,14 +46,13 @@ trait StreamInstances extends cats.kernel.instances.StreamInstances {
override def foldMap[A, B](fa: Stream[A])(f: A => B)(implicit B: Monoid[B]): B =
B.combineAll(fa.iterator.map(f))
- def traverse[G[_], A, B](fa: Stream[A])(f: A => G[B])(implicit G: Applicative[G]): G[Stream[B]] = {
+ def traverse[G[_], A, B](fa: Stream[A])(f: A => G[B])(implicit G: Applicative[G]): G[Stream[B]] =
// We use foldRight to avoid possible stack overflows. Since
// we don't want to return a Eval[_] instance, we call .value
// at the end.
- foldRight(fa, Always(G.pure(Stream.empty[B]))){ (a, lgsb) =>
+ foldRight(fa, Always(G.pure(Stream.empty[B]))) { (a, lgsb) =>
G.map2Eval(f(a), lgsb)(_ #:: _)
}.value
- }
override def mapWithIndex[A, B](fa: Stream[A])(f: (A, Int) => B): Stream[B] =
fa.zipWithIndex.map(ai => f(ai._1, ai._2))
@@ -122,11 +122,13 @@ trait StreamInstances extends cats.kernel.instances.StreamInstances {
override def foldM[G[_], A, B](fa: Stream[A], z: B)(f: (B, A) => G[B])(implicit G: Monad[G]): G[B] = {
def step(in: (Stream[A], B)): G[Either[(Stream[A], B), B]] = {
- val (s, b) = in
+ val (s, b) = in
if (s.isEmpty)
G.pure(Right(b))
else
- G.map(f(b, s.head)) { bnext => Left((s.tail, bnext)) }
+ G.map(f(b, s.head)) { bnext =>
+ Left((s.tail, bnext))
+ }
}
G.tailRecM((fa, z))(step)
@@ -145,7 +147,8 @@ trait StreamInstances extends cats.kernel.instances.StreamInstances {
override def collectFirst[A, B](fa: Stream[A])(pf: PartialFunction[A, B]): Option[B] = fa.collectFirst(pf)
- override def collectFirstSome[A, B](fa: Stream[A])(f: A => Option[B]): Option[B] = fa.collectFirst(Function.unlift(f))
+ override def collectFirstSome[A, B](fa: Stream[A])(f: A => Option[B]): Option[B] =
+ fa.collectFirst(Function.unlift(f))
}
implicit def catsStdShowForStream[A: Show]: Show[Stream[A]] =
@@ -158,9 +161,8 @@ trait StreamInstancesBinCompat0 {
implicit val catsStdTraverseFilterForStream: TraverseFilter[Stream] = new TraverseFilter[Stream] {
val traverse: Traverse[Stream] = cats.instances.stream.catsStdInstancesForStream
- override def mapFilter[A, B](fa: Stream[A])(f: (A) => Option[B]): Stream[B] = {
+ override def mapFilter[A, B](fa: Stream[A])(f: (A) => Option[B]): Stream[B] =
fa.collect(Function.unlift(f))
- }
override def filter[A](fa: Stream[A])(f: (A) => Boolean): Stream[A] = fa.filter(f)
@@ -168,17 +170,17 @@ trait StreamInstancesBinCompat0 {
override def flattenOption[A](fa: Stream[Option[A]]): Stream[A] = fa.flatten
- def traverseFilter[G[_], A, B](fa: Stream[A])(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[Stream[B]] = {
+ def traverseFilter[G[_], A, B](fa: Stream[A])(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[Stream[B]] =
fa.foldRight(Eval.now(G.pure(Stream.empty[B])))(
- (x, xse) => G.map2Eval(f(x), xse)((i, o) => i.fold(o)(_ +: o))
- ).value
- }
+ (x, xse) => G.map2Eval(f(x), xse)((i, o) => i.fold(o)(_ +: o))
+ )
+ .value
- override def filterA[G[_], A](fa: Stream[A])(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[Stream[A]] = {
+ override def filterA[G[_], A](fa: Stream[A])(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[Stream[A]] =
fa.foldRight(Eval.now(G.pure(Stream.empty[A])))(
- (x, xse) => G.map2Eval(f(x), xse)((b, as) => if (b) x +: as else as)
- ).value
- }
+ (x, xse) => G.map2Eval(f(x), xse)((b, as) => if (b) x +: as else as)
+ )
+ .value
}
}
diff --git a/core/src/main/scala/cats/instances/try.scala b/core/src/main/scala/cats/instances/try.scala
index 31f8698552..8816d47e3c 100644
--- a/core/src/main/scala/cats/instances/try.scala
+++ b/core/src/main/scala/cats/instances/try.scala
@@ -10,26 +10,27 @@ import scala.annotation.tailrec
trait TryInstances extends TryInstances1 {
// scalastyle:off method.length
- implicit def catsStdInstancesForTry: MonadError[Try, Throwable] with CoflatMap[Try] with Traverse[Try] with Monad[Try] =
+ implicit def catsStdInstancesForTry
+ : MonadError[Try, Throwable] with CoflatMap[Try] with Traverse[Try] with Monad[Try] =
new TryCoflatMap with MonadError[Try, Throwable] with Traverse[Try] with Monad[Try] {
def pure[A](x: A): Try[A] = Success(x)
override def product[A, B](ta: Try[A], tb: Try[B]): Try[(A, B)] = (ta, tb) match {
case (Success(a), Success(b)) => Success((a, b))
- case (f: Failure[_], _) => castFailure[(A, B)](f)
- case (_, f: Failure[_]) => castFailure[(A, B)](f)
+ case (f: Failure[_], _) => castFailure[(A, B)](f)
+ case (_, f: Failure[_]) => castFailure[(A, B)](f)
}
override def map2[A, B, Z](ta: Try[A], tb: Try[B])(f: (A, B) => Z): Try[Z] = (ta, tb) match {
case (Success(a), Success(b)) => Try(f(a, b))
- case (f: Failure[_], _) => castFailure[Z](f)
- case (_, f: Failure[_]) => castFailure[Z](f)
+ case (f: Failure[_], _) => castFailure[Z](f)
+ case (_, f: Failure[_]) => castFailure[Z](f)
}
override def map2Eval[A, B, Z](ta: Try[A], tb: Eval[Try[B]])(f: (A, B) => Z): Eval[Try[Z]] =
ta match {
case f: Failure[_] => Now(castFailure[Z](f))
- case Success(a) => tb.map(_.map(f(a, _)))
+ case Success(a) => tb.map(_.map(f(a, _)))
}
def flatMap[A, B](ta: Try[A])(f: A => Try[B]): Try[B] = ta.flatMap(f)
@@ -48,13 +49,13 @@ trait TryInstances extends TryInstances1 {
def traverse[G[_], A, B](fa: Try[A])(f: A => G[B])(implicit G: Applicative[G]): G[Try[B]] =
fa match {
- case Success(a) => G.map(f(a))(Success(_))
+ case Success(a) => G.map(f(a))(Success(_))
case f: Failure[_] => G.pure(castFailure[B](f))
}
@tailrec final def tailRecM[B, C](b: B)(f: B => Try[Either[B, C]]): Try[C] =
f(b) match {
- case f: Failure[_] => castFailure[C](f)
+ case f: Failure[_] => castFailure[C](f)
case Success(Left(b1)) => tailRecM(b1)(f)
case Success(Right(c)) => Success(c)
}
@@ -68,7 +69,7 @@ trait TryInstances extends TryInstances1 {
ta.recover { case t => f(t) }
override def attempt[A](ta: Try[A]): Try[Either[Throwable, A]] =
- (ta.map(a => Right[Throwable, A](a))) recover { case NonFatal(t) => Left(t) }
+ (ta.map(a => Right[Throwable, A](a))).recover { case NonFatal(t) => Left(t) }
override def recover[A](ta: Try[A])(pf: PartialFunction[Throwable, A]): Try[A] =
ta.recover(pf)
@@ -138,6 +139,7 @@ trait TryInstances extends TryInstances1 {
case Failure(e) => s"Failure($e)"
}
}
+
/**
* you may wish to do equality by making `implicit val eqT: Eq[Throwable] = Eq.allEqual`
* doing a fine grained equality on Throwable can make the code very execution
@@ -148,12 +150,13 @@ trait TryInstances extends TryInstances1 {
def eqv(x: Try[A], y: Try[A]): Boolean = (x, y) match {
case (Success(a), Success(b)) => A.eqv(a, b)
case (Failure(a), Failure(b)) => T.eqv(a, b)
- case _ => false
+ case _ => false
}
}
}
private[instances] object TryInstances {
+
/**
* A `Failure` can be statically typed as `Try[A]` for all `A`, because it
* does not actually contain an `A` value (as `Success[A]` does).
@@ -161,21 +164,22 @@ private[instances] object TryInstances {
@inline final def castFailure[A](f: Failure[_]): Try[A] = f.asInstanceOf[Try[A]]
}
-private[instances] sealed trait TryInstances1 extends TryInstances2 {
+sealed private[instances] trait TryInstances1 extends TryInstances2 {
implicit def catsStdMonoidForTry[A: Monoid]: Monoid[Try[A]] =
new TryMonoid[A]
}
-private[instances] sealed trait TryInstances2 {
+sealed private[instances] trait TryInstances2 {
implicit def catsStdSemigroupForTry[A: Semigroup]: Semigroup[Try[A]] =
new TrySemigroup[A]
}
-private[cats] abstract class TryCoflatMap extends CoflatMap[Try] {
+abstract private[cats] class TryCoflatMap extends CoflatMap[Try] {
def map[A, B](ta: Try[A])(f: A => B): Try[B] = ta.map(f)
def coflatMap[A, B](ta: Try[A])(f: Try[A] => B): Try[B] = Try(f(ta))
}
private[cats] class TrySemigroup[A: Semigroup] extends ApplySemigroup[Try, A](try_.catsStdInstancesForTry, implicitly)
-private[cats] class TryMonoid[A](implicit A: Monoid[A]) extends ApplicativeMonoid[Try, A](try_.catsStdInstancesForTry, implicitly)
+private[cats] class TryMonoid[A](implicit A: Monoid[A])
+ extends ApplicativeMonoid[Try, A](try_.catsStdInstancesForTry, implicitly)
diff --git a/core/src/main/scala/cats/instances/tuple.scala b/core/src/main/scala/cats/instances/tuple.scala
index 53cd07a3c4..6a73a547c1 100644
--- a/core/src/main/scala/cats/instances/tuple.scala
+++ b/core/src/main/scala/cats/instances/tuple.scala
@@ -12,14 +12,16 @@ trait Tuple2InstancesBinCompat0 {
/**
* Witness for: (A, A) <-> Boolean => A
*/
- implicit def catsDataRepresentableForPair(implicit PF: Functor[λ[P => (P, P)]]): Representable.Aux[λ[P => (P, P)], Boolean] = new Representable[λ[P => (P, P)]] {
+ implicit def catsDataRepresentableForPair(
+ implicit PF: Functor[λ[P => (P, P)]]
+ ): Representable.Aux[λ[P => (P, P)], Boolean] = new Representable[λ[P => (P, P)]] {
override type Representation = Boolean
override val F: Functor[λ[P => (P, P)]] = PF
override def tabulate[A](f: Boolean => A): (A, A) = (f(true), f(false))
override def index[A](pair: (A, A)): Boolean => A = {
- case true => pair._1
+ case true => pair._1
case false => pair._2
}
}
@@ -38,14 +40,14 @@ sealed trait Tuple2Instances extends Tuple2Instances1 {
def bifoldLeft[A, B, C](fab: (A, B), c: C)(f: (C, A) => C, g: (C, B) => C): C =
g(f(c, fab._1), fab._2)
- def bifoldRight[A, B, C](fab: (A, B), c: Eval[C])(f: (A, Eval[C]) => Eval[C], g: (B, Eval[C]) => Eval[C]): Eval[C] =
+ def bifoldRight[A, B, C](fab: (A, B), c: Eval[C])(f: (A, Eval[C]) => Eval[C],
+ g: (B, Eval[C]) => Eval[C]): Eval[C] =
g(fab._2, f(fab._1, c))
}
implicit def catsStdShowForTuple2[A, B](implicit aShow: Show[A], bShow: Show[B]): Show[(A, B)] = new Show[(A, B)] {
- override def show(f: (A, B)): String = {
+ override def show(f: (A, B)): String =
s"(${aShow.show(f._1)},${bShow.show(f._2)})"
- }
}
implicit def catsStdInstancesForTuple2[X]: Traverse[(X, ?)] with Comonad[(X, ?)] with Reducible[(X, ?)] =
@@ -163,10 +165,10 @@ private[instances] class FlatMapTuple2[X](s: Semigroup[X]) extends FlatMap[(X, ?
def loop(x: X, aa: A): (X, B) =
f(aa) match {
case (nextX, Left(nextA)) => loop(s.combine(x, nextX), nextA)
- case (nextX, Right(b)) => (s.combine(x, nextX), b)
+ case (nextX, Right(b)) => (s.combine(x, nextX), b)
}
f(a) match {
- case (x, Right(b)) => (x, b)
+ case (x, Right(b)) => (x, b)
case (x, Left(nextA)) => loop(x, nextA)
}
}
diff --git a/core/src/main/scala/cats/instances/vector.scala b/core/src/main/scala/cats/instances/vector.scala
index 1cdb90f889..d518353f21 100644
--- a/core/src/main/scala/cats/instances/vector.scala
+++ b/core/src/main/scala/cats/instances/vector.scala
@@ -8,7 +8,8 @@ import scala.collection.+:
import scala.collection.immutable.VectorBuilder
trait VectorInstances extends cats.kernel.instances.VectorInstances {
- implicit val catsStdInstancesForVector: Traverse[Vector] with Monad[Vector] with Alternative[Vector] with CoflatMap[Vector] =
+ implicit val catsStdInstancesForVector
+ : Traverse[Vector] with Monad[Vector] with Alternative[Vector] with CoflatMap[Vector] =
new Traverse[Vector] with Monad[Vector] with Alternative[Vector] with CoflatMap[Vector] {
def empty[A]: Vector[A] = Vector.empty[A]
@@ -27,7 +28,7 @@ trait VectorInstances extends cats.kernel.instances.VectorInstances {
@tailrec def loop(builder: VectorBuilder[B], as: Vector[A]): Vector[B] =
as match {
case _ +: rest => loop(builder += f(as), rest)
- case _ => builder.result()
+ case _ => builder.result()
}
loop(new VectorBuilder[B], fa)
}
@@ -73,7 +74,7 @@ trait VectorInstances extends cats.kernel.instances.VectorInstances {
if (idx < Int.MaxValue && fa.size > idx && idx >= 0) Some(fa(idx.toInt)) else None
override def traverse[G[_], A, B](fa: Vector[A])(f: A => G[B])(implicit G: Applicative[G]): G[Vector[B]] =
- foldRight[A, G[Vector[B]]](fa, Always(G.pure(Vector.empty))){ (a, lgvb) =>
+ foldRight[A, G[Vector[B]]](fa, Always(G.pure(Vector.empty))) { (a, lgvb) =>
G.map2Eval(f(a), lgvb)(_ +: _)
}.value
@@ -90,9 +91,10 @@ trait VectorInstances extends cats.kernel.instances.VectorInstances {
override def foldM[G[_], A, B](fa: Vector[A], z: B)(f: (B, A) => G[B])(implicit G: Monad[G]): G[B] = {
val length = fa.length
- G.tailRecM((z, 0)) { case (b, i) =>
- if (i < length) G.map(f(b, fa(i)))(b => Left((b, i + 1)))
- else G.pure(Right(b))
+ G.tailRecM((z, 0)) {
+ case (b, i) =>
+ if (i < length) G.map(f(b, fa(i)))(b => Left((b, i + 1)))
+ else G.pure(Right(b))
}
}
@@ -109,10 +111,11 @@ trait VectorInstances extends cats.kernel.instances.VectorInstances {
override def collectFirst[A, B](fa: Vector[A])(pf: PartialFunction[A, B]): Option[B] = fa.collectFirst(pf)
- override def collectFirstSome[A, B](fa: Vector[A])(f: A => Option[B]): Option[B] = fa.collectFirst(Function.unlift(f))
+ override def collectFirstSome[A, B](fa: Vector[A])(f: A => Option[B]): Option[B] =
+ fa.collectFirst(Function.unlift(f))
}
- implicit def catsStdShowForVector[A:Show]: Show[Vector[A]] =
+ implicit def catsStdShowForVector[A: Show]: Show[Vector[A]] =
new Show[Vector[A]] {
def show(fa: Vector[A]): String =
fa.iterator.map(_.show).mkString("Vector(", ", ", ")")
@@ -134,13 +137,14 @@ trait VectorInstancesBinCompat0 {
def traverseFilter[G[_], A, B](fa: Vector[A])(f: (A) => G[Option[B]])(implicit G: Applicative[G]): G[Vector[B]] =
fa.foldRight(Eval.now(G.pure(Vector.empty[B])))(
- (x, xse) => G.map2Eval(f(x), xse)((i, o) => i.fold(o)(_ +: o))
- ).value
+ (x, xse) => G.map2Eval(f(x), xse)((i, o) => i.fold(o)(_ +: o))
+ )
+ .value
override def filterA[G[_], A](fa: Vector[A])(f: (A) => G[Boolean])(implicit G: Applicative[G]): G[Vector[A]] =
fa.foldRight(Eval.now(G.pure(Vector.empty[A])))(
- (x, xse) =>
- G.map2Eval(f(x), xse)((b, vec) => if (b) x +: vec else vec)
- ).value
+ (x, xse) => G.map2Eval(f(x), xse)((b, vec) => if (b) x +: vec else vec)
+ )
+ .value
}
}
diff --git a/core/src/main/scala/cats/package.scala b/core/src/main/scala/cats/package.scala
index 308e5480b2..b42624ef2e 100644
--- a/core/src/main/scala/cats/package.scala
+++ b/core/src/main/scala/cats/package.scala
@@ -16,24 +16,25 @@ package object cats {
/** [[cats.InjectK]][F, G] */
type :≺:[F[_], G[_]] = InjectK[F, G]
-/**
- * Identity, encoded as `type Id[A] = A`, a convenient alias to make
- * identity instances well-kinded.
- *
- * The identity monad can be seen as the ambient monad that encodes
- * the effect of having no effect. It is ambient in the sense that
- * plain pure values are values of `Id`.
- *
- * For instance, the [[cats.Functor]] instance for `[[cats.Id]]`
- * allows us to apply a function `A => B` to an `Id[A]` and get an
- * `Id[B]`. However, an `Id[A]` is the same as `A`, so all we're doing
- * is applying a pure function of type `A => B` to a pure value of
- * type `A` to get a pure value of type `B`. That is, the instance
- * encodes pure unary function application.
- */
+ /**
+ * Identity, encoded as `type Id[A] = A`, a convenient alias to make
+ * identity instances well-kinded.
+ *
+ * The identity monad can be seen as the ambient monad that encodes
+ * the effect of having no effect. It is ambient in the sense that
+ * plain pure values are values of `Id`.
+ *
+ * For instance, the [[cats.Functor]] instance for `[[cats.Id]]`
+ * allows us to apply a function `A => B` to an `Id[A]` and get an
+ * `Id[B]`. However, an `Id[A]` is the same as `A`, so all we're doing
+ * is applying a pure function of type `A => B` to a pure value of
+ * type `A` to get a pure value of type `B`. That is, the instance
+ * encodes pure unary function application.
+ */
type Id[A] = A
type Endo[A] = A => A
- implicit val catsInstancesForId: Bimonad[Id] with CommutativeMonad[Id] with Comonad[Id] with NonEmptyTraverse[Id] with Distributive[Id] =
+ implicit val catsInstancesForId
+ : Bimonad[Id] with CommutativeMonad[Id] with Comonad[Id] with NonEmptyTraverse[Id] with Distributive[Id] =
new Bimonad[Id] with CommutativeMonad[Id] with Comonad[Id] with NonEmptyTraverse[Id] with Distributive[Id] {
def pure[A](a: A): A = a
def extract[A](a: A): A = a
@@ -75,7 +76,7 @@ package object cats {
override def get[A](fa: Id[A])(idx: Long): Option[A] =
if (idx == 0L) Some(fa) else None
override def isEmpty[A](fa: Id[A]): Boolean = false
- }
+ }
/**
* Witness for: Id[A] <-> Unit => A
diff --git a/core/src/main/scala/cats/syntax/DistributiveSyntax.scala b/core/src/main/scala/cats/syntax/DistributiveSyntax.scala
index abdba5b236..25b67b2cc0 100644
--- a/core/src/main/scala/cats/syntax/DistributiveSyntax.scala
+++ b/core/src/main/scala/cats/syntax/DistributiveSyntax.scala
@@ -4,11 +4,13 @@ package syntax
import cats.evidence.===
trait DistributiveSyntax extends Distributive.ToDistributiveOps {
- implicit final def catsSyntaxDistributiveOps[F[_]: Functor, A](fa: F[A]): DistributiveOps[F, A] = new DistributiveOps[F, A](fa)
+ implicit final def catsSyntaxDistributiveOps[F[_]: Functor, A](fa: F[A]): DistributiveOps[F, A] =
+ new DistributiveOps[F, A](fa)
}
// Add syntax to functor as part of importing distributive syntax.
final class DistributiveOps[F[_], A](val fa: F[A]) extends AnyVal {
def distribute[G[_], B](f: A => G[B])(implicit G: Distributive[G], F: Functor[F]): G[F[B]] = G.distribute(fa)(f)
- def cosequence[G[_], B](implicit G: Distributive[G], F: Functor[F], ev: A === G[B]): G[F[B]] = G.cosequence(ev.substitute(fa))
+ def cosequence[G[_], B](implicit G: Distributive[G], F: Functor[F], ev: A === G[B]): G[F[B]] =
+ G.cosequence(ev.substitute(fa))
}
diff --git a/core/src/main/scala/cats/syntax/TrySyntax.scala b/core/src/main/scala/cats/syntax/TrySyntax.scala
index 29c786c229..efde5b2c13 100644
--- a/core/src/main/scala/cats/syntax/TrySyntax.scala
+++ b/core/src/main/scala/cats/syntax/TrySyntax.scala
@@ -7,25 +7,24 @@ trait TrySyntax {
implicit final def catsSyntaxTry[A](t: Try[A]): TryOps[A] = new TryOps(t)
}
-
final class TryOps[A](val self: Try[A]) extends AnyVal {
/**
- * lift the `try` into a `F[_]` with `ApplicativeError[F, Throwable]` instance
- *
- * {{{
- * scala> import cats.implicits._
- * scala> import util.Try
- *
- * scala> val s: Try[Int] = Try(3)
- * scala> s.liftTo[Either[Throwable, ?]]
- * res0: Either[Throwable, Int] = Right(3)
- *
- * scala> val f: Try[Int] = Try(throw new Throwable("boo"))
- * scala> f.liftTo[Either[Throwable, ?]]
- * res0: Either[Throwable, Int] = Left(java.lang.Throwable: boo)
- * }}}
- */
+ * lift the `try` into a `F[_]` with `ApplicativeError[F, Throwable]` instance
+ *
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import util.Try
+ *
+ * scala> val s: Try[Int] = Try(3)
+ * scala> s.liftTo[Either[Throwable, ?]]
+ * res0: Either[Throwable, Int] = Right(3)
+ *
+ * scala> val f: Try[Int] = Try(throw new Throwable("boo"))
+ * scala> f.liftTo[Either[Throwable, ?]]
+ * res0: Either[Throwable, Int] = Left(java.lang.Throwable: boo)
+ * }}}
+ */
def liftTo[F[_]](implicit F: ApplicativeError[F, Throwable]): F[A] =
F.fromTry(self)
diff --git a/core/src/main/scala/cats/syntax/all.scala b/core/src/main/scala/cats/syntax/all.scala
index 749e4a8619..4dadad5a53 100644
--- a/core/src/main/scala/cats/syntax/all.scala
+++ b/core/src/main/scala/cats/syntax/all.scala
@@ -56,13 +56,10 @@ trait AllSyntax
with VectorSyntax
with WriterSyntax
-trait AllSyntaxBinCompat0
- extends UnorderedTraverseSyntax
- with ApplicativeErrorExtension
- with TrySyntax
+trait AllSyntaxBinCompat0 extends UnorderedTraverseSyntax with ApplicativeErrorExtension with TrySyntax
trait AllSyntaxBinCompat1
- extends FlatMapOptionSyntax
+ extends FlatMapOptionSyntax
with ChoiceSyntax
with NestedSyntax
with BinestedSyntax
@@ -72,12 +69,11 @@ trait AllSyntaxBinCompat1
with RepresentableSyntax
trait AllSyntaxBinCompat2
- extends ParallelTraverseSyntax
+ extends ParallelTraverseSyntax
with TraverseFilterSyntax
with FunctorFilterSyntax
with EitherSyntaxBinCompat0
with ListSyntaxBinCompat0
with ValidatedSyntaxBincompat0
-trait AllSyntaxBinCompat3
- extends UnorderedFoldableSyntax
+trait AllSyntaxBinCompat3 extends UnorderedFoldableSyntax
diff --git a/core/src/main/scala/cats/syntax/applicativeError.scala b/core/src/main/scala/cats/syntax/applicativeError.scala
index 5d2f088235..ab039b3c92 100644
--- a/core/src/main/scala/cats/syntax/applicativeError.scala
+++ b/core/src/main/scala/cats/syntax/applicativeError.scala
@@ -8,38 +8,40 @@ trait ApplicativeErrorSyntax {
implicit final def catsSyntaxApplicativeErrorId[E](e: E): ApplicativeErrorIdOps[E] =
new ApplicativeErrorIdOps(e)
- implicit final def catsSyntaxApplicativeError[F[_], E, A](fa: F[A])(implicit F: ApplicativeError[F, E]): ApplicativeErrorOps[F, E, A] =
+ implicit final def catsSyntaxApplicativeError[F[_], E, A](
+ fa: F[A]
+ )(implicit F: ApplicativeError[F, E]): ApplicativeErrorOps[F, E, A] =
new ApplicativeErrorOps[F, E, A](fa)
}
/**
- * Extension to ApplicativeError in a binary compat way
- */
+ * Extension to ApplicativeError in a binary compat way
+ */
trait ApplicativeErrorExtension {
- implicit final def catsSyntaxApplicativeErrorExtension[F[_], E](F: ApplicativeError[F, E]):
- ApplicativeErrorExtensionOps[F, E] =
- new ApplicativeErrorExtensionOps(F)
+ implicit final def catsSyntaxApplicativeErrorExtension[F[_], E](
+ F: ApplicativeError[F, E]
+ ): ApplicativeErrorExtensionOps[F, E] =
+ new ApplicativeErrorExtensionOps(F)
}
final class ApplicativeErrorExtensionOps[F[_], E](F: ApplicativeError[F, E]) {
-
/**
- * Convert from scala.Option
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.ApplicativeError
- * scala> val F = ApplicativeError[Either[String, ?], String]
- *
- * scala> F.fromOption(Some(1), "Empty")
- * res0: scala.Either[String, Int] = Right(1)
- *
- * scala> F.fromOption(Option.empty[Int], "Empty")
- * res1: scala.Either[String, Int] = Left(Empty)
- * }}}
- */
+ * Convert from scala.Option
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.ApplicativeError
+ * scala> val F = ApplicativeError[Either[String, ?], String]
+ *
+ * scala> F.fromOption(Some(1), "Empty")
+ * res0: scala.Either[String, Int] = Right(1)
+ *
+ * scala> F.fromOption(Option.empty[Int], "Empty")
+ * res1: scala.Either[String, Int] = Left(Empty)
+ * }}}
+ */
def fromOption[A](oa: Option[A], ifEmpty: => E): F[A] =
ApplicativeError.liftFromOption(oa, ifEmpty)(F)
@@ -61,7 +63,7 @@ final class ApplicativeErrorExtensionOps[F[_], E](F: ApplicativeError[F, E]) {
def fromValidated[A](x: Validated[E, A]): F[A] =
x match {
case Invalid(e) => F.raiseError(e)
- case Valid(a) => F.pure(a)
+ case Valid(a) => F.pure(a)
}
}
diff --git a/core/src/main/scala/cats/syntax/apply.scala b/core/src/main/scala/cats/syntax/apply.scala
index 9c9abd38bd..9a5999e3a0 100644
--- a/core/src/main/scala/cats/syntax/apply.scala
+++ b/core/src/main/scala/cats/syntax/apply.scala
@@ -15,6 +15,7 @@ trait ApplySyntax extends TupleSemigroupalSyntax {
}
final class ApplyOps[F[_], A](val fa: F[A]) extends AnyVal {
+
/** Alias for [[Apply.productR]]. */
@deprecated("Use *> or productR instead.", "1.0.0-RC2")
@inline def followedBy[B](fb: F[B])(implicit F: Apply[F]): F[B] =
diff --git a/core/src/main/scala/cats/syntax/binested.scala b/core/src/main/scala/cats/syntax/binested.scala
index 32a8016fbc..eeb07527db 100644
--- a/core/src/main/scala/cats/syntax/binested.scala
+++ b/core/src/main/scala/cats/syntax/binested.scala
@@ -4,7 +4,9 @@ package syntax
import cats.data.Binested
trait BinestedSyntax {
- implicit final def catsSyntaxBinestedId[F[_, _], G[_], H[_], A, B](value: F[G[A], H[B]]): BinestedIdOps[F, G, H, A, B] =
+ implicit final def catsSyntaxBinestedId[F[_, _], G[_], H[_], A, B](
+ value: F[G[A], H[B]]
+ ): BinestedIdOps[F, G, H, A, B] =
new BinestedIdOps(value)
}
diff --git a/core/src/main/scala/cats/syntax/bitraverse.scala b/core/src/main/scala/cats/syntax/bitraverse.scala
index d24049def7..35fe883313 100644
--- a/core/src/main/scala/cats/syntax/bitraverse.scala
+++ b/core/src/main/scala/cats/syntax/bitraverse.scala
@@ -7,7 +7,9 @@ trait BitraverseSyntax extends BitraverseSyntax1 {
}
private[syntax] trait BitraverseSyntax1 {
- implicit final def catsSyntaxNestedBitraverse[F[_, _]: Bitraverse, G[_], A, B](fgagb: F[G[A], G[B]]): NestedBitraverseOps[F, G, A, B] =
+ implicit final def catsSyntaxNestedBitraverse[F[_, _]: Bitraverse, G[_], A, B](
+ fgagb: F[G[A], G[B]]
+ ): NestedBitraverseOps[F, G, A, B] =
new NestedBitraverseOps[F, G, A, B](fgagb)
}
diff --git a/core/src/main/scala/cats/syntax/comonad.scala b/core/src/main/scala/cats/syntax/comonad.scala
index 77d413ebcc..1229e10dd1 100644
--- a/core/src/main/scala/cats/syntax/comonad.scala
+++ b/core/src/main/scala/cats/syntax/comonad.scala
@@ -2,4 +2,3 @@ package cats
package syntax
trait ComonadSyntax extends Comonad.ToComonadOps
-
diff --git a/core/src/main/scala/cats/syntax/contravariant.scala b/core/src/main/scala/cats/syntax/contravariant.scala
index 40b26eb99d..e721094822 100644
--- a/core/src/main/scala/cats/syntax/contravariant.scala
+++ b/core/src/main/scala/cats/syntax/contravariant.scala
@@ -4,4 +4,3 @@ package syntax
import cats.Contravariant
trait ContravariantSyntax extends Contravariant.ToContravariantOps
-
diff --git a/core/src/main/scala/cats/syntax/contravariantMonoidal.scala b/core/src/main/scala/cats/syntax/contravariantMonoidal.scala
index 2e4f62a5c3..122f783065 100644
--- a/core/src/main/scala/cats/syntax/contravariantMonoidal.scala
+++ b/core/src/main/scala/cats/syntax/contravariantMonoidal.scala
@@ -4,7 +4,9 @@ package syntax
import cats.ContravariantMonoidal
trait ContravariantMonoidalSyntax {
- implicit final def catsSyntaxContravariantMonoidal[F[_], A](fa: F[A])(implicit F: ContravariantMonoidal[F]): ContravariantMonoidalOps[F, A] =
+ implicit final def catsSyntaxContravariantMonoidal[F[_], A](
+ fa: F[A]
+ )(implicit F: ContravariantMonoidal[F]): ContravariantMonoidalOps[F, A] =
new ContravariantMonoidalOps[F, A] {
type TypeClassType = ContravariantMonoidal[F]
diff --git a/core/src/main/scala/cats/syntax/contravariantSemigroupal.scala b/core/src/main/scala/cats/syntax/contravariantSemigroupal.scala
index 1c583d1467..0fc66f4999 100644
--- a/core/src/main/scala/cats/syntax/contravariantSemigroupal.scala
+++ b/core/src/main/scala/cats/syntax/contravariantSemigroupal.scala
@@ -4,7 +4,9 @@ package syntax
import cats.ContravariantSemigroupal
trait ContravariantSemigroupalSyntax extends TupleSemigroupalSyntax {
- implicit final def catsSyntaxContravariantSemigroupal[F[_], A](fa: F[A])(implicit F: ContravariantSemigroupal[F]): ContravariantSemigroupal.Ops[F, A] =
+ implicit final def catsSyntaxContravariantSemigroupal[F[_], A](
+ fa: F[A]
+ )(implicit F: ContravariantSemigroupal[F]): ContravariantSemigroupal.Ops[F, A] =
new ContravariantSemigroupal.Ops[F, A] {
type TypeClassType = ContravariantSemigroupal[F]
diff --git a/core/src/main/scala/cats/syntax/either.scala b/core/src/main/scala/cats/syntax/either.scala
index 8039a03cfe..8fa82ca1d7 100644
--- a/core/src/main/scala/cats/syntax/either.scala
+++ b/core/src/main/scala/cats/syntax/either.scala
@@ -10,7 +10,8 @@ import EitherSyntax._
trait EitherSyntax {
implicit final def catsSyntaxEither[A, B](eab: Either[A, B]): EitherOps[A, B] = new EitherOps(eab)
- implicit final def catsSyntaxEitherObject(either: Either.type): EitherObjectOps = new EitherObjectOps(either) // scalastyle:off ensure.single.space.after.token
+ implicit final def catsSyntaxEitherObject(either: Either.type): EitherObjectOps =
+ new EitherObjectOps(either) // scalastyle:off ensure.single.space.after.token
implicit final def catsSyntaxLeft[A, B](left: Left[A, B]): LeftOps[A, B] = new LeftOps(left)
@@ -24,7 +25,7 @@ object EitherSyntax {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[syntax] final class CatchOnlyPartiallyApplied[T](val dummy: Boolean = true ) extends AnyVal {
+ final private[syntax] class CatchOnlyPartiallyApplied[T](val dummy: Boolean = true) extends AnyVal {
def apply[A](f: => A)(implicit CT: ClassTag[T], NT: NotNull[T]): Either[T, A] =
try {
Right(f)
@@ -155,7 +156,7 @@ final class EitherOps[A, B](val eab: Either[A, B]) extends AnyVal {
}
def compare[AA >: A, BB >: B](that: Either[AA, BB])(implicit AA: Order[AA], BB: Order[BB]): Int = eab match {
- case Left(a1) =>
+ case Left(a1) =>
that match {
case Left(a2) => AA.compare(a1, a2)
case Right(_) => -1
@@ -167,8 +168,9 @@ final class EitherOps[A, B](val eab: Either[A, B]) extends AnyVal {
}
}
- def partialCompare[AA >: A, BB >: B](that: Either[AA, BB])(implicit AA: PartialOrder[AA], BB: PartialOrder[BB]): Double = eab match {
- case Left(a1) =>
+ def partialCompare[AA >: A, BB >: B](that: Either[AA, BB])(implicit AA: PartialOrder[AA],
+ BB: PartialOrder[BB]): Double = eab match {
+ case Left(a1) =>
that match {
case Left(a2) => AA.partialCompare(a1, a2)
case Right(_) => -1
@@ -181,7 +183,7 @@ final class EitherOps[A, B](val eab: Either[A, B]) extends AnyVal {
}
def ===[AA >: A, BB >: B](that: Either[AA, BB])(implicit AA: Eq[AA], BB: Eq[BB]): Boolean = eab match {
- case Left(a1) =>
+ case Left(a1) =>
that match {
case Left(a2) => AA.eqv(a1, a2)
case Right(_) => false
@@ -242,10 +244,11 @@ final class EitherOps[A, B](val eab: Either[A, B]) extends AnyVal {
*/
final def combine[AA >: A, BB >: B](that: Either[AA, BB])(implicit BB: Semigroup[BB]): Either[AA, BB] = eab match {
case left @ Left(_) => left
- case Right(b1) => that match {
- case left @ Left(_) => left
- case Right(b2) => Right(BB.combine(b1, b2))
- }
+ case Right(b1) =>
+ that match {
+ case left @ Left(_) => left
+ case Right(b2) => Right(BB.combine(b1, b2))
+ }
}
def show[AA >: A, BB >: B](implicit AA: Show[AA], BB: Show[BB]): String = eab match {
@@ -277,20 +280,19 @@ final class EitherOps[A, B](val eab: Either[A, B]) extends AnyVal {
ev.fromEither(eab)
/**
- * lift the `Either` into a `F[_]` with `ApplicativeError[F, A]` instance
- *
- * {{{
- * scala> import cats.implicits._
- * scala> import cats.data.EitherT
- * scala> val e: Either[String, Int] = Right(3)
- * scala> e.liftTo[EitherT[Option, CharSequence, ?]]
- * res0: cats.data.EitherT[Option, CharSequence, Int] = EitherT(Some(Right(3)))
- * }}}
- */
+ * lift the `Either` into a `F[_]` with `ApplicativeError[F, A]` instance
+ *
+ * {{{
+ * scala> import cats.implicits._
+ * scala> import cats.data.EitherT
+ * scala> val e: Either[String, Int] = Right(3)
+ * scala> e.liftTo[EitherT[Option, CharSequence, ?]]
+ * res0: cats.data.EitherT[Option, CharSequence, Int] = EitherT(Some(Right(3)))
+ * }}}
+ */
def liftTo[F[_]](implicit F: ApplicativeError[F, _ >: A]): F[B] = F.fromEither(eab)
}
-
final class EitherObjectOps(val either: Either.type) extends AnyVal { // scalastyle:off ensure.single.space.after.token
def left[A, B](a: A): Either[A, B] = Left(a)
@@ -348,19 +350,20 @@ final class EitherObjectOps(val either: Either.type) extends AnyVal { // scalast
}
}
-
-
final class LeftOps[A, B](val left: Left[A, B]) extends AnyVal {
+
/** Cast the right type parameter of the `Left`. */
def rightCast[C]: Either[A, C] = left.asInstanceOf[Either[A, C]]
}
final class RightOps[A, B](val right: Right[A, B]) extends AnyVal {
+
/** Cast the left type parameter of the `Right`. */
def leftCast[C]: Either[C, B] = right.asInstanceOf[Either[C, B]]
}
final class EitherIdOps[A](val obj: A) extends AnyVal {
+
/** Wrap a value in `Left`. */
def asLeft[B]: Either[A, B] = Left(obj)
@@ -402,6 +405,7 @@ trait EitherSyntaxBinCompat0 {
}
final class EitherIdOpsBinCompat0[A](val value: A) extends AnyVal {
+
/**
* Wrap a value to a left EitherNec
*
@@ -428,6 +432,7 @@ final class EitherIdOpsBinCompat0[A](val value: A) extends AnyVal {
}
final class EitherOpsBinCompat0[A, B](val value: Either[A, B]) extends AnyVal {
+
/** Returns a [[cats.data.ValidatedNec]] representation of this disjunction with the `Left` value
* as a single element on the `Invalid` side of the [[cats.data.NonEmptyList]]. */
def toValidatedNec: ValidatedNec[A, B] = value match {
diff --git a/core/src/main/scala/cats/syntax/eq.scala b/core/src/main/scala/cats/syntax/eq.scala
index 7b40bad96a..fed77872a7 100644
--- a/core/src/main/scala/cats/syntax/eq.scala
+++ b/core/src/main/scala/cats/syntax/eq.scala
@@ -4,6 +4,7 @@ package syntax
import cats.macros.Ops
trait EqSyntax {
+
/** not final so it can be disabled in favor of scalactic equality in tests */
implicit def catsSyntaxEq[A: Eq](a: A): EqOps[A] =
new EqOps[A](a)
diff --git a/core/src/main/scala/cats/syntax/flatMap.scala b/core/src/main/scala/cats/syntax/flatMap.scala
index 4bf1398bed..7669874917 100644
--- a/core/src/main/scala/cats/syntax/flatMap.scala
+++ b/core/src/main/scala/cats/syntax/flatMap.scala
@@ -34,8 +34,6 @@ final class FlatMapOps[F[_], A](val fa: F[A]) extends AnyVal {
@deprecated("Use <* instead", "1.0.0-RC1")
def <<[B](fb: F[B])(implicit F: FlatMap[F]): F[A] = F.productL(fa)(fb)
-
-
@deprecated("Use productREval instead.", "1.0.0-RC2")
def followedByEval[B](fb: Eval[F[B]])(implicit F: FlatMap[F]): F[B] =
F.productREval(fa)(fb)
@@ -106,7 +104,6 @@ final class IfMOps[F[_]](val fa: F[Boolean]) extends AnyVal {
def ifM[B](ifTrue: => F[B], ifFalse: => F[B])(implicit F: FlatMap[F]): F[B] = F.ifM(fa)(ifTrue, ifFalse)
}
-
final class FlatMapIdOps[A](val a: A) extends AnyVal {
/**
@@ -128,7 +125,9 @@ final class FlatMapIdOps[A](val a: A) extends AnyVal {
* a new state and repeat.
*/
def iterateForeverM[F[_], B](f: A => F[A])(implicit F: FlatMap[F]): F[B] =
- tailRecM[F, B](f.andThen { fa => F.map(fa)(Left(_): Either[A, B]) })
+ tailRecM[F, B](f.andThen { fa =>
+ F.map(fa)(Left(_): Either[A, B])
+ })
}
trait FlatMapOptionSyntax {
@@ -137,6 +136,7 @@ trait FlatMapOptionSyntax {
}
final class FlatMapOptionOps[F[_], A](val fopta: F[Option[A]]) extends AnyVal {
+
/**
* This repeats an F until we get defined values. This can be useful
* for polling type operations on State (or RNG) Monads, or in effect
@@ -145,7 +145,7 @@ final class FlatMapOptionOps[F[_], A](val fopta: F[Option[A]]) extends AnyVal {
def untilDefinedM(implicit F: FlatMap[F]): F[A] = {
val leftUnit: Either[Unit, A] = Left(())
val feither: F[Either[Unit, A]] = F.map(fopta) {
- case None => leftUnit
+ case None => leftUnit
case Some(a) => Right(a)
}
F.tailRecM(())(_ => feither)
diff --git a/core/src/main/scala/cats/syntax/foldable.scala b/core/src/main/scala/cats/syntax/foldable.scala
index b54004a0d6..5a618662df 100644
--- a/core/src/main/scala/cats/syntax/foldable.scala
+++ b/core/src/main/scala/cats/syntax/foldable.scala
@@ -34,7 +34,7 @@ final class FoldableOps[F[_], A](val fa: F[A]) extends AnyVal {
def foldr[B](b: Eval[B])(f: (A, Eval[B]) => Eval[B])(implicit F: Foldable[F]): Eval[B] =
F.foldRight(fa, b)(f)
- /**
+ /**
* test if `F[A]` contains an `A`, named contains_ to avoid conflict with existing contains which uses universal equality
*
* Example:
@@ -51,7 +51,7 @@ final class FoldableOps[F[_], A](val fa: F[A]) extends AnyVal {
def contains_(v: A)(implicit ev: Eq[A], F: Foldable[F]): Boolean =
F.exists(fa)(ev.eqv(_, v))
- /**
+ /**
* Intercalate with a prefix and a suffix
*
* Example:
@@ -66,7 +66,7 @@ final class FoldableOps[F[_], A](val fa: F[A]) extends AnyVal {
def foldSmash(prefix: A, delim: A, suffix: A)(implicit A: Monoid[A], F: Foldable[F]): A =
A.combine(prefix, A.combine(F.intercalate(fa, delim), suffix))
- /**
+ /**
* Make a string using `Show`, named as `mkString_` to avoid conflict
*
* Example:
@@ -82,8 +82,8 @@ final class FoldableOps[F[_], A](val fa: F[A]) extends AnyVal {
* }}}
*/
def mkString_(prefix: String, delim: String, suffix: String)(implicit A: Show[A], F: Foldable[F]): String = {
- val b = F.foldLeft(fa, new StringBuilder){ (builder, a) =>
- builder append A.show(a) append delim
+ val b = F.foldLeft(fa, new StringBuilder) { (builder, a) =>
+ builder.append(A.show(a)).append(delim)
}
prefix + {
if (b.isEmpty)
@@ -94,97 +94,101 @@ final class FoldableOps[F[_], A](val fa: F[A]) extends AnyVal {
}
/**
- * Monadic version of `collectFirstSome`.
- *
- * If there are no elements, the result is `None`. `collectFirstSomeM` short-circuits,
- * i.e. once a Some element is found, no further effects are produced.
- *
- * For example:
- * {{{
- * scala> import cats.implicits._
- * scala> def parseInt(s: String): Either[String, Int] = Either.catchOnly[NumberFormatException](s.toInt).leftMap(_.getMessage)
- * scala> val keys1 = List("1", "2", "4", "5")
- * scala> val map1 = Map(4 -> "Four", 5 -> "Five")
- * scala> keys1.collectFirstSomeM(parseInt(_) map map1.get)
- * res0: scala.util.Either[String,Option[String]] = Right(Some(Four))
- *
- * scala> val map2 = Map(6 -> "Six", 7 -> "Seven")
- * scala> keys1.collectFirstSomeM(parseInt(_) map map2.get)
- * res1: scala.util.Either[String,Option[String]] = Right(None)
- *
- * scala> val keys2 = List("1", "x", "4", "5")
- * scala> keys2.collectFirstSomeM(parseInt(_) map map1.get)
- * res2: scala.util.Either[String,Option[String]] = Left(For input string: "x")
- *
- * scala> val keys3 = List("1", "2", "4", "x")
- * scala> keys3.collectFirstSomeM(parseInt(_) map map1.get)
- * res3: scala.util.Either[String,Option[String]] = Right(Some(Four))
- * }}}
- */
+ * Monadic version of `collectFirstSome`.
+ *
+ * If there are no elements, the result is `None`. `collectFirstSomeM` short-circuits,
+ * i.e. once a Some element is found, no further effects are produced.
+ *
+ * For example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> def parseInt(s: String): Either[String, Int] = Either.catchOnly[NumberFormatException](s.toInt).leftMap(_.getMessage)
+ * scala> val keys1 = List("1", "2", "4", "5")
+ * scala> val map1 = Map(4 -> "Four", 5 -> "Five")
+ * scala> keys1.collectFirstSomeM(parseInt(_) map map1.get)
+ * res0: scala.util.Either[String,Option[String]] = Right(Some(Four))
+ *
+ * scala> val map2 = Map(6 -> "Six", 7 -> "Seven")
+ * scala> keys1.collectFirstSomeM(parseInt(_) map map2.get)
+ * res1: scala.util.Either[String,Option[String]] = Right(None)
+ *
+ * scala> val keys2 = List("1", "x", "4", "5")
+ * scala> keys2.collectFirstSomeM(parseInt(_) map map1.get)
+ * res2: scala.util.Either[String,Option[String]] = Left(For input string: "x")
+ *
+ * scala> val keys3 = List("1", "2", "4", "x")
+ * scala> keys3.collectFirstSomeM(parseInt(_) map map1.get)
+ * res3: scala.util.Either[String,Option[String]] = Right(Some(Four))
+ * }}}
+ */
def collectFirstSomeM[G[_], B](f: A => G[Option[B]])(implicit F: Foldable[F], G: Monad[G]): G[Option[B]] =
G.tailRecM(Foldable.Source.fromFoldable(fa))(_.uncons match {
- case Some((a, src)) => G.map(f(a)) {
- case None => Left(src.value)
- case s => Right(s)
- }
+ case Some((a, src)) =>
+ G.map(f(a)) {
+ case None => Left(src.value)
+ case s => Right(s)
+ }
case None => G.pure(Right(None))
})
/**
- * Find the first element matching the effectful predicate, if one exists.
- *
- * If there are no elements, the result is `None`. `findM` short-circuits,
- * i.e. once an element is found, no further effects are produced.
- *
- * For example:
- * {{{
- * scala> import cats.implicits._
- * scala> val list = List(1,2,3,4)
- * scala> list.findM(n => (n >= 2).asRight[String])
- * res0: Either[String,Option[Int]] = Right(Some(2))
- *
- * scala> list.findM(n => (n > 4).asRight[String])
- * res1: Either[String,Option[Int]] = Right(None)
- *
- * scala> list.findM(n => Either.cond(n < 3, n >= 2, "error"))
- * res2: Either[String,Option[Int]] = Right(Some(2))
- *
- * scala> list.findM(n => Either.cond(n < 3, false, "error"))
- * res3: Either[String,Option[Int]] = Left(error)
- * }}}
- */
+ * Find the first element matching the effectful predicate, if one exists.
+ *
+ * If there are no elements, the result is `None`. `findM` short-circuits,
+ * i.e. once an element is found, no further effects are produced.
+ *
+ * For example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val list = List(1,2,3,4)
+ * scala> list.findM(n => (n >= 2).asRight[String])
+ * res0: Either[String,Option[Int]] = Right(Some(2))
+ *
+ * scala> list.findM(n => (n > 4).asRight[String])
+ * res1: Either[String,Option[Int]] = Right(None)
+ *
+ * scala> list.findM(n => Either.cond(n < 3, n >= 2, "error"))
+ * res2: Either[String,Option[Int]] = Right(Some(2))
+ *
+ * scala> list.findM(n => Either.cond(n < 3, false, "error"))
+ * res3: Either[String,Option[Int]] = Left(error)
+ * }}}
+ */
def findM[G[_]](p: A => G[Boolean])(implicit F: Foldable[F], G: Monad[G]): G[Option[A]] =
G.tailRecM(Foldable.Source.fromFoldable(fa))(_.uncons match {
case Some((a, src)) => G.map(p(a))(if (_) Right(Some(a)) else Left(src.value))
- case None => G.pure(Right(None))
+ case None => G.pure(Right(None))
})
/**
- * Tear down a subset of this structure using a `PartialFunction`.
- *{{{
- * scala> import cats.implicits._
- * scala> val xs = List(1, 2, 3, 4)
- * scala> xs.collectFold { case n if n % 2 == 0 => n }
- * res0: Int = 6
- *}}}
- */
+ * Tear down a subset of this structure using a `PartialFunction`.
+ *{{{
+ * scala> import cats.implicits._
+ * scala> val xs = List(1, 2, 3, 4)
+ * scala> xs.collectFold { case n if n % 2 == 0 => n }
+ * res0: Int = 6
+ *}}}
+ */
def collectFold[M](f: PartialFunction[A, M])(implicit F: Foldable[F], M: Monoid[M]): M =
F.foldLeft(fa, M.empty)((acc, a) ⇒ M.combine(acc, f.applyOrElse(a, (_: A) ⇒ M.empty)))
/**
- * Tear down a subset of this structure using a `A => Option[M]`.
- *{{{
- * scala> import cats.implicits._
- * scala> val xs = List(1, 2, 3, 4)
- * scala> def f(n: Int): Option[Int] = if (n % 2 == 0) Some(n) else None
- * scala> xs.collectSomeFold(f)
- * res0: Int = 6
- *}}}
- */
+ * Tear down a subset of this structure using a `A => Option[M]`.
+ *{{{
+ * scala> import cats.implicits._
+ * scala> val xs = List(1, 2, 3, 4)
+ * scala> def f(n: Int): Option[Int] = if (n % 2 == 0) Some(n) else None
+ * scala> xs.collectSomeFold(f)
+ * res0: Int = 6
+ *}}}
+ */
def collectSomeFold[M](f: A ⇒ Option[M])(implicit F: Foldable[F], M: Monoid[M]): M =
- F.foldLeft(fa, M.empty)((acc, a) ⇒ f(a) match {
- case Some(x) ⇒ M.combine(acc, x)
- case None ⇒ acc
- })
+ F.foldLeft(fa, M.empty)(
+ (acc, a) ⇒
+ f(a) match {
+ case Some(x) ⇒ M.combine(acc, x)
+ case None ⇒ acc
+ }
+ )
}
diff --git a/core/src/main/scala/cats/syntax/functor.scala b/core/src/main/scala/cats/syntax/functor.scala
index f8f4fb9fe7..fcb9d1ce46 100644
--- a/core/src/main/scala/cats/syntax/functor.scala
+++ b/core/src/main/scala/cats/syntax/functor.scala
@@ -2,4 +2,3 @@ package cats
package syntax
trait FunctorSyntax extends Functor.ToFunctorOps
-
diff --git a/core/src/main/scala/cats/syntax/hash.scala b/core/src/main/scala/cats/syntax/hash.scala
index 57adf774c4..93333515f1 100644
--- a/core/src/main/scala/cats/syntax/hash.scala
+++ b/core/src/main/scala/cats/syntax/hash.scala
@@ -11,6 +11,7 @@ trait HashSyntax {
}
final class HashOps[A: Hash](a: A) {
+
/**
* Gets the hash code of this object given an implicit `Hash` instance.
*/
diff --git a/core/src/main/scala/cats/syntax/ior.scala b/core/src/main/scala/cats/syntax/ior.scala
index 41ab0bca1b..73e1d467c6 100644
--- a/core/src/main/scala/cats/syntax/ior.scala
+++ b/core/src/main/scala/cats/syntax/ior.scala
@@ -7,31 +7,32 @@ trait IorSyntax {
}
final class IorIdOps[A](val a: A) extends AnyVal {
+
/**
- * Wrap a value in `Ior.Right`.
- *
- * Example:
- * {{{
- * scala> import cats.data.Ior
- * scala> import cats.implicits._
- *
- * scala> "hello".rightIor[String]
- * res0: Ior[String, String] = Right(hello)
- * }}}
- */
+ * Wrap a value in `Ior.Right`.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.Ior
+ * scala> import cats.implicits._
+ *
+ * scala> "hello".rightIor[String]
+ * res0: Ior[String, String] = Right(hello)
+ * }}}
+ */
def rightIor[B]: Ior[B, A] = Ior.right(a)
/**
- * Wrap a value in `Ior.Left`.
- *
- * Example:
- * {{{
- * scala> import cats.data.Ior
- * scala> import cats.implicits._
- *
- * scala> "error".leftIor[String]
- * res0: Ior[String, String] = Left(error)
- * }}}
- */
+ * Wrap a value in `Ior.Left`.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.Ior
+ * scala> import cats.implicits._
+ *
+ * scala> "error".leftIor[String]
+ * res0: Ior[String, String] = Left(error)
+ * }}}
+ */
def leftIor[B]: Ior[A, B] = Ior.left(a)
}
diff --git a/core/src/main/scala/cats/syntax/list.scala b/core/src/main/scala/cats/syntax/list.scala
index 820c906168..0c2221bcd3 100644
--- a/core/src/main/scala/cats/syntax/list.scala
+++ b/core/src/main/scala/cats/syntax/list.scala
@@ -11,39 +11,39 @@ trait ListSyntax {
final class ListOps[A](val la: List[A]) extends AnyVal {
/**
- * Returns an Option of NonEmptyList from a List
- *
- * Example:
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> import cats.implicits._
- *
- * scala> val result1: List[Int] = List(1, 2)
- * scala> result1.toNel
- * res0: Option[NonEmptyList[Int]] = Some(NonEmptyList(1, 2))
- *
- * scala> val result2: List[Int] = List.empty[Int]
- * scala> result2.toNel
- * res1: Option[NonEmptyList[Int]] = None
- * }}}
- */
+ * Returns an Option of NonEmptyList from a List
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> import cats.implicits._
+ *
+ * scala> val result1: List[Int] = List(1, 2)
+ * scala> result1.toNel
+ * res0: Option[NonEmptyList[Int]] = Some(NonEmptyList(1, 2))
+ *
+ * scala> val result2: List[Int] = List.empty[Int]
+ * scala> result2.toNel
+ * res1: Option[NonEmptyList[Int]] = None
+ * }}}
+ */
def toNel: Option[NonEmptyList[A]] = NonEmptyList.fromList(la)
/**
- * Groups elements inside this `List` according to the `Order` of the keys
- * produced by the given mapping function.
- *
- * {{{
- * scala> import cats.data.NonEmptyList
- * scala> import scala.collection.immutable.SortedMap
- * scala> import cats.implicits._
- *
- * scala> val list = List(12, -2, 3, -5)
- *
- * scala> list.groupByNel(_ >= 0)
- * res0: SortedMap[Boolean, NonEmptyList[Int]] = Map(false -> NonEmptyList(-2, -5), true -> NonEmptyList(12, 3))
- * }}}
- */
+ * Groups elements inside this `List` according to the `Order` of the keys
+ * produced by the given mapping function.
+ *
+ * {{{
+ * scala> import cats.data.NonEmptyList
+ * scala> import scala.collection.immutable.SortedMap
+ * scala> import cats.implicits._
+ *
+ * scala> val list = List(12, -2, 3, -5)
+ *
+ * scala> list.groupByNel(_ >= 0)
+ * res0: SortedMap[Boolean, NonEmptyList[Int]] = Map(false -> NonEmptyList(-2, -5), true -> NonEmptyList(12, 3))
+ * }}}
+ */
def groupByNel[B](f: A => B)(implicit B: Order[B]): SortedMap[B, NonEmptyList[A]] = {
implicit val ordering = B.toOrdering
toNel.fold(SortedMap.empty[B, NonEmptyList[A]])(_.groupBy(f))
diff --git a/core/src/main/scala/cats/syntax/monad.scala b/core/src/main/scala/cats/syntax/monad.scala
index efdd15235f..224fc52c13 100644
--- a/core/src/main/scala/cats/syntax/monad.scala
+++ b/core/src/main/scala/cats/syntax/monad.scala
@@ -20,12 +20,12 @@ final class MonadOps[F[_], A](val fa: F[A]) extends AnyVal {
final class MonadIdOps[A](val a: A) extends AnyVal {
/**
- * Iterative application of `f` while `p` holds.
- */
+ * Iterative application of `f` while `p` holds.
+ */
def iterateWhileM[F[_]](f: A => F[A])(p: A => Boolean)(implicit M: Monad[F]): F[A] = M.iterateWhileM(a)(f)(p)
/**
- * Iterative application of `f` until `p` holds.
- */
+ * Iterative application of `f` until `p` holds.
+ */
def iterateUntilM[F[_]](f: A => F[A])(p: A => Boolean)(implicit M: Monad[F]): F[A] = M.iterateUntilM(a)(f)(p)
}
diff --git a/core/src/main/scala/cats/syntax/monadError.scala b/core/src/main/scala/cats/syntax/monadError.scala
index 19f2c58432..fd374464e9 100644
--- a/core/src/main/scala/cats/syntax/monadError.scala
+++ b/core/src/main/scala/cats/syntax/monadError.scala
@@ -5,7 +5,9 @@ trait MonadErrorSyntax {
implicit final def catsSyntaxMonadError[F[_], E, A](fa: F[A])(implicit F: MonadError[F, E]): MonadErrorOps[F, E, A] =
new MonadErrorOps(fa)
- implicit final def catsSyntaxMonadErrorRethrow[F[_], E, A](fea: F[Either[E, A]])(implicit F: MonadError[F, E]): MonadErrorRethrowOps[F, E, A] =
+ implicit final def catsSyntaxMonadErrorRethrow[F[_], E, A](
+ fea: F[Either[E, A]]
+ )(implicit F: MonadError[F, E]): MonadErrorRethrowOps[F, E, A] =
new MonadErrorRethrowOps(fea)
}
diff --git a/core/src/main/scala/cats/syntax/nested.scala b/core/src/main/scala/cats/syntax/nested.scala
index f0fadbc960..16a96a4da1 100644
--- a/core/src/main/scala/cats/syntax/nested.scala
+++ b/core/src/main/scala/cats/syntax/nested.scala
@@ -9,19 +9,18 @@ trait NestedSyntax {
}
final class NestedIdOps[F[_], G[_], A](private[syntax] val value: F[G[A]]) extends AnyVal {
+
/**
- * Wrap a value in `Nested`.
- *
- * `x.nested` is equivalent to `Nested(x)`.
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> List(Some(3), None).nested.map(_+1).value
- * res0: List[Option[Int]] = List(Some(4), None)
- * }}}
- */
+ * Wrap a value in `Nested`.
+ *
+ * `x.nested` is equivalent to `Nested(x)`.
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> List(Some(3), None).nested.map(_+1).value
+ * res0: List[Option[Int]] = List(Some(4), None)
+ * }}}
+ */
def nested: Nested[F, G, A] = Nested[F, G, A](value)
}
-
-
diff --git a/core/src/main/scala/cats/syntax/option.scala b/core/src/main/scala/cats/syntax/option.scala
index 5bd23b9b03..3b361b2bbb 100644
--- a/core/src/main/scala/cats/syntax/option.scala
+++ b/core/src/main/scala/cats/syntax/option.scala
@@ -1,7 +1,7 @@
package cats
package syntax
-import cats.data.{Ior, OptionT, Validated, ValidatedNel, ValidatedNec}
+import cats.data.{Ior, OptionT, Validated, ValidatedNec, ValidatedNel}
import cats.syntax.OptionOps.LiftToPartiallyApplied
trait OptionSyntax {
@@ -11,6 +11,7 @@ trait OptionSyntax {
}
final class OptionIdOps[A](val a: A) extends AnyVal {
+
/**
* Wrap a value in `Some`.
*
@@ -28,6 +29,7 @@ final class OptionIdOps[A](val a: A) extends AnyVal {
}
final class OptionOps[A](val oa: Option[A]) extends AnyVal {
+
/**
* If the `Option` is a `Some`, return its value in a [[cats.data.Validated.Invalid]].
* If the `Option` is `None`, return the provided `B` value in a
@@ -69,29 +71,31 @@ final class OptionOps[A](val oa: Option[A]) extends AnyVal {
* res1: ValidatedNel[String, Int] = Valid(3)
* }}}
*/
- def toInvalidNel[B](b: => B): ValidatedNel[A, B] = oa.fold[ValidatedNel[A, B]](Validated.Valid(b))(Validated.invalidNel)
+ def toInvalidNel[B](b: => B): ValidatedNel[A, B] =
+ oa.fold[ValidatedNel[A, B]](Validated.Valid(b))(Validated.invalidNel)
/**
- * If the `Option` is a `Some`, wrap its value in a [[cats.data.Chain]]
- * and return it in a [[cats.data.Validated.Invalid]].
- * If the `Option` is `None`, return the provided `B` value in a
- * [[cats.data.Validated.Valid]].
- *
- * Example:
- * {{{
- * scala> import cats.data.ValidatedNec
- * scala> import cats.implicits._
- *
- * scala> val error1: Option[String] = Some("error!")
- * scala> error1.toInvalidNec(3)
- * res0: ValidatedNec[String, Int] = Invalid(Chain(error!))
- *
- * scala> val error2: Option[String] = None
- * scala> error2.toInvalidNec(3)
- * res1: ValidatedNec[String, Int] = Valid(3)
- * }}}
- */
- def toInvalidNec[B](b: => B): ValidatedNec[A, B] = oa.fold[ValidatedNec[A, B]](Validated.Valid(b))(Validated.invalidNec)
+ * If the `Option` is a `Some`, wrap its value in a [[cats.data.Chain]]
+ * and return it in a [[cats.data.Validated.Invalid]].
+ * If the `Option` is `None`, return the provided `B` value in a
+ * [[cats.data.Validated.Valid]].
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.ValidatedNec
+ * scala> import cats.implicits._
+ *
+ * scala> val error1: Option[String] = Some("error!")
+ * scala> error1.toInvalidNec(3)
+ * res0: ValidatedNec[String, Int] = Invalid(Chain(error!))
+ *
+ * scala> val error2: Option[String] = None
+ * scala> error2.toInvalidNec(3)
+ * res1: ValidatedNec[String, Int] = Valid(3)
+ * }}}
+ */
+ def toInvalidNec[B](b: => B): ValidatedNec[A, B] =
+ oa.fold[ValidatedNec[A, B]](Validated.Valid(b))(Validated.invalidNec)
/**
* If the `Option` is a `Some`, return its value in a [[cats.data.Validated.Valid]].
@@ -133,67 +137,69 @@ final class OptionOps[A](val oa: Option[A]) extends AnyVal {
* res1: ValidatedNel[String, Int] = Invalid(NonEmptyList(error!))
* }}}
*/
- def toValidNel[B](b: => B): ValidatedNel[B, A] = oa.fold[ValidatedNel[B, A]](Validated.invalidNel(b))(Validated.Valid(_))
+ def toValidNel[B](b: => B): ValidatedNel[B, A] =
+ oa.fold[ValidatedNel[B, A]](Validated.invalidNel(b))(Validated.Valid(_))
/**
- * If the `Option` is a `Some`, return its value in a [[cats.data.Validated.Valid]].
- * If the `Option` is `None`, wrap the provided `B` value in a [[cats.data.Chain]]
- * and return the result in a [[cats.data.Validated.Invalid]].
- *
- * Example:
- * {{{
- * scala> import cats.data.ValidatedNec
- * scala> import cats.implicits._
- *
- * scala> val result1: Option[Int] = Some(3)
- * scala> result1.toValidNec("error!")
- * res0: ValidatedNec[String, Int] = Valid(3)
- *
- * scala> val result2: Option[Int] = None
- * scala> result2.toValidNec("error!")
- * res1: ValidatedNec[String, Int] = Invalid(Chain(error!))
- * }}}
- */
- def toValidNec[B](b: => B): ValidatedNec[B, A] = oa.fold[ValidatedNec[B, A]](Validated.invalidNec(b))(Validated.Valid(_))
+ * If the `Option` is a `Some`, return its value in a [[cats.data.Validated.Valid]].
+ * If the `Option` is `None`, wrap the provided `B` value in a [[cats.data.Chain]]
+ * and return the result in a [[cats.data.Validated.Invalid]].
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.ValidatedNec
+ * scala> import cats.implicits._
+ *
+ * scala> val result1: Option[Int] = Some(3)
+ * scala> result1.toValidNec("error!")
+ * res0: ValidatedNec[String, Int] = Valid(3)
+ *
+ * scala> val result2: Option[Int] = None
+ * scala> result2.toValidNec("error!")
+ * res1: ValidatedNec[String, Int] = Invalid(Chain(error!))
+ * }}}
+ */
+ def toValidNec[B](b: => B): ValidatedNec[B, A] =
+ oa.fold[ValidatedNec[B, A]](Validated.invalidNec(b))(Validated.Valid(_))
/**
- * If the `Option` is a `Some`, return its value in a [[cats.data.Ior.Right]].
- * If the `Option` is `None`, wrap the provided `B` value in a [[cats.data.Ior.Left]]
- *
- * Example:
- * {{{
- * scala> import cats.data.Ior
- * scala> import cats.implicits._
- *
- * scala> val result1: Option[Int] = Some(3)
- * scala> result1.toRightIor("error!")
- * res0: Ior[String, Int] = Right(3)
- *
- * scala> val result2: Option[Int] = None
- * scala> result2.toRightIor("error!")
- * res1: Ior[String, Int] = Left(error!)
- * }}}
- */
+ * If the `Option` is a `Some`, return its value in a [[cats.data.Ior.Right]].
+ * If the `Option` is `None`, wrap the provided `B` value in a [[cats.data.Ior.Left]]
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.Ior
+ * scala> import cats.implicits._
+ *
+ * scala> val result1: Option[Int] = Some(3)
+ * scala> result1.toRightIor("error!")
+ * res0: Ior[String, Int] = Right(3)
+ *
+ * scala> val result2: Option[Int] = None
+ * scala> result2.toRightIor("error!")
+ * res1: Ior[String, Int] = Left(error!)
+ * }}}
+ */
def toRightIor[B](b: => B): Ior[B, A] = oa.fold[Ior[B, A]](Ior.Left(b))(Ior.Right(_))
/**
- * If the `Option` is a `Some`, return its value in a [[cats.data.Ior.Left]].
- * If the `Option` is `None`, wrap the provided `B` value in a [[cats.data.Ior.Right]]
- *
- * Example:
- * {{{
- * scala> import cats.data.Ior
- * scala> import cats.implicits._
- *
- * scala> val result1: Option[String] = Some("error!")
- * scala> result1.toLeftIor(3)
- * res0: Ior[String, Int] = Left(error!)
- *
- * scala> val result2: Option[String] = None
- * scala> result2.toLeftIor(3)
- * res1: Ior[String, Int] = Right(3)
- * }}}
- */
+ * If the `Option` is a `Some`, return its value in a [[cats.data.Ior.Left]].
+ * If the `Option` is `None`, wrap the provided `B` value in a [[cats.data.Ior.Right]]
+ *
+ * Example:
+ * {{{
+ * scala> import cats.data.Ior
+ * scala> import cats.implicits._
+ *
+ * scala> val result1: Option[String] = Some("error!")
+ * scala> result1.toLeftIor(3)
+ * res0: Ior[String, Int] = Left(error!)
+ *
+ * scala> val result2: Option[String] = None
+ * scala> result2.toLeftIor(3)
+ * res1: Ior[String, Int] = Right(3)
+ * }}}
+ */
def toLeftIor[B](b: => B): Ior[A, B] = oa.fold[Ior[A, B]](Ior.Right(b))(Ior.Left(_))
/**
@@ -216,35 +222,35 @@ final class OptionOps[A](val oa: Option[A]) extends AnyVal {
def orEmpty(implicit A: Monoid[A]): A = oa.getOrElse(A.empty)
/**
- * Lift to a F[A] as long as it has an ApplicativeError[F] instance
- *
- * Example:
- * {{{
- * scala> import cats.implicits._
- * scala> Some(1).liftTo[Either[CharSequence, ?]]("Empty")
- * res0: scala.Either[CharSequence, Int] = Right(1)
- *
- * scala> Option.empty[Int].liftTo[Either[CharSequence, ?]]("Empty")
- * res1: scala.Either[CharSequence, Int] = Left(Empty)
- * }}}
- */
+ * Lift to a F[A] as long as it has an ApplicativeError[F] instance
+ *
+ * Example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> Some(1).liftTo[Either[CharSequence, ?]]("Empty")
+ * res0: scala.Either[CharSequence, Int] = Right(1)
+ *
+ * scala> Option.empty[Int].liftTo[Either[CharSequence, ?]]("Empty")
+ * res1: scala.Either[CharSequence, Int] = Left(Empty)
+ * }}}
+ */
def liftTo[F[_]]: LiftToPartiallyApplied[F, A] = new LiftToPartiallyApplied(oa)
/**
- * Transform the `Option` into a [[cats.data.OptionT]] while lifting it into the specified Applicative.
- *
- * {{{
- * scala> import cats.implicits._
- * scala> val op: Option[Int] = Some(3)
- * scala> op.toOptionT[List]
- * res0: cats.data.OptionT[List, Int] = OptionT(List(Some(3)))
- * }}}
- */
+ * Transform the `Option` into a [[cats.data.OptionT]] while lifting it into the specified Applicative.
+ *
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val op: Option[Int] = Some(3)
+ * scala> op.toOptionT[List]
+ * res0: cats.data.OptionT[List, Int] = OptionT(List(Some(3)))
+ * }}}
+ */
def toOptionT[F[_]: Applicative]: OptionT[F, A] = OptionT.fromOption(oa)
}
object OptionOps {
- private[syntax] final class LiftToPartiallyApplied[F[_], A](oa: Option[A]) {
+ final private[syntax] class LiftToPartiallyApplied[F[_], A](oa: Option[A]) {
def apply[E](ifEmpty: => E)(implicit F: ApplicativeError[F, _ >: E]): F[A] =
ApplicativeError.liftFromOption(oa, ifEmpty)
}
diff --git a/core/src/main/scala/cats/syntax/parallel.scala b/core/src/main/scala/cats/syntax/parallel.scala
index 494dcf728d..b7782f5d91 100644
--- a/core/src/main/scala/cats/syntax/parallel.scala
+++ b/core/src/main/scala/cats/syntax/parallel.scala
@@ -1,13 +1,14 @@
package cats.syntax
-import cats.{Monad, Parallel, Traverse, FlatMap, Foldable}
+import cats.{FlatMap, Foldable, Monad, Parallel, Traverse}
trait ParallelSyntax extends TupleParallelSyntax {
- implicit final def catsSyntaxParallelTraverse[T[_]: Traverse, A]
- (ta: T[A]): ParallelTraversableOps[T, A] = new ParallelTraversableOps[T, A](ta)
+ implicit final def catsSyntaxParallelTraverse[T[_]: Traverse, A](ta: T[A]): ParallelTraversableOps[T, A] =
+ new ParallelTraversableOps[T, A](ta)
- implicit final def catsSyntaxParallelSequence[T[_]: Traverse, M[_]: Monad, A]
- (tma: T[M[A]]): ParallelSequenceOps[T, M, A] = new ParallelSequenceOps[T, M, A](tma)
+ implicit final def catsSyntaxParallelSequence[T[_]: Traverse, M[_]: Monad, A](
+ tma: T[M[A]]
+ ): ParallelSequenceOps[T, M, A] = new ParallelSequenceOps[T, M, A](tma)
implicit final def catsSyntaxParallelAp[M[_]: FlatMap, A](ma: M[A]): ParallelApOps[M, A] =
new ParallelApOps[M, A](ma)
@@ -15,24 +16,25 @@ trait ParallelSyntax extends TupleParallelSyntax {
}
trait ParallelFlatSyntax {
- implicit final def catsSyntaxParallelFlatTraverse[T[_]: Traverse: FlatMap, A]
- (ta: T[A]): ParallelFlatTraversableOps[T, A] = new ParallelFlatTraversableOps[T, A](ta)
+ implicit final def catsSyntaxParallelFlatTraverse[T[_]: Traverse: FlatMap, A](
+ ta: T[A]
+ ): ParallelFlatTraversableOps[T, A] = new ParallelFlatTraversableOps[T, A](ta)
- implicit final def catsSyntaxParallelFlatSequence[T[_]: Traverse: FlatMap, M[_]: Monad, A]
- (tmta: T[M[T[A]]]): ParallelFlatSequenceOps[T, M, A] = new ParallelFlatSequenceOps[T, M, A](tmta)
+ implicit final def catsSyntaxParallelFlatSequence[T[_]: Traverse: FlatMap, M[_]: Monad, A](
+ tmta: T[M[T[A]]]
+ ): ParallelFlatSequenceOps[T, M, A] = new ParallelFlatSequenceOps[T, M, A](tmta)
}
trait ParallelTraverseSyntax {
- implicit final def catsSyntaxParallelTraverse_[T[_]: Foldable, A]
- (ta: T[A]): ParallelTraversable_Ops[T, A] = new ParallelTraversable_Ops[T, A](ta)
+ implicit final def catsSyntaxParallelTraverse_[T[_]: Foldable, A](ta: T[A]): ParallelTraversable_Ops[T, A] =
+ new ParallelTraversable_Ops[T, A](ta)
- implicit final def catsSyntaxParallelSequence_[T[_]: Foldable, M[_], A]
- (tma: T[M[A]]): ParallelSequence_Ops[T, M, A] = new ParallelSequence_Ops[T, M, A](tma)
+ implicit final def catsSyntaxParallelSequence_[T[_]: Foldable, M[_], A](tma: T[M[A]]): ParallelSequence_Ops[T, M, A] =
+ new ParallelSequence_Ops[T, M, A](tma)
}
final class ParallelTraversableOps[T[_], A](val ta: T[A]) extends AnyVal {
- def parTraverse[M[_]: Monad, F[_], B]
- (f: A => M[B])(implicit T: Traverse[T], P: Parallel[M, F]): M[T[B]] =
+ def parTraverse[M[_]: Monad, F[_], B](f: A => M[B])(implicit T: Traverse[T], P: Parallel[M, F]): M[T[B]] =
Parallel.parTraverse(ta)(f)
}
@@ -43,26 +45,24 @@ final class ParallelTraversable_Ops[T[_], A](val ta: T[A]) extends AnyVal {
}
final class ParallelFlatTraversableOps[T[_], A](val ta: T[A]) extends AnyVal {
- def parFlatTraverse[M[_]: Monad, F[_], B]
- (f: A => M[T[B]])(implicit T0: Traverse[T], T1 : FlatMap[T], P: Parallel[M, F]): M[T[B]] =
+ def parFlatTraverse[M[_]: Monad, F[_], B](
+ f: A => M[T[B]]
+ )(implicit T0: Traverse[T], T1: FlatMap[T], P: Parallel[M, F]): M[T[B]] =
Parallel.parFlatTraverse(ta)(f)
}
final class ParallelSequenceOps[T[_], M[_], A](val tma: T[M[A]]) extends AnyVal {
- def parSequence[F[_]]
- (implicit M: Monad[M], T: Traverse[T], P: Parallel[M, F]): M[T[A]] =
+ def parSequence[F[_]](implicit M: Monad[M], T: Traverse[T], P: Parallel[M, F]): M[T[A]] =
Parallel.parSequence(tma)
}
final class ParallelSequence_Ops[T[_], M[_], A](val tma: T[M[A]]) extends AnyVal {
- def parSequence_[F[_]]
- (implicit T: Foldable[T], P: Parallel[M, F]): M[Unit] =
+ def parSequence_[F[_]](implicit T: Foldable[T], P: Parallel[M, F]): M[Unit] =
Parallel.parSequence_(tma)
}
final class ParallelFlatSequenceOps[T[_], M[_], A](val tmta: T[M[T[A]]]) extends AnyVal {
- def parFlatSequence[F[_]]
- (implicit M: Monad[M], T0: Traverse[T], T1 : FlatMap[T], P: Parallel[M, F]): M[T[A]] =
+ def parFlatSequence[F[_]](implicit M: Monad[M], T0: Traverse[T], T1: FlatMap[T], P: Parallel[M, F]): M[T[A]] =
Parallel.parFlatSequence(tmta)
}
diff --git a/core/src/main/scala/cats/syntax/reducible.scala b/core/src/main/scala/cats/syntax/reducible.scala
index 5a062a802a..10f4487410 100644
--- a/core/src/main/scala/cats/syntax/reducible.scala
+++ b/core/src/main/scala/cats/syntax/reducible.scala
@@ -1,7 +1,6 @@
package cats
package syntax
-
trait ReducibleSyntax extends Reducible.ToReducibleOps {
implicit final def catsSyntaxNestedReducible[F[_]: Reducible, G[_], A](fga: F[G[A]]): NestedReducibleOps[F, G, A] =
new NestedReducibleOps[F, G, A](fga)
@@ -10,4 +9,3 @@ trait ReducibleSyntax extends Reducible.ToReducibleOps {
final class NestedReducibleOps[F[_], G[_], A](val fga: F[G[A]]) extends AnyVal {
def reduceK(implicit F: Reducible[F], G: SemigroupK[G]): G[A] = F.reduceK(fga)
}
-
diff --git a/core/src/main/scala/cats/syntax/set.scala b/core/src/main/scala/cats/syntax/set.scala
index 0fa5323537..09715d1698 100644
--- a/core/src/main/scala/cats/syntax/set.scala
+++ b/core/src/main/scala/cats/syntax/set.scala
@@ -1,6 +1,6 @@
package cats.syntax
-import scala.collection.immutable.{SortedSet, SortedMap}
+import scala.collection.immutable.{SortedMap, SortedSet}
import cats.data.NonEmptySet
import cats.Order
@@ -11,40 +11,40 @@ trait SetSyntax {
final class SetOps[A](val se: SortedSet[A]) extends AnyVal {
/**
- * Returns an Option of NonEmptySet from a SortedSet
- *
- * Example:
- * {{{
- * scala> import scala.collection.immutable.SortedSet
- * scala> import cats.data.NonEmptySet
- * scala> import cats.implicits._
- *
- * scala> val result1: SortedSet[Int] = SortedSet(1, 2)
- * scala> result1.toNes
- * res0: Option[NonEmptySet[Int]] = Some(TreeSet(1, 2))
- *
- * scala> val result2: SortedSet[Int] = SortedSet.empty[Int]
- * scala> result2.toNes
- * res1: Option[NonEmptySet[Int]] = None
- * }}}
- */
+ * Returns an Option of NonEmptySet from a SortedSet
+ *
+ * Example:
+ * {{{
+ * scala> import scala.collection.immutable.SortedSet
+ * scala> import cats.data.NonEmptySet
+ * scala> import cats.implicits._
+ *
+ * scala> val result1: SortedSet[Int] = SortedSet(1, 2)
+ * scala> result1.toNes
+ * res0: Option[NonEmptySet[Int]] = Some(TreeSet(1, 2))
+ *
+ * scala> val result2: SortedSet[Int] = SortedSet.empty[Int]
+ * scala> result2.toNes
+ * res1: Option[NonEmptySet[Int]] = None
+ * }}}
+ */
def toNes: Option[NonEmptySet[A]] = NonEmptySet.fromSet(se)
/**
- * Groups elements inside this `SortedSet` according to the `Order` of the keys
- * produced by the given mapping function.
- *
- * {{{
- * scala> import cats.data.NonEmptySet
- * scala> import scala.collection.immutable.{SortedMap, SortedSet}
- * scala> import cats.implicits._
- *
- * scala> val sortedSet = SortedSet(12, -2, 3, -5)
- *
- * scala> sortedSet.groupByNes(_ >= 0)
- * res0: SortedMap[Boolean, NonEmptySet[Int]] = Map(false -> TreeSet(-5, -2), true -> TreeSet(3, 12))
- * }}}
- */
+ * Groups elements inside this `SortedSet` according to the `Order` of the keys
+ * produced by the given mapping function.
+ *
+ * {{{
+ * scala> import cats.data.NonEmptySet
+ * scala> import scala.collection.immutable.{SortedMap, SortedSet}
+ * scala> import cats.implicits._
+ *
+ * scala> val sortedSet = SortedSet(12, -2, 3, -5)
+ *
+ * scala> sortedSet.groupByNes(_ >= 0)
+ * res0: SortedMap[Boolean, NonEmptySet[Int]] = Map(false -> TreeSet(-5, -2), true -> TreeSet(3, 12))
+ * }}}
+ */
def groupByNes[B](f: A => B)(implicit B: Order[B]): SortedMap[B, NonEmptySet[A]] = {
implicit val ordering = B.toOrdering
toNes.fold(SortedMap.empty[B, NonEmptySet[A]])(_.groupBy(f).toSortedMap)
diff --git a/core/src/main/scala/cats/syntax/unorderedFoldable.scala b/core/src/main/scala/cats/syntax/unorderedFoldable.scala
index cde4104c91..56a567376a 100644
--- a/core/src/main/scala/cats/syntax/unorderedFoldable.scala
+++ b/core/src/main/scala/cats/syntax/unorderedFoldable.scala
@@ -9,23 +9,24 @@ trait UnorderedFoldableSyntax extends UnorderedFoldable.ToUnorderedFoldableOps {
}
final class UnorderedFoldableOps[F[_], A](val fa: F[A]) extends AnyVal {
+
/**
- * Count the number of elements in the structure that satisfy the given predicate.
- *
- * For example:
- * {{{
- * scala> import cats.implicits._
- * scala> val map1 = Map[Int, String]()
- * scala> val p1: String => Boolean = _.length > 0
- * scala> map1.count(p1)
- * res0: Long = 0
- *
- * scala> val map2 = Map(1 -> "hello", 2 -> "world", 3 -> "!")
- * scala> val p2: String => Boolean = _.length > 1
- * scala> map2.count(p2)
- * res1: Long = 2
- * }}}
- */
+ * Count the number of elements in the structure that satisfy the given predicate.
+ *
+ * For example:
+ * {{{
+ * scala> import cats.implicits._
+ * scala> val map1 = Map[Int, String]()
+ * scala> val p1: String => Boolean = _.length > 0
+ * scala> map1.count(p1)
+ * res0: Long = 0
+ *
+ * scala> val map2 = Map(1 -> "hello", 2 -> "world", 3 -> "!")
+ * scala> val p2: String => Boolean = _.length > 1
+ * scala> map2.count(p2)
+ * res1: Long = 2
+ * }}}
+ */
def count(p: A => Boolean)(implicit F: UnorderedFoldable[F]): Long =
F.unorderedFoldMap(fa)(a => if (p(a)) 1L else 0L)
}
diff --git a/core/src/main/scala/cats/syntax/validated.scala b/core/src/main/scala/cats/syntax/validated.scala
index 8b12f636b2..175c40e83f 100644
--- a/core/src/main/scala/cats/syntax/validated.scala
+++ b/core/src/main/scala/cats/syntax/validated.scala
@@ -30,6 +30,7 @@ trait ValidatedSyntaxBincompat0 {
}
final class ValidatedIdOpsBinCompat0[A](val a: A) extends AnyVal {
+
/**
* Wrap a value to a valid ValidatedNec
*
diff --git a/free/src/main/scala/cats/free/Cofree.scala b/free/src/main/scala/cats/free/Cofree.scala
index 344d68dd74..36c4893a11 100644
--- a/free/src/main/scala/cats/free/Cofree.scala
+++ b/free/src/main/scala/cats/free/Cofree.scala
@@ -2,15 +2,15 @@ package cats
package free
/**
- * A free comonad for some branching functor `S`. Branching is done lazily using [[Eval]].
- * A tree with data at the branches, as opposed to [[Free]] which is a tree with data at the leaves.
- * Not an instruction set functor made into a program monad as in [[Free]], but an instruction set's outputs as a
- * functor made into a tree of the possible worlds reachable using the instruction set.
- *
- * This Scala implementation of `Cofree` and its usages are derived from
- * [[https://github.com/scalaz/scalaz/blob/series/7.3.x/core/src/main/scala/scalaz/Cofree.scala Scalaz's Cofree]],
- * originally written by Rúnar Bjarnason.
- */
+ * A free comonad for some branching functor `S`. Branching is done lazily using [[Eval]].
+ * A tree with data at the branches, as opposed to [[Free]] which is a tree with data at the leaves.
+ * Not an instruction set functor made into a program monad as in [[Free]], but an instruction set's outputs as a
+ * functor made into a tree of the possible worlds reachable using the instruction set.
+ *
+ * This Scala implementation of `Cofree` and its usages are derived from
+ * [[https://github.com/scalaz/scalaz/blob/series/7.3.x/core/src/main/scala/scalaz/Cofree.scala Scalaz's Cofree]],
+ * originally written by Rúnar Bjarnason.
+ */
final case class Cofree[S[_], A](head: A, tail: Eval[S[Cofree[S, A]]]) {
/** Evaluates and returns the tail of the computation. */
@@ -73,21 +73,24 @@ object Cofree extends CofreeInstances {
private def mapSemilazy[A, B](fa: Eval[A])(f: A => B): Eval[B] = fa match {
case Now(a) => Now(f(a))
- case other => other.map(f)
+ case other => other.map(f)
}
/**
- * A stack-safe algebraic recursive fold out of the cofree comonad.
- */
+ * A stack-safe algebraic recursive fold out of the cofree comonad.
+ */
def cata[F[_], A, B](cof: Cofree[F, A])(folder: (A, F[B]) => Eval[B])(implicit F: Traverse[F]): Eval[B] =
F.traverse(cof.tailForced)(cata(_)(folder)).flatMap(folder(cof.head, _))
/**
- * A monadic recursive fold out of the cofree comonad into a monad which can express Eval's stack-safety.
- */
- def cataM[F[_], M[_], A, B](cof: Cofree[F, A])(folder: (A, F[B]) => M[B])(inclusion: Eval ~> M)(implicit F: Traverse[F], M: Monad[M]): M[B] = {
+ * A monadic recursive fold out of the cofree comonad into a monad which can express Eval's stack-safety.
+ */
+ def cataM[F[_], M[_], A, B](
+ cof: Cofree[F, A]
+ )(folder: (A, F[B]) => M[B])(inclusion: Eval ~> M)(implicit F: Traverse[F], M: Monad[M]): M[B] = {
def loop(fr: Cofree[F, A]): Eval[M[B]] = {
- val looped: M[F[B]] = F.traverse[M, Cofree[F, A], B](fr.tailForced)(fr => M.flatten(inclusion(Eval.defer(loop(fr)))))
+ val looped: M[F[B]] =
+ F.traverse[M, Cofree[F, A], B](fr.tailForced)(fr => M.flatten(inclusion(Eval.defer(loop(fr)))))
val folded: M[B] = M.flatMap(looped)(fb => folder(fr.head, fb))
Eval.now(folded)
}
@@ -96,22 +99,22 @@ object Cofree extends CofreeInstances {
}
-sealed private[free] abstract class CofreeInstances2 {
- implicit def catsReducibleForCofree[F[_] : Foldable]: Reducible[Cofree[F, ?]] =
- new CofreeReducible[F] {
- def F = implicitly
- }
+sealed abstract private[free] class CofreeInstances2 {
+ implicit def catsReducibleForCofree[F[_]: Foldable]: Reducible[Cofree[F, ?]] =
+ new CofreeReducible[F] {
+ def F = implicitly
+ }
}
-sealed private[free] abstract class CofreeInstances1 extends CofreeInstances2 {
- implicit def catsTraverseForCofree[F[_] : Traverse]: Traverse[Cofree[F, ?]] =
- new CofreeTraverse[F] {
- def F = implicitly
- }
+sealed abstract private[free] class CofreeInstances1 extends CofreeInstances2 {
+ implicit def catsTraverseForCofree[F[_]: Traverse]: Traverse[Cofree[F, ?]] =
+ new CofreeTraverse[F] {
+ def F = implicitly
+ }
}
-sealed private[free] abstract class CofreeInstances extends CofreeInstances1 {
- implicit def catsFreeComonadForCofree[S[_] : Functor]: Comonad[Cofree[S, ?]] = new CofreeComonad[S] {
+sealed abstract private[free] class CofreeInstances extends CofreeInstances1 {
+ implicit def catsFreeComonadForCofree[S[_]: Functor]: Comonad[Cofree[S, ?]] = new CofreeComonad[S] {
def F = implicitly
}
}
@@ -119,45 +122,45 @@ sealed private[free] abstract class CofreeInstances extends CofreeInstances1 {
private trait CofreeComonad[S[_]] extends Comonad[Cofree[S, ?]] {
implicit def F: Functor[S]
- override final def extract[A](p: Cofree[S, A]): A = p.extract
+ final override def extract[A](p: Cofree[S, A]): A = p.extract
- override final def coflatMap[A, B](a: Cofree[S, A])(f: Cofree[S, A] => B): Cofree[S, B] = a.coflatMap(f)
+ final override def coflatMap[A, B](a: Cofree[S, A])(f: Cofree[S, A] => B): Cofree[S, B] = a.coflatMap(f)
- override final def coflatten[A](a: Cofree[S, A]): Cofree[S, Cofree[S, A]] = a.coflatten
+ final override def coflatten[A](a: Cofree[S, A]): Cofree[S, Cofree[S, A]] = a.coflatten
- override final def map[A, B](a: Cofree[S, A])(f: A => B): Cofree[S, B] = a.map(f)
+ final override def map[A, B](a: Cofree[S, A])(f: A => B): Cofree[S, B] = a.map(f)
}
private trait CofreeReducible[F[_]] extends Reducible[Cofree[F, ?]] {
implicit def F: Foldable[F]
- override final def foldMap[A, B](fa: Cofree[F, A])(f: A => B)(implicit M: Monoid[B]): B =
+ final override def foldMap[A, B](fa: Cofree[F, A])(f: A => B)(implicit M: Monoid[B]): B =
M.combine(f(fa.head), F.foldMap(fa.tailForced)(foldMap(_)(f)))
- override final def foldRight[A, B](fa: Cofree[F, A], z: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
+ final override def foldRight[A, B](fa: Cofree[F, A], z: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
f(fa.head, fa.tail.flatMap(F.foldRight(_, z)(foldRight(_, _)(f))))
- override final def foldLeft[A, B](fa: Cofree[F, A], z: B)(f: (B, A) => B): B =
+ final override def foldLeft[A, B](fa: Cofree[F, A], z: B)(f: (B, A) => B): B =
F.foldLeft(fa.tailForced, f(z, fa.head))((b, cof) => foldLeft(cof, b)(f))
- override final def reduceLeftTo[A, B](fa: Cofree[F, A])(z: A => B)(f: (B, A) => B): B =
+ final override def reduceLeftTo[A, B](fa: Cofree[F, A])(z: A => B)(f: (B, A) => B): B =
F.foldLeft(fa.tailForced, z(fa.head))((b, cof) => foldLeft(cof, b)(f))
- override def reduceRightTo[A, B](fa: Cofree[F, A])(z: A => B)(f: (A, Eval[B]) => Eval[B]): Eval[B] = {
+ override def reduceRightTo[A, B](fa: Cofree[F, A])(z: A => B)(f: (A, Eval[B]) => Eval[B]): Eval[B] =
foldRight(fa, Eval.now((None: Option[B]))) {
- case (l, e) => e.flatMap {
- case None => Eval.now(Some(z(l)))
- case Some(r) => f(l, Eval.now(r)).map(Some(_))
- }
+ case (l, e) =>
+ e.flatMap {
+ case None => Eval.now(Some(z(l)))
+ case Some(r) => f(l, Eval.now(r)).map(Some(_))
+ }
}.map(_.getOrElse(sys.error("reduceRightTo")))
- }
}
private trait CofreeTraverse[F[_]] extends Traverse[Cofree[F, ?]] with CofreeReducible[F] with CofreeComonad[F] {
implicit def F: Traverse[F]
- override final def traverse[G[_], A, B](fa: Cofree[F, A])(f: A => G[B])(implicit G: Applicative[G]): G[Cofree[F, B]] =
+ final override def traverse[G[_], A, B](fa: Cofree[F, A])(f: A => G[B])(implicit G: Applicative[G]): G[Cofree[F, B]] =
G.map2(f(fa.head), F.traverse(fa.tailForced)(traverse(_)(f)))((h, t) => Cofree[F, B](h, Eval.now(t)))
}
diff --git a/free/src/main/scala/cats/free/ContravariantCoyoneda.scala b/free/src/main/scala/cats/free/ContravariantCoyoneda.scala
index d8e8b74133..aef65a83de 100644
--- a/free/src/main/scala/cats/free/ContravariantCoyoneda.scala
+++ b/free/src/main/scala/cats/free/ContravariantCoyoneda.scala
@@ -7,7 +7,7 @@ package free
* `F` is not a contravariant functor. Implemented using a List of functions for stack-safety.
*/
sealed abstract class ContravariantCoyoneda[F[_], A] extends Serializable { self =>
- import ContravariantCoyoneda.{Aux, unsafeApply}
+ import ContravariantCoyoneda.{unsafeApply, Aux}
/** The pivot between `fi` and `k`, usually existential. */
type Pivot
diff --git a/free/src/main/scala/cats/free/Coyoneda.scala b/free/src/main/scala/cats/free/Coyoneda.scala
index 1b0a3c9643..b6e31b2dc6 100644
--- a/free/src/main/scala/cats/free/Coyoneda.scala
+++ b/free/src/main/scala/cats/free/Coyoneda.scala
@@ -24,7 +24,7 @@ sealed abstract class Coyoneda[F[_], A] extends Serializable { self =>
/** The list of transformer functions composed into a single function, to be lifted into `F` by `run`. */
final def k: Pivot => A = Function.chain(ks.reverse)(_).asInstanceOf[A]
- import Coyoneda.{Aux, unsafeApply}
+ import Coyoneda.{unsafeApply, Aux}
/** Converts to `F[A]` given that `F` is a functor */
final def run(implicit F: Functor[F]): F[A] = F.map(fi)(k)
@@ -36,7 +36,7 @@ sealed abstract class Coyoneda[F[_], A] extends Serializable { self =>
/** Converts to `Yoneda[F,A]` given that `F` is a functor */
final def toYoneda(implicit F: Functor[F]): Yoneda[F, A] =
new Yoneda[F, A] {
- def apply[B](f: A => B): F[B] = F.map(fi)(k andThen f)
+ def apply[B](f: A => B): F[B] = F.map(fi)(k.andThen(f))
}
/**
@@ -47,8 +47,8 @@ sealed abstract class Coyoneda[F[_], A] extends Serializable { self =>
unsafeApply(fi)(f.asInstanceOf[Any => Any] :: ks)
/**
- * Modify the context `F` using transformation `f`.
- */
+ * Modify the context `F` using transformation `f`.
+ */
final def mapK[G[_]](f: F ~> G): Aux[G, A, Pivot] =
unsafeApply(f(fi))(ks)
@@ -87,7 +87,7 @@ object Coyoneda {
*/
implicit def catsFreeFunctorForCoyoneda[F[_]]: Functor[Coyoneda[F, ?]] =
new Functor[Coyoneda[F, ?]] {
- def map[A, B](cfa: Coyoneda[F, A])(f: A => B): Coyoneda[F, B] = cfa map f
+ def map[A, B](cfa: Coyoneda[F, A])(f: A => B): Coyoneda[F, B] = cfa.map(f)
}
}
diff --git a/free/src/main/scala/cats/free/Free.scala b/free/src/main/scala/cats/free/Free.scala
index 7951e8c718..5c86f0446b 100644
--- a/free/src/main/scala/cats/free/Free.scala
+++ b/free/src/main/scala/cats/free/Free.scala
@@ -12,7 +12,7 @@ import cats.arrow.FunctionK
*/
sealed abstract class Free[S[_], A] extends Product with Serializable {
- import Free.{ Pure, Suspend, FlatMapped }
+ import Free.{FlatMapped, Pure, Suspend}
final def map[B](f: A => B): Free[S, B] =
flatMap(a => Pure(f(a)))
@@ -50,8 +50,8 @@ sealed abstract class Free[S[_], A] extends Product with Serializable {
@tailrec
final def step: Free[S, A] = this match {
case FlatMapped(FlatMapped(c, f), g) => c.flatMap(cc => f(cc).flatMap(g)).step
- case FlatMapped(Pure(a), f) => f(a).step
- case x => x
+ case FlatMapped(Pure(a), f) => f(a).step
+ case x => x
}
/**
@@ -59,12 +59,12 @@ sealed abstract class Free[S[_], A] extends Product with Serializable {
*/
@tailrec
final def resume(implicit S: Functor[S]): Either[S[Free[S, A]], A] = this match {
- case Pure(a) => Right(a)
+ case Pure(a) => Right(a)
case Suspend(t) => Left(S.map(t)(Pure(_)))
case FlatMapped(c, f) =>
c match {
- case Pure(a) => f(a).resume
- case Suspend(t) => Left(S.map(t)(f))
+ case Pure(a) => f(a).resume
+ case Suspend(t) => Left(S.map(t)(f))
case FlatMapped(d, g) => d.flatMap(dd => g(dd).flatMap(f)).resume
}
}
@@ -72,15 +72,15 @@ sealed abstract class Free[S[_], A] extends Product with Serializable {
/**
* A combination of step and fold.
*/
- private[free] final def foldStep[B](
+ final private[free] def foldStep[B](
onPure: A => B,
onSuspend: S[A] => B,
onFlatMapped: ((S[X], X => Free[S, A]) forSome { type X }) => B
): B = this.step match {
- case Pure(a) => onPure(a)
- case Suspend(a) => onSuspend(a)
+ case Pure(a) => onPure(a)
+ case Suspend(a) => onSuspend(a)
case FlatMapped(Suspend(fa), f) => onFlatMapped((fa, f))
- case _ => sys.error("FlatMapped should be right associative after step")
+ case _ => sys.error("FlatMapped should be right associative after step")
}
/**
@@ -90,7 +90,7 @@ sealed abstract class Free[S[_], A] extends Product with Serializable {
final def go(f: S[Free[S, A]] => Free[S, A])(implicit S: Functor[S]): A = {
@tailrec def loop(t: Free[S, A]): A =
t.resume match {
- case Left(s) => loop(f(s))
+ case Left(s) => loop(f(s))
case Right(r) => r
}
loop(this)
@@ -151,8 +151,8 @@ sealed abstract class Free[S[_], A] extends Product with Serializable {
*/
final def foldMap[M[_]](f: FunctionK[S, M])(implicit M: Monad[M]): M[A] =
M.tailRecM(this)(_.step match {
- case Pure(a) => M.pure(Right(a))
- case Suspend(sa) => M.map(f(sa))(Right(_))
+ case Pure(a) => M.pure(Right(a))
+ case Suspend(sa) => M.map(f(sa))(Right(_))
case FlatMapped(c, g) => M.map(c.foldMap(f))(cc => Left(g(cc)))
})
@@ -162,7 +162,7 @@ sealed abstract class Free[S[_], A] extends Product with Serializable {
*
* If your natural transformation is effectful, be careful. These
* effects will be applied by `compile`.
- */
+ */
final def compile[T[_]](f: FunctionK[S, T]): Free[T, A] = mapK(f)
/**
@@ -192,13 +192,13 @@ object Free extends FreeInstances {
/**
* Return from the computation with the given value.
*/
- private[free] final case class Pure[S[_], A](a: A) extends Free[S, A]
+ final private[free] case class Pure[S[_], A](a: A) extends Free[S, A]
/** Suspend the computation with the given suspension. */
- private[free] final case class Suspend[S[_], A](a: S[A]) extends Free[S, A]
+ final private[free] case class Suspend[S[_], A](a: S[A]) extends Free[S, A]
/** Call a subroutine and continue with the given function. */
- private[free] final case class FlatMapped[S[_], B, C](c: Free[S, C], f: C => Free[S, B]) extends Free[S, B]
+ final private[free] case class FlatMapped[S[_], B, C](c: Free[S, C], f: C => Free[S, B]) extends Free[S, B]
/**
* Lift a pure `A` value into the free monad.
@@ -262,26 +262,26 @@ object Free extends FreeInstances {
/**
* Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
*/
- private[free] final class FreeInjectKPartiallyApplied[F[_], G[_]](val dummy: Boolean = true ) extends AnyVal {
+ final private[free] class FreeInjectKPartiallyApplied[F[_], G[_]](val dummy: Boolean = true) extends AnyVal {
def apply[A](fa: F[A])(implicit I: InjectK[F, G]): Free[G, A] =
Free.liftF(I.inj(fa))
}
/**
- * This method is used to defer the application of an InjectK[F, G]
- * instance. The actual work happens in
- * `FreeLiftInjectKPartiallyApplied#apply`.
- *
- * This method exists to allow the `G` parameter to be
- * bound independently of the `F` and `A` parameters below.
- */
+ * This method is used to defer the application of an InjectK[F, G]
+ * instance. The actual work happens in
+ * `FreeLiftInjectKPartiallyApplied#apply`.
+ *
+ * This method exists to allow the `G` parameter to be
+ * bound independently of the `F` and `A` parameters below.
+ */
def liftInject[G[_]]: FreeLiftInjectKPartiallyApplied[G] =
new FreeLiftInjectKPartiallyApplied
/**
- * Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
- */
- private[free] final class FreeLiftInjectKPartiallyApplied[G[_]](val dummy: Boolean = true ) extends AnyVal {
+ * Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
+ */
+ final private[free] class FreeLiftInjectKPartiallyApplied[G[_]](val dummy: Boolean = true) extends AnyVal {
def apply[F[_], A](fa: F[A])(implicit I: InjectK[F, G]): Free[G, A] =
Free.liftF(I.inj(fa))
}
@@ -301,18 +301,18 @@ private trait FreeFoldable[F[_]] extends Foldable[Free[F, ?]] {
implicit def F: Foldable[F]
- override final def foldLeft[A, B](fa: Free[F, A], b: B)(f: (B, A) => B): B =
+ final override def foldLeft[A, B](fa: Free[F, A], b: B)(f: (B, A) => B): B =
fa.foldStep(
a => f(b, a),
fa => F.foldLeft(fa, b)(f),
{ case (fx, g) => F.foldLeft(fx, b)((bb, x) => foldLeft(g(x), bb)(f)) }
)
- override final def foldRight[A, B](fa: Free[F, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
+ final override def foldRight[A, B](fa: Free[F, A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
fa.foldStep(
a => f(a, lb),
fa => F.foldRight(fa, lb)(f),
- { case (fx, g) => F.foldRight(fx, lb)( (a, lbb) => foldRight(g(a), lbb)(f)) }
+ { case (fx, g) => F.foldRight(fx, lb)((a, lbb) => foldRight(g(a), lbb)(f)) }
)
}
@@ -321,17 +321,17 @@ private trait FreeTraverse[F[_]] extends Traverse[Free[F, ?]] with FreeFoldable[
def F: Foldable[F] = TraversableF
- override final def traverse[G[_], A, B](fa: Free[F, A])(f: A => G[B])(implicit G: Applicative[G]): G[Free[F, B]] =
+ final override def traverse[G[_], A, B](fa: Free[F, A])(f: A => G[B])(implicit G: Applicative[G]): G[Free[F, B]] =
fa.resume match {
- case Right(a) => G.map(f(a))(Free.pure(_))
+ case Right(a) => G.map(f(a))(Free.pure(_))
case Left(ffreeA) => G.map(TraversableF.traverse(ffreeA)(traverse(_)(f)))(Free.roll(_))
}
// Override Traverse's map to use Free's map for better performance
- override final def map[A, B](fa: Free[F, A])(f: A => B): Free[F, B] = fa.map(f)
+ final override def map[A, B](fa: Free[F, A])(f: A => B): Free[F, B] = fa.map(f)
}
-sealed private[free] abstract class FreeInstances extends FreeInstances1 {
+sealed abstract private[free] class FreeInstances extends FreeInstances1 {
/**
* `Free[S, ?]` has a monad for any type constructor `S[_]`.
@@ -350,7 +350,7 @@ sealed private[free] abstract class FreeInstances extends FreeInstances1 {
}
}
-sealed private[free] abstract class FreeInstances1 {
+sealed abstract private[free] class FreeInstances1 {
implicit def catsFreeFoldableForFree[F[_]](
implicit
diff --git a/free/src/main/scala/cats/free/FreeApplicative.scala b/free/src/main/scala/cats/free/FreeApplicative.scala
index 6b4b2a3012..1103b3240d 100644
--- a/free/src/main/scala/cats/free/FreeApplicative.scala
+++ b/free/src/main/scala/cats/free/FreeApplicative.scala
@@ -7,30 +7,28 @@ import cats.data.Const
import scala.annotation.tailrec
/**
- * Applicative Functor for Free,
- * implementation inspired by https://github.com/safareli/free/pull/31/
- */
+ * Applicative Functor for Free,
+ * implementation inspired by https://github.com/safareli/free/pull/31/
+ */
sealed abstract class FreeApplicative[F[_], A] extends Product with Serializable {
self =>
// ap => apply alias needed so we can refer to both
// FreeApplicative.ap and FreeApplicative#ap
- import FreeApplicative.{FA, Pure, Ap, lift}
+ import FreeApplicative.{lift, Ap, FA, Pure}
- final def ap[B](b: FA[F, A => B]): FA[F, B] = {
+ final def ap[B](b: FA[F, A => B]): FA[F, B] =
b match {
case Pure(f) =>
this.map(f)
case _ =>
Ap(b, this)
}
- }
- final def map[B](f: A => B): FA[F, B] = {
+ final def map[B](f: A => B): FA[F, B] =
this match {
case Pure(a) => Pure(f(a))
- case _ => Ap(Pure(f), this)
+ case _ => Ap(Pure(f), this)
}
- }
final def map2[B, C](fb: FA[F, B])(f: (A, B) => C): FA[F, C] =
this match {
@@ -38,13 +36,13 @@ sealed abstract class FreeApplicative[F[_], A] extends Product with Serializable
case _ =>
fb match {
case Pure(b) => Ap(Pure(f((_: A), b)), this)
- case _ => Ap(Ap(Pure((a: A) => (b: B) => f(a, b)), this), fb)
+ case _ => Ap(Ap(Pure((a: A) => (b: B) => f(a, b)), this), fb)
}
}
/** Interprets/Runs the sequence of operations using the semantics of `Applicative` G[_].
- * Tail recursive.
- */
+ * Tail recursive.
+ */
// scalastyle:off method.length
final def foldMap[G[_]](f: F ~> G)(implicit G: Applicative[G]): G[A] = {
import FreeApplicative._
@@ -129,28 +127,26 @@ sealed abstract class FreeApplicative[F[_], A] extends Product with Serializable
}
// scalastyle:on method.length
-
/**
- * Interpret/run the operations using the semantics of `Applicative[F]`.
- * Stack-safe.
- */
+ * Interpret/run the operations using the semantics of `Applicative[F]`.
+ * Stack-safe.
+ */
final def fold(implicit F: Applicative[F]): F[A] =
foldMap(FunctionK.id[F])
/**
- * Interpret this algebra into another algebra.
- * Stack-safe.
- */
+ * Interpret this algebra into another algebra.
+ * Stack-safe.
+ */
final def compile[G[_]](f: F ~> G): FA[G, A] =
foldMap[FA[G, ?]] {
λ[FunctionK[F, FA[G, ?]]](fa => lift(f(fa)))
}
-
/**
- * Interpret this algebra into a FreeApplicative over another algebra.
- * Stack-safe.
- */
+ * Interpret this algebra into a FreeApplicative over another algebra.
+ * Stack-safe.
+ */
def flatCompile[G[_]](f: F ~> FA[G, ?]): FA[G, A] =
foldMap(f)
@@ -186,13 +182,13 @@ object FreeApplicative {
* that has been constructed with chained `ap` calls.
* Fn#argc denotes the amount of curried params remaining.
*/
- private final case class Fn[G[_], A, B](gab: G[A => B], argc: Int)
+ final private case class Fn[G[_], A, B](gab: G[A => B], argc: Int)
- private final case class Pure[F[_], A](a: A) extends FA[F, A]
+ final private case class Pure[F[_], A](a: A) extends FA[F, A]
- private final case class Lift[F[_], A](fa: F[A]) extends FA[F, A]
+ final private case class Lift[F[_], A](fa: F[A]) extends FA[F, A]
- private final case class Ap[F[_], P, A](fn: FA[F, P => A], fp: FA[F, P]) extends FA[F, A]
+ final private case class Ap[F[_], P, A](fn: FA[F, P => A], fp: FA[F, P]) extends FA[F, A]
final def pure[F[_], A](a: A): FA[F, A] =
Pure(a)
diff --git a/free/src/main/scala/cats/free/FreeInvariantMonoidal.scala b/free/src/main/scala/cats/free/FreeInvariantMonoidal.scala
index 7407d7f750..05d945b473 100644
--- a/free/src/main/scala/cats/free/FreeInvariantMonoidal.scala
+++ b/free/src/main/scala/cats/free/FreeInvariantMonoidal.scala
@@ -8,7 +8,7 @@ import cats.data.Const
* Invariant Monoidal for Free
*/
sealed abstract class FreeInvariantMonoidal[F[_], A] extends Product with Serializable { self =>
- import FreeInvariantMonoidal.{FA, Zip, Imap, lift}
+ import FreeInvariantMonoidal.{lift, FA, Imap, Zip}
def imap[B](f: A => B)(g: B => A): FA[F, B] =
Imap(this, f, g)
@@ -41,22 +41,22 @@ sealed abstract class FreeInvariantMonoidal[F[_], A] extends Product with Serial
object FreeInvariantMonoidal {
type FA[F[_], A] = FreeInvariantMonoidal[F, A]
- private final case class Pure[F[_], A](a: A) extends FA[F, A] {
+ final private case class Pure[F[_], A](a: A) extends FA[F, A] {
def foldMap[G[_]](nt: FunctionK[F, G])(implicit im: InvariantMonoidal[G]): G[A] =
im.point(a)
}
- private final case class Suspend[F[_], A](fa: F[A]) extends FA[F, A] {
+ final private case class Suspend[F[_], A](fa: F[A]) extends FA[F, A] {
def foldMap[G[_]](nt: FunctionK[F, G])(implicit im: InvariantMonoidal[G]): G[A] =
nt(fa)
}
- private final case class Zip[F[_], A, B](fa: FA[F, A], fb: FA[F, B]) extends FA[F, (A, B)] {
+ final private case class Zip[F[_], A, B](fa: FA[F, A], fb: FA[F, B]) extends FA[F, (A, B)] {
def foldMap[G[_]](nt: FunctionK[F, G])(implicit im: InvariantMonoidal[G]): G[(A, B)] =
im.product(fa.foldMap(nt), fb.foldMap(nt))
}
- private final case class Imap[F[_], A, B](fa: FA[F, A], f: A => B, g: B => A) extends FA[F, B] {
+ final private case class Imap[F[_], A, B](fa: FA[F, A], f: A => B, g: B => A) extends FA[F, B] {
def foldMap[G[_]](nt: FunctionK[F, G])(implicit im: InvariantMonoidal[G]): G[B] =
im.imap(fa.foldMap(nt))(f)(g)
}
diff --git a/free/src/main/scala/cats/free/FreeT.scala b/free/src/main/scala/cats/free/FreeT.scala
index 9b2882cfe8..800b3a34a3 100644
--- a/free/src/main/scala/cats/free/FreeT.scala
+++ b/free/src/main/scala/cats/free/FreeT.scala
@@ -22,8 +22,8 @@ sealed abstract class FreeT[S[_], M[_], A] extends Product with Serializable {
flatMap(a => pure(f(a)))
/**
- * Modify the context `M` using transformation `mn`.
- */
+ * Modify the context `M` using transformation `mn`.
+ */
def mapK[N[_]](mn: M ~> N): FreeT[S, N, A] =
step match {
case e @ FlatMapped(_, _) =>
@@ -39,7 +39,7 @@ sealed abstract class FreeT[S[_], M[_], A] extends Product with Serializable {
/**
* Changes the underlying `Monad` for this `FreeT`, ie.
* turning this `FreeT[S, M, A]` into a `FreeT[S, N, A]`.
- */
+ */
def hoist[N[_]](mn: FunctionK[M, N]): FreeT[S, N, A] =
mapK(mn)
@@ -62,17 +62,20 @@ sealed abstract class FreeT[S[_], M[_], A] extends Product with Serializable {
def foldMap(f: FunctionK[S, M])(implicit M: Monad[M]): M[A] = {
def go(ft: FreeT[S, M, A]): M[Either[FreeT[S, M, A], A]] =
ft match {
- case Suspend(ma) => M.flatMap(ma) {
- case Right(a) => M.pure(Right(a))
- case Left(sa) => M.map(f(sa))(Right(_))
- }
- case g @ FlatMapped(_, _) => g.a match {
- case Suspend(mx) => M.flatMap(mx) {
- case Right(x) => M.pure(Left(g.f(x)))
- case Left(sx) => M.map(f(sx))(x => Left(g.f(x)))
+ case Suspend(ma) =>
+ M.flatMap(ma) {
+ case Right(a) => M.pure(Right(a))
+ case Left(sa) => M.map(f(sa))(Right(_))
+ }
+ case g @ FlatMapped(_, _) =>
+ g.a match {
+ case Suspend(mx) =>
+ M.flatMap(mx) {
+ case Right(x) => M.pure(Left(g.f(x)))
+ case Left(sx) => M.map(f(sx))(x => Left(g.f(x)))
+ }
+ case g0 @ FlatMapped(_, _) => M.pure(Left(g0.a.flatMap(g0.f(_).flatMap(g.f))))
}
- case g0 @ FlatMapped(_, _) => M.pure(Left(g0.a.flatMap(g0.f(_).flatMap(g.f))))
- }
}
M.tailRecM(this)(go)
@@ -83,13 +86,15 @@ sealed abstract class FreeT[S[_], M[_], A] extends Product with Serializable {
def go(ft: FreeT[S, M, A]): M[Either[FreeT[S, M, A], Either[S[FreeT[S, M, A]], A]]] =
ft match {
case Suspend(f) => M.map(f)(as => Right(as.left.map(S.map(_)(pure(_)))))
- case g1 @ FlatMapped(_, _) => g1.a match {
- case Suspend(m1) => M.map(m1) {
- case Right(a) => Left(g1.f(a))
- case Left(fc) => Right(Left(S.map(fc)(g1.f(_))))
+ case g1 @ FlatMapped(_, _) =>
+ g1.a match {
+ case Suspend(m1) =>
+ M.map(m1) {
+ case Right(a) => Left(g1.f(a))
+ case Left(fc) => Right(Left(S.map(fc)(g1.f(_))))
+ }
+ case g2 @ FlatMapped(_, _) => M.pure(Left(g2.a.flatMap(g2.f(_).flatMap(g1.f))))
}
- case g2 @ FlatMapped(_, _) => M.pure(Left(g2.a.flatMap(g2.f(_).flatMap(g1.f))))
- }
}
M.tailRecM(this)(go)
@@ -113,28 +118,32 @@ sealed abstract class FreeT[S[_], M[_], A] extends Product with Serializable {
* is preserved.
*/
@tailrec
- private[cats] final def toM(implicit M: Applicative[M]): M[FreeT[S, M, A]] =
+ final private[cats] def toM(implicit M: Applicative[M]): M[FreeT[S, M, A]] =
this match {
- case Suspend(m) => M.map(m) {
- case Right(a) => pure(a)
- case Left(s) => liftF(s)
- }
- case g1 @ FlatMapped(_, _) => g1.a match {
- case Suspend(m) => M.map(m) {
- case Right(a) => g1.f(a)
- case Left(s) => liftF[S, M, g1.A](s).flatMap(g1.f)
+ case Suspend(m) =>
+ M.map(m) {
+ case Right(a) => pure(a)
+ case Left(s) => liftF(s)
+ }
+ case g1 @ FlatMapped(_, _) =>
+ g1.a match {
+ case Suspend(m) =>
+ M.map(m) {
+ case Right(a) => g1.f(a)
+ case Left(s) => liftF[S, M, g1.A](s).flatMap(g1.f)
+ }
+ case g0 @ FlatMapped(_, _) => g0.a.flatMap(g0.f(_).flatMap(g1.f)).toM
}
- case g0 @ FlatMapped(_, _) => g0.a.flatMap(g0.f(_).flatMap(g1.f)).toM
- }
}
@tailrec
private def step: FreeT[S, M, A] =
this match {
- case g @ FlatMapped(_, _) => g.a match {
- case g0 @ FlatMapped(_, _) => g0.a.flatMap(a => g0.f(a).flatMap(g.f)).step
- case _ => g
- }
+ case g @ FlatMapped(_, _) =>
+ g.a match {
+ case g0 @ FlatMapped(_, _) => g0.a.flatMap(a => g0.f(a).flatMap(g.f)).step
+ case _ => g
+ }
case x => x
}
@@ -142,11 +151,13 @@ sealed abstract class FreeT[S[_], M[_], A] extends Product with Serializable {
}
object FreeT extends FreeTInstances {
+
/** Suspend the computation with the given suspension. */
private[free] case class Suspend[S[_], M[_], A](a: M[Either[S[A], A]]) extends FreeT[S, M, A]
/** Call a subroutine and continue with the given function. */
- private[free] case class FlatMapped[S[_], M[_], A0, B](a0: FreeT[S, M, A0], f0: A0 => FreeT[S, M, B]) extends FreeT[S, M, B] {
+ private[free] case class FlatMapped[S[_], M[_], A0, B](a0: FreeT[S, M, A0], f0: A0 => FreeT[S, M, B])
+ extends FreeT[S, M, B] {
type A = A0
def a: FreeT[S, M, A] = a0
def f: A => FreeT[S, M, B] = f0
@@ -161,7 +172,7 @@ object FreeT extends FreeTInstances {
def defer[S[_], M[_], A](a: M[Either[A, S[FreeT[S, M, A]]]])(implicit M: Applicative[M]): FreeT[S, M, A] =
liftT(a).flatMap({
- case Left(a) => pure(a)
+ case Left(a) => pure(a)
case Right(s) => roll(s)
})
@@ -188,26 +199,26 @@ object FreeT extends FreeTInstances {
λ[FunctionK[FreeT[S, M, ?], M]](f => f.foldMap(fk))
/**
- * This method is used to defer the application of an InjectK[F, G]
- * instance. The actual work happens in
- * `FreeTLiftInjectKPartiallyApplied#apply`.
- *
- * This method exists to allow the `M` and `G` parameters to be
- * bound independently of the `F` and `A` parameters below.
- */
+ * This method is used to defer the application of an InjectK[F, G]
+ * instance. The actual work happens in
+ * `FreeTLiftInjectKPartiallyApplied#apply`.
+ *
+ * This method exists to allow the `M` and `G` parameters to be
+ * bound independently of the `F` and `A` parameters below.
+ */
def liftInject[M[_], G[_]]: FreeTLiftInjectKPartiallyApplied[M, G] =
new FreeTLiftInjectKPartiallyApplied
/**
- * Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
- */
- private[free] final class FreeTLiftInjectKPartiallyApplied[M[_], G[_]](val dummy: Boolean = true ) extends AnyVal {
+ * Uses the [[http://typelevel.org/cats/guidelines.html#partially-applied-type-params Partially Applied Type Params technique]] for ergonomics.
+ */
+ final private[free] class FreeTLiftInjectKPartiallyApplied[M[_], G[_]](val dummy: Boolean = true) extends AnyVal {
def apply[F[_], A](fa: F[A])(implicit I: InjectK[F, G], m: Applicative[M]): FreeT[G, M, A] =
FreeT.liftF[G, M, A](I.inj(fa))
}
}
-private[free] sealed abstract class FreeTInstances extends FreeTInstances0 {
+sealed abstract private[free] class FreeTInstances extends FreeTInstances0 {
implicit def catsFreeMonadErrorForFreeT[S[_], M[_], E](implicit E: MonadError[M, E]): MonadError[FreeT[S, M, ?], E] =
new MonadError[FreeT[S, M, ?], E] with FreeTMonad[S, M] {
override def M = E
@@ -218,21 +229,21 @@ private[free] sealed abstract class FreeTInstances extends FreeTInstances0 {
}
}
-private[free] sealed abstract class FreeTInstances0 extends FreeTInstances1 {
+sealed abstract private[free] class FreeTInstances0 extends FreeTInstances1 {
implicit def catsFreeMonadForFreeT[S[_], M[_]](implicit M0: Applicative[M]): Monad[FreeT[S, M, ?]] =
new FreeTMonad[S, M] {
def M = M0
}
}
-private[free] sealed abstract class FreeTInstances1 extends FreeTInstances2 {
+sealed abstract private[free] class FreeTInstances1 extends FreeTInstances2 {
implicit def catsFreeFlatMapForFreeT[S[_], M[_]](implicit M0: Applicative[M]): FlatMap[FreeT[S, M, ?]] =
new FreeTFlatMap[S, M] {
implicit def M: Applicative[M] = M0
}
}
-private[free] sealed abstract class FreeTInstances2 extends FreeTInstances3 {
+sealed abstract private[free] class FreeTInstances2 extends FreeTInstances3 {
implicit def catsFreeAlternativeForFreeT[S[_], M[_]: Alternative: Monad]: Alternative[FreeT[S, M, ?]] =
new Alternative[FreeT[S, M, ?]] with FreeTMonad[S, M] with FreeTMonoidK[S, M] {
override def M = Alternative[M]
@@ -240,7 +251,7 @@ private[free] sealed abstract class FreeTInstances2 extends FreeTInstances3 {
}
}
-private[free] sealed abstract class FreeTInstances3 {
+sealed abstract private[free] class FreeTInstances3 {
implicit def catsFreeSemigroupKForFreeT[S[_], M[_]: Applicative: SemigroupK]: SemigroupK[FreeT[S, M, ?]] =
new FreeTSemigroupK[S, M] {
override def M = Applicative[M]
@@ -248,31 +259,31 @@ private[free] sealed abstract class FreeTInstances3 {
}
}
-private[free] sealed trait FreeTFlatMap[S[_], M[_]] extends FlatMap[FreeT[S, M, ?]] {
+sealed private[free] trait FreeTFlatMap[S[_], M[_]] extends FlatMap[FreeT[S, M, ?]] {
implicit def M: Applicative[M]
- override final def map[A, B](fa: FreeT[S, M, A])(f: A => B): FreeT[S, M, B] = fa.map(f)
+ final override def map[A, B](fa: FreeT[S, M, A])(f: A => B): FreeT[S, M, B] = fa.map(f)
def flatMap[A, B](fa: FreeT[S, M, A])(f: A => FreeT[S, M, B]): FreeT[S, M, B] = fa.flatMap(f)
- override final def tailRecM[A, B](a: A)(f: A => FreeT[S, M, Either[A, B]]): FreeT[S, M, B] =
+ final override def tailRecM[A, B](a: A)(f: A => FreeT[S, M, Either[A, B]]): FreeT[S, M, B] =
FreeT.tailRecM(a)(f)
}
-private[free] sealed trait FreeTMonad[S[_], M[_]] extends Monad[FreeT[S, M, ?]] with FreeTFlatMap[S, M] {
+sealed private[free] trait FreeTMonad[S[_], M[_]] extends Monad[FreeT[S, M, ?]] with FreeTFlatMap[S, M] {
implicit def M: Applicative[M]
- override final def pure[A](a: A): FreeT[S, M, A] =
+ final override def pure[A](a: A): FreeT[S, M, A] =
FreeT.pure[S, M, A](a)
}
-private[free] sealed trait FreeTMonoidK[S[_], M[_]] extends MonoidK[FreeT[S, M, ?]] with FreeTSemigroupK[S, M] {
+sealed private[free] trait FreeTMonoidK[S[_], M[_]] extends MonoidK[FreeT[S, M, ?]] with FreeTSemigroupK[S, M] {
implicit def M: Applicative[M]
def M1: MonoidK[M]
- override final def empty[A]: FreeT[S, M, A] = FreeT.liftT[S, M, A](M1.empty[A])(M)
+ final override def empty[A]: FreeT[S, M, A] = FreeT.liftT[S, M, A](M1.empty[A])(M)
}
-private[free] sealed trait FreeTSemigroupK[S[_], M[_]] extends SemigroupK[FreeT[S, M, ?]] {
+sealed private[free] trait FreeTSemigroupK[S[_], M[_]] extends SemigroupK[FreeT[S, M, ?]] {
implicit def M: Applicative[M]
def M1: SemigroupK[M]
- override final def combineK[A](a: FreeT[S, M, A], b: FreeT[S, M, A]): FreeT[S, M, A] =
+ final override def combineK[A](a: FreeT[S, M, A], b: FreeT[S, M, A]): FreeT[S, M, A] =
FreeT.liftT(M1.combineK(a.toM, b.toM))(M).flatMap(identity)
}
diff --git a/free/src/main/scala/cats/free/Trampoline.scala b/free/src/main/scala/cats/free/Trampoline.scala
index f7473d193a..026ffa2e89 100644
--- a/free/src/main/scala/cats/free/Trampoline.scala
+++ b/free/src/main/scala/cats/free/Trampoline.scala
@@ -3,7 +3,7 @@ package free
// To workaround SI-7139 `object Trampoline` needs to be defined inside the package object
// together with the type alias.
-private[free] abstract class TrampolineFunctions {
+abstract private[free] class TrampolineFunctions {
def done[A](a: A): Trampoline[A] =
Free.pure[Function0, A](a)
@@ -17,4 +17,3 @@ private[free] abstract class TrampolineFunctions {
def delay[A](a: => A): Trampoline[A] =
defer(done(a))
}
-
diff --git a/free/src/main/scala/cats/free/Yoneda.scala b/free/src/main/scala/cats/free/Yoneda.scala
index 841435b7f4..dc22a251f0 100644
--- a/free/src/main/scala/cats/free/Yoneda.scala
+++ b/free/src/main/scala/cats/free/Yoneda.scala
@@ -26,7 +26,7 @@ abstract class Yoneda[F[_], A] extends Serializable { self =>
*/
def map[B](f: A => B): Yoneda[F, B] =
new Yoneda[F, B] {
- def apply[C](g: B => C): F[C] = self(f andThen g)
+ def apply[C](g: B => C): F[C] = self(f.andThen(g))
}
/**
@@ -45,7 +45,7 @@ object Yoneda {
*/
implicit def catsFreeFunctorForYoneda[F[_]]: Functor[Yoneda[F, ?]] =
new Functor[Yoneda[F, ?]] {
- def map[A, B](ya: Yoneda[F, A])(f: A => B): Yoneda[F, B] = ya map f
+ def map[A, B](ya: Yoneda[F, A])(f: A => B): Yoneda[F, B] = ya.map(f)
}
/**
diff --git a/free/src/main/scala/cats/free/package.scala b/free/src/main/scala/cats/free/package.scala
index 2942a76ac4..26d512c0ac 100644
--- a/free/src/main/scala/cats/free/package.scala
+++ b/free/src/main/scala/cats/free/package.scala
@@ -1,6 +1,7 @@
package cats
package object free {
+
/** Alias for the free monad over the `Function0` functor. */
type Trampoline[A] = Free[Function0, A]
object Trampoline extends TrampolineFunctions
diff --git a/free/src/test/scala/cats/free/CofreeSuite.scala b/free/src/test/scala/cats/free/CofreeSuite.scala
index fc2f27512b..6bbf13c6d9 100644
--- a/free/src/test/scala/cats/free/CofreeSuite.scala
+++ b/free/src/test/scala/cats/free/CofreeSuite.scala
@@ -2,7 +2,7 @@ package cats
package free
import cats.data.{NonEmptyList, OptionT}
-import cats.laws.discipline.{SemigroupalTests, ComonadTests, ReducibleTests, SerializableTests, TraverseTests}
+import cats.laws.discipline.{ComonadTests, ReducibleTests, SemigroupalTests, SerializableTests, TraverseTests}
import cats.syntax.list._
import cats.tests.{CatsSuite, Spooky}
import org.scalacheck.{Arbitrary, Cogen, Gen}
@@ -33,7 +33,9 @@ class CofreeSuite extends CatsSuite {
}
test("Cofree.ana") {
- val anaHundred: CofreeNel[Int] = Cofree.ana[Option, List[Int], Int](List.tabulate(101)(identity))(l => if (l.tail.isEmpty) None else Some(l.tail), _.head)
+ val anaHundred: CofreeNel[Int] =
+ Cofree.ana[Option, List[Int], Int](List.tabulate(101)(identity))(l => if (l.tail.isEmpty) None else Some(l.tail),
+ _.head)
val nelUnfoldedHundred: NonEmptyList[Int] = NonEmptyList.fromListUnsafe(List.tabulate(101)(identity))
cofNelToNel(anaHundred) should ===(nelUnfoldedHundred)
}
@@ -41,7 +43,9 @@ class CofreeSuite extends CatsSuite {
test("Cofree.tailForced") {
val spooky = new Spooky
val incrementor =
- Cofree.unfold[Id, Int](spooky.counter) { _ => spooky.increment(); spooky.counter }
+ Cofree.unfold[Id, Int](spooky.counter) { _ =>
+ spooky.increment(); spooky.counter
+ }
spooky.counter should ===(0)
incrementor.tailForced
spooky.counter should ===(1)
@@ -50,7 +54,9 @@ class CofreeSuite extends CatsSuite {
test("Cofree.forceTail") {
val spooky = new Spooky
val incrementor =
- Cofree.unfold[Id, Int](spooky.counter) { _ => spooky.increment(); spooky.counter }
+ Cofree.unfold[Id, Int](spooky.counter) { _ =>
+ spooky.increment(); spooky.counter
+ }
spooky.counter should ===(0)
incrementor.forceTail
spooky.counter should ===(1)
@@ -59,13 +65,15 @@ class CofreeSuite extends CatsSuite {
test("Cofree.forceAll") {
val spooky = new Spooky
val incrementor =
- Cofree.unfold[Option, Int](spooky.counter)(i =>
- if (i == 5) {
- None
- } else {
- spooky.increment()
- Some(spooky.counter)
- })
+ Cofree.unfold[Option, Int](spooky.counter)(
+ i =>
+ if (i == 5) {
+ None
+ } else {
+ spooky.increment()
+ Some(spooky.counter)
+ }
+ )
spooky.counter should ===(0)
incrementor.forceAll
spooky.counter should ===(5)
@@ -92,9 +100,11 @@ class CofreeSuite extends CatsSuite {
test("Cofree.cata") {
val cata =
- Cofree.cata[Option, Int, NonEmptyList[Int]](unfoldedHundred)(
- (i, lb) => Eval.now(NonEmptyList(i, lb.fold[List[Int]](Nil)(_.toList)))
- ).value
+ Cofree
+ .cata[Option, Int, NonEmptyList[Int]](unfoldedHundred)(
+ (i, lb) => Eval.now(NonEmptyList(i, lb.fold[List[Int]](Nil)(_.toList)))
+ )
+ .value
cata should ===(nelUnfoldedHundred)
}
@@ -109,9 +119,12 @@ class CofreeSuite extends CatsSuite {
val cataHundred =
Cofree.cataM[Option, EvalOption, Int, NonEmptyList[Int]](unfoldedHundred)(folder)(inclusion).value.value
val cataHundredOne =
- Cofree.cataM[Option, EvalOption, Int, NonEmptyList[Int]](
- Cofree[Option, Int](101, Eval.now(Some(unfoldedHundred)))
- )(folder)(inclusion).value.value
+ Cofree
+ .cataM[Option, EvalOption, Int, NonEmptyList[Int]](
+ Cofree[Option, Int](101, Eval.now(Some(unfoldedHundred)))
+ )(folder)(inclusion)
+ .value
+ .value
cataHundred should ===(Some(nelUnfoldedHundred))
cataHundredOne should ===(None)
}
@@ -130,14 +143,13 @@ sealed trait CofreeSuiteInstances {
def tr(a: CofreeNel[A], b: CofreeNel[A]): Boolean =
(a.tailForced, b.tailForced) match {
case (Some(at), Some(bt)) if e.eqv(a.head, b.head) => tr(at, bt)
- case (None, None) if e.eqv(a.head, b.head) => true
- case _ => false
+ case (None, None) if e.eqv(a.head, b.head) => true
+ case _ => false
}
tr(a, b)
}
}
-
implicit def CofreeOptionCogen[A: Cogen]: Cogen[CofreeNel[A]] =
implicitly[Cogen[List[A]]].contramap[CofreeNel[A]](cofNelToNel(_).toList)
@@ -146,19 +158,21 @@ sealed trait CofreeSuiteInstances {
Gen.resize(20, Gen.nonEmptyListOf(implicitly[Arbitrary[A]].arbitrary))
}
Arbitrary {
- arb.arbitrary.map(l => (l.head, l.tail) match {
- case (h, Nil) => nelToCofNel(NonEmptyList(h, Nil))
- case (h, t) => nelToCofNel(NonEmptyList(h, t))
- })
+ arb.arbitrary.map(
+ l =>
+ (l.head, l.tail) match {
+ case (h, Nil) => nelToCofNel(NonEmptyList(h, Nil))
+ case (h, t) => nelToCofNel(NonEmptyList(h, t))
+ }
+ )
}
}
- val nelToCofNel = λ[NonEmptyList ~> CofreeNel](fa =>
- Cofree(fa.head, Eval.later(fa.tail.toNel.map(apply))))
+ val nelToCofNel = λ[NonEmptyList ~> CofreeNel](fa => Cofree(fa.head, Eval.later(fa.tail.toNel.map(apply))))
- val cofNelToNel = λ[CofreeNel ~> NonEmptyList](fa =>
- NonEmptyList(fa.head, fa.tailForced.map(apply(_).toList).getOrElse(Nil)))
+ val cofNelToNel =
+ λ[CofreeNel ~> NonEmptyList](fa => NonEmptyList(fa.head, fa.tailForced.map(apply(_).toList).getOrElse(Nil)))
- val cofRoseTreeToNel = λ[CofreeRoseTree ~> NonEmptyList](fa =>
- NonEmptyList(fa.head, fa.tailForced.flatMap(apply(_).toList)))
+ val cofRoseTreeToNel =
+ λ[CofreeRoseTree ~> NonEmptyList](fa => NonEmptyList(fa.head, fa.tailForced.flatMap(apply(_).toList)))
}
diff --git a/free/src/test/scala/cats/free/ContravariantCoyonedaSuite.scala b/free/src/test/scala/cats/free/ContravariantCoyonedaSuite.scala
index a9c95789cf..f9284f7e2f 100644
--- a/free/src/test/scala/cats/free/ContravariantCoyonedaSuite.scala
+++ b/free/src/test/scala/cats/free/ContravariantCoyonedaSuite.scala
@@ -3,9 +3,9 @@ package free
import cats.arrow.FunctionK
import cats.tests.CatsSuite
-import cats.laws.discipline.{ ContravariantTests, SerializableTests }
+import cats.laws.discipline.{ContravariantTests, SerializableTests}
-import org.scalacheck.{ Arbitrary }
+import org.scalacheck.{Arbitrary}
class ContravariantCoyonedaSuite extends CatsSuite {
@@ -16,8 +16,7 @@ class ContravariantCoyonedaSuite extends CatsSuite {
Arbitrary(F.arbitrary.map(ContravariantCoyoneda.lift[? => T, A](_)))
// We can't really test that functions are equal but we can try it with a bunch of test data.
- implicit def contravariantCoyonedaEq[A: Arbitrary, T](
- implicit eqft: Eq[T]): Eq[ContravariantCoyoneda[? => T, A]] =
+ implicit def contravariantCoyonedaEq[A: Arbitrary, T](implicit eqft: Eq[T]): Eq[ContravariantCoyoneda[? => T, A]] =
new Eq[ContravariantCoyoneda[? => T, A]] {
def eqv(cca: ContravariantCoyoneda[? => T, A], ccb: ContravariantCoyoneda[? => T, A]): Boolean =
Arbitrary.arbitrary[List[A]].sample.get.forall { a =>
@@ -30,8 +29,10 @@ class ContravariantCoyonedaSuite extends CatsSuite {
implicit val contravariantContravariantCoyonedaToString: Contravariant[ContravariantCoyoneda[? => String, ?]] =
ContravariantCoyoneda.catsFreeContravariantFunctorForContravariantCoyoneda[? => String]
- checkAll("ContravariantCoyoneda[? => String, Int]", ContravariantTests[ContravariantCoyoneda[? => String, ?]].contravariant[Int, Int, Int])
- checkAll("Contravariant[ContravariantCoyoneda[Option, ?]]", SerializableTests.serializable(Contravariant[ContravariantCoyoneda[Option, ?]]))
+ checkAll("ContravariantCoyoneda[? => String, Int]",
+ ContravariantTests[ContravariantCoyoneda[? => String, ?]].contravariant[Int, Int, Int])
+ checkAll("Contravariant[ContravariantCoyoneda[Option, ?]]",
+ SerializableTests.serializable(Contravariant[ContravariantCoyoneda[Option, ?]]))
test("mapK and run is same as applying natural trans") {
forAll { (b: Boolean) =>
@@ -47,7 +48,8 @@ class ContravariantCoyonedaSuite extends CatsSuite {
.lift[? => Int, String](_.count(_ == 'x'))
.contramap((s: String) => s + "x")
.contramap((s: String) => s * 3)
- .run.apply("foo") === 3
+ .run
+ .apply("foo") === 3
}
test("stack-safe contramapmap") {
@@ -58,15 +60,16 @@ class ContravariantCoyonedaSuite extends CatsSuite {
}
test("run, foldMap consistent") {
- forAll { (
- c: ContravariantCoyoneda[? => Int, String],
- f: Byte => String,
- g: Float => Byte,
- s: Float
- ) =>
- val cʹ = c.contramap(f).contramap(g) // just to ensure there's some structure
- val h = cʹ.foldMap[? => Int](FunctionK.id[? => Int])
- cʹ.run.apply(s) === h(s)
+ forAll {
+ (
+ c: ContravariantCoyoneda[? => Int, String],
+ f: Byte => String,
+ g: Float => Byte,
+ s: Float
+ ) =>
+ val cʹ = c.contramap(f).contramap(g) // just to ensure there's some structure
+ val h = cʹ.foldMap[? => Int](FunctionK.id[? => Int])
+ cʹ.run.apply(s) === h(s)
}
}
diff --git a/free/src/test/scala/cats/free/CoyonedaSuite.scala b/free/src/test/scala/cats/free/CoyonedaSuite.scala
index 89dcd9fc6d..a52c92d33a 100644
--- a/free/src/test/scala/cats/free/CoyonedaSuite.scala
+++ b/free/src/test/scala/cats/free/CoyonedaSuite.scala
@@ -8,7 +8,7 @@ import cats.laws.discipline.{FunctorTests, SerializableTests}
import org.scalacheck.Arbitrary
class CoyonedaSuite extends CatsSuite {
- implicit def coyonedaArbitrary[F[_] : Functor, A : Arbitrary](implicit F: Arbitrary[F[A]]): Arbitrary[Coyoneda[F, A]] =
+ implicit def coyonedaArbitrary[F[_]: Functor, A: Arbitrary](implicit F: Arbitrary[F[A]]): Arbitrary[Coyoneda[F, A]] =
Arbitrary(F.arbitrary.map(Coyoneda.lift))
implicit def coyonedaEq[F[_]: Functor, A](implicit FA: Eq[F[A]]): Eq[Coyoneda[F, A]] =
@@ -19,17 +19,17 @@ class CoyonedaSuite extends CatsSuite {
checkAll("Coyoneda[Option, ?]", FunctorTests[Coyoneda[Option, ?]].functor[Int, Int, Int])
checkAll("Functor[Coyoneda[Option, ?]]", SerializableTests.serializable(Functor[Coyoneda[Option, ?]]))
- test("toYoneda and then toCoyoneda is identity"){
- forAll{ (y: Coyoneda[Option, Int]) =>
- y.toYoneda.toCoyoneda should === (y)
+ test("toYoneda and then toCoyoneda is identity") {
+ forAll { (y: Coyoneda[Option, Int]) =>
+ y.toYoneda.toCoyoneda should ===(y)
}
}
test("mapK and run is same as applying natural trans") {
- val nt = λ[FunctionK[Option, List]](_.toList)
- val o = Option("hello")
- val c = Coyoneda.lift(o)
- c.mapK(nt).run should === (nt(o))
+ val nt = λ[FunctionK[Option, List]](_.toList)
+ val o = Option("hello")
+ val c = Coyoneda.lift(o)
+ c.mapK(nt).run should ===(nt(o))
}
test("map order") {
diff --git a/free/src/test/scala/cats/free/FreeApplicativeSuite.scala b/free/src/test/scala/cats/free/FreeApplicativeSuite.scala
index 2cc74462f8..11cb79308c 100644
--- a/free/src/test/scala/cats/free/FreeApplicativeSuite.scala
+++ b/free/src/test/scala/cats/free/FreeApplicativeSuite.scala
@@ -3,7 +3,7 @@ package free
import cats.tests.CatsSuite
import cats.arrow.FunctionK
-import cats.laws.discipline.{SemigroupalTests, ApplicativeTests, SerializableTests}
+import cats.laws.discipline.{ApplicativeTests, SemigroupalTests, SerializableTests}
import cats.data.State
import org.scalacheck.{Arbitrary, Gen}
@@ -14,7 +14,8 @@ class FreeApplicativeSuite extends CatsSuite {
implicit val iso = SemigroupalTests.Isomorphisms.invariant[FreeApplicative[Option, ?]]
checkAll("FreeApplicative[Option, ?]", ApplicativeTests[FreeApplicative[Option, ?]].applicative[Int, Int, Int])
- checkAll("Applicative[FreeApplicative[Option, ?]]", SerializableTests.serializable(Applicative[FreeApplicative[Option, ?]]))
+ checkAll("Applicative[FreeApplicative[Option, ?]]",
+ SerializableTests.serializable(Applicative[FreeApplicative[Option, ?]]))
test("toString is stack-safe") {
val r = FreeApplicative.pure[List, Int](333)
@@ -25,9 +26,9 @@ class FreeApplicativeSuite extends CatsSuite {
test("fold/map is stack-safe") {
val r = FreeApplicative.lift[List, Int](List(333))
val rr = (1 to 70000).foldLeft(r)((r, _) => r.ap(FreeApplicative.lift[List, Int => Int](List((_: Int) + 1))))
- rr.fold should be (List(333 + 70000))
+ rr.fold should be(List(333 + 70000))
val rx = (1 to 70000).foldRight(r)((_, r) => r.ap(FreeApplicative.lift[List, Int => Int](List((_: Int) + 1))))
- rx.fold should be (List(333 + 70000))
+ rx.fold should be(List(333 + 70000))
}
test("FreeApplicative#fold") {
@@ -39,7 +40,7 @@ class FreeApplicativeSuite extends CatsSuite {
val y = FreeApplicative.pure[Option, Int](n)
val f = x.map(i => (j: Int) => i + j)
val r = y.ap(f)
- r.fold should === (Apply[Option].map2(o1, o2)(_ + _))
+ r.fold should ===(Apply[Option].map2(o1, o2)(_ + _))
}
test("FreeApplicative#compile") {
@@ -52,20 +53,20 @@ class FreeApplicativeSuite extends CatsSuite {
forAll { (x: FreeApplicative[Option, Int]) =>
val nt = λ[FunctionK[Option, FreeApplicative[Option, ?]]](FreeApplicative.lift(_))
- x.foldMap[FreeApplicative[Option, ?]](nt).fold should === (x.flatCompile[Option](nt).fold)
+ x.foldMap[FreeApplicative[Option, ?]](nt).fold should ===(x.flatCompile[Option](nt).fold)
}
}
test("FreeApplicative#monad") {
forAll { (x: FreeApplicative[List, Int]) =>
- x.monad.foldMap(FunctionK.id) should === (x.fold)
+ x.monad.foldMap(FunctionK.id) should ===(x.fold)
}
}
test("FreeApplicative#ap") {
val x = FreeApplicative.ap[Id, Int, Int](1)(FreeApplicative.pure((_: Int) + 1))
val y = FreeApplicative.lift[Id, Int](1).ap(FreeApplicative.pure((_: Int) + 1))
- x should === (y)
+ x should ===(y)
}
// Ensure that syntax and implicit resolution work as expected.
@@ -83,10 +84,10 @@ class FreeApplicativeSuite extends CatsSuite {
val countingNT = λ[FunctionK[List, G]](la => List(la.length))
val fli1 = FreeApplicative.lift[List, Int](List(1, 3, 5, 7))
- fli1.analyze[G[Int]](countingNT) should === (List(4))
+ fli1.analyze[G[Int]](countingNT) should ===(List(4))
val fli2 = FreeApplicative.lift[List, Int](List.empty)
- fli2.analyze[G[Int]](countingNT) should === (List(0))
+ fli2.analyze[G[Int]](countingNT) should ===(List(0))
}
test("foldMap order of effects - regression check for #799") {
@@ -100,7 +101,7 @@ class FreeApplicativeSuite extends CatsSuite {
type Tracked[A] = State[String, A]
- val f = λ[FunctionK[Foo,Tracked]] { fa =>
+ val f = λ[FunctionK[Foo, Tracked]] { fa =>
State { s0 =>
(s0 + fa.toString + ";", fa.getA)
}
@@ -112,8 +113,8 @@ class FreeApplicativeSuite extends CatsSuite {
val z1: Dsl[Long] = Apply[Dsl].map2(x, y)((x, y) => x.toLong + y)
val z2: Dsl[Long] = Apply[Dsl].map2(y, x)((y, x) => x.toLong + y)
- z1.foldMap(f).run("").value should === (("Bar(3);Baz(5);", 8L))
- z2.foldMap(f).run("").value should === (("Baz(5);Bar(3);", 8L))
+ z1.foldMap(f).run("").value should ===(("Bar(3);Baz(5);", 8L))
+ z2.foldMap(f).run("").value should ===(("Baz(5);Bar(3);", 8L))
}
test("analyze order of effects - regression check for #799") {
@@ -125,47 +126,47 @@ class FreeApplicativeSuite extends CatsSuite {
val asString = λ[FunctionK[Id, λ[α => String]]](_.toString)
- z.analyze(asString) should === ("xy")
+ z.analyze(asString) should ===("xy")
}
}
object FreeApplicativeSuite {
- private def freeGen[F[_], A](maxDepth: Int)(implicit F: Arbitrary[F[A]], FF: Arbitrary[(A, A) => A], A: Arbitrary[A]): Gen[FreeApplicative[F, A]] = {
- val noFlatMapped = Gen.oneOf(
- A.arbitrary.map(FreeApplicative.pure[F, A]),
- F.arbitrary.map(FreeApplicative.lift[F, A]))
+ private def freeGen[F[_], A](
+ maxDepth: Int
+ )(implicit F: Arbitrary[F[A]], FF: Arbitrary[(A, A) => A], A: Arbitrary[A]): Gen[FreeApplicative[F, A]] = {
+ val noFlatMapped =
+ Gen.oneOf(A.arbitrary.map(FreeApplicative.pure[F, A]), F.arbitrary.map(FreeApplicative.lift[F, A]))
val nextDepth = Gen.chooseNum(1, math.max(1, maxDepth - 1))
- def withFlatMapped = for {
- fDepth <- nextDepth
- freeDepth <- nextDepth
- ff <- FF.arbitrary
- f <- freeGen[F, A](fDepth).map(_.map(l => (u: A) => ff(l, u)))
- freeFA <- freeGen[F, A](freeDepth)
- } yield freeFA.ap(f)
+ def withFlatMapped =
+ for {
+ fDepth <- nextDepth
+ freeDepth <- nextDepth
+ ff <- FF.arbitrary
+ f <- freeGen[F, A](fDepth).map(_.map(l => (u: A) => ff(l, u)))
+ freeFA <- freeGen[F, A](freeDepth)
+ } yield freeFA.ap(f)
if (maxDepth <= 1) noFlatMapped
else Gen.oneOf(noFlatMapped, withFlatMapped)
}
- implicit def freeArbitrary[F[_], A](implicit F: Arbitrary[F[A]], FF: Arbitrary[(A, A) => A], A: Arbitrary[A]): Arbitrary[FreeApplicative[F, A]] =
+ implicit def freeArbitrary[F[_], A](implicit F: Arbitrary[F[A]],
+ FF: Arbitrary[(A, A) => A],
+ A: Arbitrary[A]): Arbitrary[FreeApplicative[F, A]] =
Arbitrary(freeGen[F, A](4))
implicit def freeApplicativeEq[S[_]: Applicative, A](implicit SA: Eq[S[A]]): Eq[FreeApplicative[S, A]] =
new Eq[FreeApplicative[S, A]] {
- def eqv(a: FreeApplicative[S, A], b: FreeApplicative[S, A]): Boolean = {
+ def eqv(a: FreeApplicative[S, A], b: FreeApplicative[S, A]): Boolean =
SA.eqv(a.fold, b.fold)
- }
}
implicit def catsLawsArbitraryForListNatTrans: Arbitrary[List ~> List] =
- Arbitrary(Gen.oneOf(
- FunctionK.id[List],
- new (List ~> List) {
- def apply[A](fa: List[A]): List[A] = {
- fa ++ fa
- }
- }))
+ Arbitrary(Gen.oneOf(FunctionK.id[List], new (List ~> List) {
+ def apply[A](fa: List[A]): List[A] =
+ fa ++ fa
+ }))
}
diff --git a/free/src/test/scala/cats/free/FreeInvariantMonoidalSuite.scala b/free/src/test/scala/cats/free/FreeInvariantMonoidalSuite.scala
index 23e9dfed9b..1802b449bd 100644
--- a/free/src/test/scala/cats/free/FreeInvariantMonoidalSuite.scala
+++ b/free/src/test/scala/cats/free/FreeInvariantMonoidalSuite.scala
@@ -9,13 +9,15 @@ import org.scalacheck.{Arbitrary, Gen}
import cats.tests.CsvCodecInvariantMonoidalSuite._
class FreeInvariantMonoidalSuite extends CatsSuite {
- implicit def freeInvariantMonoidalArbitrary[F[_], A](implicit F: Arbitrary[F[A]], A: Arbitrary[A]): Arbitrary[FreeInvariantMonoidal[F, A]] =
+ implicit def freeInvariantMonoidalArbitrary[F[_], A](implicit F: Arbitrary[F[A]],
+ A: Arbitrary[A]): Arbitrary[FreeInvariantMonoidal[F, A]] =
Arbitrary(
- Gen.oneOf(
- A.arbitrary.map(FreeInvariantMonoidal.pure[F, A]),
- F.arbitrary.map(FreeInvariantMonoidal.lift[F, A])))
+ Gen.oneOf(A.arbitrary.map(FreeInvariantMonoidal.pure[F, A]), F.arbitrary.map(FreeInvariantMonoidal.lift[F, A]))
+ )
- implicit def freeInvariantMonoidalEq[S[_]: InvariantMonoidal, A](implicit SA: Eq[S[A]]): Eq[FreeInvariantMonoidal[S, A]] =
+ implicit def freeInvariantMonoidalEq[S[_]: InvariantMonoidal, A](
+ implicit SA: Eq[S[A]]
+ ): Eq[FreeInvariantMonoidal[S, A]] =
new Eq[FreeInvariantMonoidal[S, A]] {
def eqv(a: FreeInvariantMonoidal[S, A], b: FreeInvariantMonoidal[S, A]): Boolean = {
val nt = FunctionK.id[S]
@@ -25,8 +27,10 @@ class FreeInvariantMonoidalSuite extends CatsSuite {
implicit val isoFreeCsvCodec = Isomorphisms.invariant[FreeInvariantMonoidal[CsvCodec, ?]]
- checkAll("FreeInvariantMonoidal[CsvCodec, ?]", InvariantMonoidalTests[FreeInvariantMonoidal[CsvCodec, ?]].invariantMonoidal[Int, Int, Int])
- checkAll("InvariantMonoidal[FreeInvariantMonoidal[CsvCodec, ?]]", SerializableTests.serializable(InvariantMonoidal[FreeInvariantMonoidal[CsvCodec, ?]]))
+ checkAll("FreeInvariantMonoidal[CsvCodec, ?]",
+ InvariantMonoidalTests[FreeInvariantMonoidal[CsvCodec, ?]].invariantMonoidal[Int, Int, Int])
+ checkAll("InvariantMonoidal[FreeInvariantMonoidal[CsvCodec, ?]]",
+ SerializableTests.serializable(InvariantMonoidal[FreeInvariantMonoidal[CsvCodec, ?]]))
test("FreeInvariantMonoidal#fold") {
val n = 2
@@ -38,7 +42,7 @@ class FreeInvariantMonoidalSuite extends CatsSuite {
val f2 = FreeInvariantMonoidal.pure[CsvCodec, Int](n)
val fExpr = f1.product(f2.imap(_ * 2)(_ / 2))
- fExpr.fold should === (iExpr)
+ fExpr.fold should ===(iExpr)
}
implicit val idIsInvariantMonoidal: InvariantMonoidal[Id] = new InvariantMonoidal[Id] {
@@ -54,7 +58,7 @@ class FreeInvariantMonoidalSuite extends CatsSuite {
val nt = FunctionK.id[Id]
val r1 = y.product(p)
val r2 = r1.compile(nt)
- r1.foldMap(nt) should === (r2.foldMap(nt))
+ r1.foldMap(nt) should ===(r2.foldMap(nt))
}
test("FreeInvariantMonoidal#analyze") {
@@ -62,9 +66,9 @@ class FreeInvariantMonoidalSuite extends CatsSuite {
val countingNT = λ[FunctionK[List, G]](la => List(la.length))
val fli1 = FreeInvariantMonoidal.lift[List, Int](List(1, 3, 5, 7))
- fli1.analyze[G[Int]](countingNT) should === (List(4))
+ fli1.analyze[G[Int]](countingNT) should ===(List(4))
val fli2 = FreeInvariantMonoidal.lift[List, Int](List.empty)
- fli2.analyze[G[Int]](countingNT) should === (List(0))
+ fli2.analyze[G[Int]](countingNT) should ===(List(0))
}
}
diff --git a/free/src/test/scala/cats/free/FreeSuite.scala b/free/src/test/scala/cats/free/FreeSuite.scala
index bf72fdabc0..edc42e4b3c 100644
--- a/free/src/test/scala/cats/free/FreeSuite.scala
+++ b/free/src/test/scala/cats/free/FreeSuite.scala
@@ -3,11 +3,11 @@ package free
import cats.arrow.FunctionK
import cats.data.EitherK
-import cats.laws.discipline.{SemigroupalTests, DeferTests, FoldableTests, MonadTests, SerializableTests, TraverseTests}
+import cats.laws.discipline.{DeferTests, FoldableTests, MonadTests, SemigroupalTests, SerializableTests, TraverseTests}
import cats.laws.discipline.arbitrary.catsLawsArbitraryForFn0
import cats.tests.CatsSuite
-import org.scalacheck.{Arbitrary, Gen, Cogen}
+import org.scalacheck.{Arbitrary, Cogen, Gen}
import Arbitrary.arbFunction1
class FreeSuite extends CatsSuite {
@@ -29,14 +29,14 @@ class FreeSuite extends CatsSuite {
locally {
implicit val instance = Free.catsFreeFoldableForFree[Option]
- checkAll("Free[Option, ?]", FoldableTests[Free[Option,?]].foldable[Int,Int])
- checkAll("Foldable[Free[Option,?]]", SerializableTests.serializable(Foldable[Free[Option,?]]))
+ checkAll("Free[Option, ?]", FoldableTests[Free[Option, ?]].foldable[Int, Int])
+ checkAll("Foldable[Free[Option,?]]", SerializableTests.serializable(Foldable[Free[Option, ?]]))
}
locally {
implicit val instance = Free.catsFreeTraverseForFree[Option]
- checkAll("Free[Option,?]", TraverseTests[Free[Option,?]].traverse[Int, Int, Int, Int, Option, Option])
- checkAll("Traverse[Free[Option,?]]", SerializableTests.serializable(Traverse[Free[Option,?]]))
+ checkAll("Free[Option,?]", TraverseTests[Free[Option, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("Traverse[Free[Option,?]]", SerializableTests.serializable(Traverse[Free[Option, ?]]))
}
test("toString is stack-safe") {
@@ -45,42 +45,42 @@ class FreeSuite extends CatsSuite {
rr.toString.length should be > 0
}
- test("compile id"){
+ test("compile id") {
forAll { x: Free[List, Int] =>
- x.compile(FunctionK.id[List]) should === (x)
+ x.compile(FunctionK.id[List]) should ===(x)
val fk = Free.compile(FunctionK.id[List])
fk(x) === x
}
}
- test("defer doesn't change value"){
+ test("defer doesn't change value") {
forAll { x: Free[List, Int] =>
- Free.defer(x) should === (x)
+ Free.defer(x) should ===(x)
}
}
- test("defer is lazy"){
+ test("defer is lazy") {
def yikes[F[_], A]: Free[F, A] = throw new RuntimeException("blargh")
// this shouldn't throw an exception unless we try to run it
val _ = Free.defer(yikes[Option, Int])
}
- test("compile consistent with foldMap"){
+ test("compile consistent with foldMap") {
forAll { x: Free[List, Int] =>
val mapped = x.compile(headOptionU)
val folded = mapped.foldMap(FunctionK.id[Option])
- folded should === (x.foldMap(headOptionU))
+ folded should ===(x.foldMap(headOptionU))
val fk = Free.foldMap(headOptionU)
- folded should === (fk(x))
+ folded should ===(fk(x))
}
}
test("tailRecM is stack safe") {
val n = 50000
- val fa = Monad[Free[Option, ?]].tailRecM(0)(i =>
- Free.pure[Option, Either[Int, Int]](if (i < n) Left(i+1) else Right(i)))
- fa should === (Free.pure[Option, Int](n))
+ val fa =
+ Monad[Free[Option, ?]].tailRecM(0)(i => Free.pure[Option, Either[Int, Int]](if (i < n) Left(i + 1) else Right(i)))
+ fa should ===(Free.pure[Option, Int](n))
}
test("foldMap is stack safe") {
@@ -91,13 +91,14 @@ class FreeSuite extends CatsSuite {
def tb(i: Int): FTest[Int] = Free.liftF(TB(i))
- def a(i: Int): FTest[Int] = for {
- j <- tb(i)
- z <- if (j<10000) a(j) else Free.pure[FTestApi, Int](j)
- } yield z
+ def a(i: Int): FTest[Int] =
+ for {
+ j <- tb(i)
+ z <- if (j < 10000) a(j) else Free.pure[FTestApi, Int](j)
+ } yield z
- def runner: FunctionK[FTestApi,Id] = λ[FunctionK[FTestApi,Id]] {
- case TB(i) => i+1
+ def runner: FunctionK[FTestApi, Id] = λ[FunctionK[FTestApi, Id]] {
+ case TB(i) => i + 1
}
assert(10000 == a(0).foldMap(runner))
@@ -121,7 +122,7 @@ class FreeSuite extends CatsSuite {
sealed trait Test1Algebra[A]
- case class Test1[A](value : Int, f: Int => A) extends Test1Algebra[A]
+ case class Test1[A](value: Int, f: Int => A) extends Test1Algebra[A]
def test1[A](value: Int, f: Int => A): Test1Algebra[A] = Test1(value, f)
@@ -133,13 +134,14 @@ class FreeSuite extends CatsSuite {
}
}
- implicit def test1AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int], intAArb : Arbitrary[Int => A]): Arbitrary[Test1Algebra[A]] =
- Arbitrary(for {s <- seqArb.arbitrary; f <- intAArb.arbitrary} yield Test1(s, f))
+ implicit def test1AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int],
+ intAArb: Arbitrary[Int => A]): Arbitrary[Test1Algebra[A]] =
+ Arbitrary(for { s <- seqArb.arbitrary; f <- intAArb.arbitrary } yield Test1(s, f))
}
sealed trait Test2Algebra[A]
- case class Test2[A](value : Int, f: Int => A) extends Test2Algebra[A]
+ case class Test2[A](value: Int, f: Int => A) extends Test2Algebra[A]
def test2[A](value: Int, f: Int => A): Test2Algebra[A] = Test2(value, f)
@@ -151,62 +153,56 @@ class FreeSuite extends CatsSuite {
}
}
- implicit def test2AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int], intAArb : Arbitrary[Int => A]): Arbitrary[Test2Algebra[A]] =
- Arbitrary(for {s <- seqArb.arbitrary; f <- intAArb.arbitrary} yield Test2(s, f))
+ implicit def test2AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int],
+ intAArb: Arbitrary[Int => A]): Arbitrary[Test2Algebra[A]] =
+ Arbitrary(for { s <- seqArb.arbitrary; f <- intAArb.arbitrary } yield Test2(s, f))
}
type T[A] = EitherK[Test1Algebra, Test2Algebra, A]
- object Test1Interpreter extends FunctionK[Test1Algebra,Id] {
+ object Test1Interpreter extends FunctionK[Test1Algebra, Id] {
override def apply[A](fa: Test1Algebra[A]): Id[A] = fa match {
case Test1(k, h) => h(k)
}
}
- object Test2Interpreter extends FunctionK[Test2Algebra,Id] {
+ object Test2Interpreter extends FunctionK[Test2Algebra, Id] {
override def apply[A](fa: Test2Algebra[A]): Id[A] = fa match {
case Test2(k, h) => h(k)
}
}
- val eitherKInterpreter: FunctionK[T,Id] = Test1Interpreter or Test2Interpreter
+ val eitherKInterpreter: FunctionK[T, Id] = Test1Interpreter.or(Test2Interpreter)
test(".inject") {
forAll { (x: Int, y: Int) =>
- def res[F[_]]
- (implicit I0: Test1Algebra :<: F,
- I1: Test2Algebra :<: F): Free[F, Int] = {
- for {
- a <- Free.inject[Test1Algebra, F](test1(x, identity))
- b <- Free.inject[Test2Algebra, F](test2(y, identity))
- } yield a + b
- }
- (res[T] foldMap eitherKInterpreter) == (x + y) should ===(true)
+ def res[F[_]](implicit I0: Test1Algebra :<: F, I1: Test2Algebra :<: F): Free[F, Int] =
+ for {
+ a <- Free.inject[Test1Algebra, F](test1(x, identity))
+ b <- Free.inject[Test2Algebra, F](test2(y, identity))
+ } yield a + b
+ (res[T].foldMap(eitherKInterpreter)) == (x + y) should ===(true)
}
}
test(".liftInject") {
forAll { (x: Int, y: Int) =>
- def res[F[_]]
- (implicit I0: Test1Algebra :<: F,
- I1: Test2Algebra :<: F): Free[F, Int] = {
+ def res[F[_]](implicit I0: Test1Algebra :<: F, I1: Test2Algebra :<: F): Free[F, Int] =
for {
a <- Free.liftInject[F](test1(x, identity))
b <- Free.liftInject[F](test2(y, identity))
} yield a + b
- }
- (res[T] foldMap eitherKInterpreter) == (x + y) should ===(true)
+ (res[T].foldMap(eitherKInterpreter)) == (x + y) should ===(true)
}
}
val x: Free[T, Int] = Free.inject[Test1Algebra, T](Test1(1, identity))
test(".injectRoll") {
- def distr[F[_], A](f: Free[F, A])
- (implicit
- F: Functor[F],
- I0: Test1Algebra :<: F,
- I1: Test2Algebra :<: F): Option[Free[F, A]] =
+ def distr[F[_], A](f: Free[F, A])(implicit
+ F: Functor[F],
+ I0: Test1Algebra :<: F,
+ I1: Test2Algebra :<: F): Option[Free[F, A]] =
for {
Test1(x, h) <- Free.match_[F, Test1Algebra, A](f)
Test2(y, k) <- Free.match_[F, Test2Algebra, A](h(x))
@@ -216,7 +212,7 @@ class FreeSuite extends CatsSuite {
val expr1: Free[T, Int] = Free.injectRoll[T, Test1Algebra, Int](Test1(x, Free.pure))
val expr2: Free[T, Int] = Free.injectRoll[T, Test2Algebra, Int](Test2(y, Free.pure))
val res = distr[T, Int](expr1 *> expr2)
- res.map(_.foldMap(eitherKInterpreter)) should === (Some(Free.pure[Id, Int](x + y).foldMap(FunctionK.id)))
+ res.map(_.foldMap(eitherKInterpreter)) should ===(Some(Free.pure[Id, Int](x + y).foldMap(FunctionK.id)))
}
}
}
@@ -224,10 +220,10 @@ class FreeSuite extends CatsSuite {
object FreeSuite extends FreeSuiteInstances {
import cats.instances.function._
- implicit def trampolineArbitrary[A:Arbitrary]: Arbitrary[Trampoline[A]] =
+ implicit def trampolineArbitrary[A: Arbitrary]: Arbitrary[Trampoline[A]] =
freeArbitrary[Function0, A]
- implicit def trampolineEq[A:Eq]: Eq[Trampoline[A]] =
+ implicit def trampolineEq[A: Eq]: Eq[Trampoline[A]] =
freeEq[Function0, A]
}
@@ -239,21 +235,20 @@ sealed trait FreeSuiteInstances extends FreeSuiteInstances1 {
}
sealed trait FreeSuiteInstances1 {
- val headOptionU = λ[FunctionK[List,Option]](_.headOption)
+ val headOptionU = λ[FunctionK[List, Option]](_.headOption)
private def freeGen[F[_], A](maxDepth: Int)(implicit F: Arbitrary[F[A]], A: Arbitrary[A]): Gen[Free[F, A]] = {
- val noFlatMapped = Gen.oneOf(
- A.arbitrary.map(Free.pure[F, A]),
- F.arbitrary.map(Free.liftF[F, A]))
+ val noFlatMapped = Gen.oneOf(A.arbitrary.map(Free.pure[F, A]), F.arbitrary.map(Free.liftF[F, A]))
val nextDepth = Gen.chooseNum(1, math.max(1, maxDepth - 1))
- def withFlatMapped = for {
- fDepth <- nextDepth
- freeDepth <- nextDepth
- f <- arbFunction1[A, Free[F, A]](Arbitrary(freeGen[F, A](fDepth)), Cogen[Unit].contramap(_ => ())).arbitrary
- freeFA <- freeGen[F, A](freeDepth)
- } yield freeFA.flatMap(f)
+ def withFlatMapped =
+ for {
+ fDepth <- nextDepth
+ freeDepth <- nextDepth
+ f <- arbFunction1[A, Free[F, A]](Arbitrary(freeGen[F, A](fDepth)), Cogen[Unit].contramap(_ => ())).arbitrary
+ freeFA <- freeGen[F, A](freeDepth)
+ } yield freeFA.flatMap(f)
if (maxDepth <= 1) noFlatMapped
else Gen.oneOf(noFlatMapped, withFlatMapped)
@@ -265,6 +260,6 @@ sealed trait FreeSuiteInstances1 {
implicit def freeEq[S[_]: Monad, A](implicit SA: Eq[S[A]]): Eq[Free[S, A]] =
new Eq[Free[S, A]] {
def eqv(a: Free[S, A], b: Free[S, A]): Boolean =
- SA.eqv(a.runM(identity), b.runM(identity))
+ SA.eqv(a.runM(identity), b.runM(identity))
}
}
diff --git a/free/src/test/scala/cats/free/FreeTSuite.scala b/free/src/test/scala/cats/free/FreeTSuite.scala
index efc8d10764..7224a7a837 100644
--- a/free/src/test/scala/cats/free/FreeTSuite.scala
+++ b/free/src/test/scala/cats/free/FreeTSuite.scala
@@ -8,7 +8,7 @@ import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
import cats.tests.CatsSuite
import cats.instances.option._
-import org.scalacheck.{Arbitrary, Gen, Cogen}
+import org.scalacheck.{Arbitrary, Cogen, Gen}
class FreeTSuite extends CatsSuite {
@@ -41,17 +41,20 @@ class FreeTSuite extends CatsSuite {
{
implicit val eqEitherTFA: Eq[EitherT[FreeTOption, Unit, Int]] = EitherT.catsDataEqForEitherT[FreeTOption, Unit, Int]
checkAll("FreeT[Option, Option, Int]", MonadErrorTests[FreeTOption, Unit].monadError[Int, Int, Int])
- checkAll("MonadError[FreeT[Option, Option, ?], Unit]", SerializableTests.serializable(MonadError[FreeTOption, Unit]))
+ checkAll("MonadError[FreeT[Option, Option, ?], Unit]",
+ SerializableTests.serializable(MonadError[FreeTOption, Unit]))
}
test("FlatMap stack safety tested with 50k flatMaps") {
val expected = Applicative[FreeTOption].pure(())
val result =
- Monad[FreeTOption].tailRecM(0)((i: Int) =>
- if (i < 50000)
- Applicative[FreeTOption].pure(Either.left[Int, Unit](i + 1))
- else
- Applicative[FreeTOption].pure(Either.right[Int, Unit](())))
+ Monad[FreeTOption].tailRecM(0)(
+ (i: Int) =>
+ if (i < 50000)
+ Applicative[FreeTOption].pure(Either.left[Int, Unit](i + 1))
+ else
+ Applicative[FreeTOption].pure(Either.right[Int, Unit](()))
+ )
Eq[FreeTOption[Unit]].eqv(expected, result) should ===(true)
}
@@ -95,7 +98,7 @@ class FreeTSuite extends CatsSuite {
val b = a.compile(FunctionK.id)
Eq[FreeTOption[Int]].eqv(a, b) should ===(true)
val fk = FreeT.compile[Option, Option, Option](FunctionK.id)
- a should === (fk(a))
+ a should ===(fk(a))
}
}
@@ -112,13 +115,13 @@ class FreeTSuite extends CatsSuite {
val y = a.foldMap(FunctionK.id)
val fk = FreeT.foldMap[Option, Option](FunctionK.id)
Eq[Option[Int]].eqv(x, y) should ===(true)
- y should === (fk(a))
+ y should ===(fk(a))
}
}
sealed trait Test1Algebra[A]
- case class Test1[A](value : Int, f: Int => A) extends Test1Algebra[A]
+ case class Test1[A](value: Int, f: Int => A) extends Test1Algebra[A]
def test1[A](value: Int, f: Int => A): Test1Algebra[A] = Test1(value, f)
@@ -130,13 +133,14 @@ class FreeTSuite extends CatsSuite {
}
}
- implicit def test1AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int], intAArb : Arbitrary[Int => A]): Arbitrary[Test1Algebra[A]] =
- Arbitrary(for {s <- seqArb.arbitrary; f <- intAArb.arbitrary} yield Test1(s, f))
+ implicit def test1AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int],
+ intAArb: Arbitrary[Int => A]): Arbitrary[Test1Algebra[A]] =
+ Arbitrary(for { s <- seqArb.arbitrary; f <- intAArb.arbitrary } yield Test1(s, f))
}
sealed trait Test2Algebra[A]
- case class Test2[A](value : Int, f: Int => A) extends Test2Algebra[A]
+ case class Test2[A](value: Int, f: Int => A) extends Test2Algebra[A]
def test2[A](value: Int, f: Int => A): Test2Algebra[A] = Test2(value, f)
@@ -148,37 +152,35 @@ class FreeTSuite extends CatsSuite {
}
}
- implicit def test2AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int], intAArb : Arbitrary[Int => A]): Arbitrary[Test2Algebra[A]] =
- Arbitrary(for {s <- seqArb.arbitrary; f <- intAArb.arbitrary} yield Test2(s, f))
+ implicit def test2AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int],
+ intAArb: Arbitrary[Int => A]): Arbitrary[Test2Algebra[A]] =
+ Arbitrary(for { s <- seqArb.arbitrary; f <- intAArb.arbitrary } yield Test2(s, f))
}
type T[A] = EitherK[Test1Algebra, Test2Algebra, A]
- object Test1Interpreter extends FunctionK[Test1Algebra,Id] {
+ object Test1Interpreter extends FunctionK[Test1Algebra, Id] {
override def apply[A](fa: Test1Algebra[A]): Id[A] = fa match {
case Test1(k, h) => h(k)
}
}
- object Test2Interpreter extends FunctionK[Test2Algebra,Id] {
+ object Test2Interpreter extends FunctionK[Test2Algebra, Id] {
override def apply[A](fa: Test2Algebra[A]): Id[A] = fa match {
case Test2(k, h) => h(k)
}
}
- val eitherKInterpreter: FunctionK[T,Id] = Test1Interpreter or Test2Interpreter
+ val eitherKInterpreter: FunctionK[T, Id] = Test1Interpreter.or(Test2Interpreter)
test(".liftInject") {
forAll { (x: Int, y: Int) =>
- def res[F[_]]
- (implicit I0: Test1Algebra :<: F,
- I1: Test2Algebra :<: F): FreeT[F, Id, Int] = {
+ def res[F[_]](implicit I0: Test1Algebra :<: F, I1: Test2Algebra :<: F): FreeT[F, Id, Int] =
for {
a <- FreeT.liftInject[Id, F](test1(x, identity))
b <- FreeT.liftInject[Id, F](test2(y, identity))
} yield a + b
- }
- (res[T] foldMap eitherKInterpreter) == (x + y) should ===(true)
+ (res[T].foldMap(eitherKInterpreter)) == (x + y) should ===(true)
}
}
@@ -197,7 +199,7 @@ class FreeTSuite extends CatsSuite {
}
private[free] def liftTCompilationTests() = {
- val a: Either[String, Int]= Right(42)
+ val a: Either[String, Int] = Right(42)
val b: FreeT[Option, Either[String, ?], Int] = FreeT.liftT(a)
}
@@ -208,11 +210,14 @@ object FreeTSuite extends FreeTSuiteInstances {
import Arbitrary._
import org.scalacheck.Arbitrary
-
- implicit def freeTArb[F[_], G[_]: Applicative, A](implicit F: Arbitrary[F[A]], G: Arbitrary[G[A]], A: Arbitrary[A]): Arbitrary[FreeT[F, G, A]] =
+ implicit def freeTArb[F[_], G[_]: Applicative, A](implicit F: Arbitrary[F[A]],
+ G: Arbitrary[G[A]],
+ A: Arbitrary[A]): Arbitrary[FreeT[F, G, A]] =
Arbitrary(freeTGen[F, G, A](4))
- private def freeTGen[F[_], G[_]: Applicative, A](maxDepth: Int)(implicit F: Arbitrary[F[A]], G: Arbitrary[G[A]], A: Arbitrary[A]): Gen[FreeT[F, G, A]] = {
+ private def freeTGen[F[_], G[_]: Applicative, A](
+ maxDepth: Int
+ )(implicit F: Arbitrary[F[A]], G: Arbitrary[G[A]], A: Arbitrary[A]): Gen[FreeT[F, G, A]] = {
val noFlatMapped = Gen.oneOf(
A.arbitrary.map(FreeT.pure[F, G, A]),
F.arbitrary.map(FreeT.liftF[F, G, A])
@@ -220,12 +225,13 @@ object FreeTSuite extends FreeTSuiteInstances {
val nextDepth = Gen.chooseNum(1, math.max(1, maxDepth - 1))
- def withFlatMapped = for {
- fDepth <- nextDepth
- freeDepth <- nextDepth
- f <- arbFunction1[A, FreeT[F, G, A]](Arbitrary(freeTGen[F, G, A](fDepth)), Cogen[Unit].contramap(_ => ())).arbitrary
- freeFGA <- freeTGen[F, G, A](freeDepth)
- } yield freeFGA.flatMap(f)
+ def withFlatMapped =
+ for {
+ fDepth <- nextDepth
+ freeDepth <- nextDepth
+ f <- arbFunction1[A, FreeT[F, G, A]](Arbitrary(freeTGen[F, G, A](fDepth)), Cogen[Unit].contramap(_ => ())).arbitrary
+ freeFGA <- freeTGen[F, G, A](freeDepth)
+ } yield freeFGA.flatMap(f)
if (maxDepth <= 1) noFlatMapped
else Gen.oneOf(noFlatMapped, withFlatMapped)
@@ -270,6 +276,7 @@ trait FreeTSuiteInstances {
}
implicit def freeTStateEq[A](implicit A: Eq[A], SM: Monad[IntState]): Eq[FreeTState[A]] = new Eq[FreeTState[A]] {
- def eqv(a: FreeTState[A], b: FreeTState[A]) = Eq[IntState[A]].eqv(a.runM(identity)(SM, SM), b.runM(identity)(SM, SM))
+ def eqv(a: FreeTState[A], b: FreeTState[A]) =
+ Eq[IntState[A]].eqv(a.runM(identity)(SM, SM), b.runM(identity)(SM, SM))
}
}
diff --git a/free/src/test/scala/cats/free/YonedaSuite.scala b/free/src/test/scala/cats/free/YonedaSuite.scala
index 3a236a449e..d8962f6bef 100644
--- a/free/src/test/scala/cats/free/YonedaSuite.scala
+++ b/free/src/test/scala/cats/free/YonedaSuite.scala
@@ -7,7 +7,7 @@ import cats.laws.discipline.{FunctorTests, SerializableTests}
import org.scalacheck.Arbitrary
class YonedaSuite extends CatsSuite {
- implicit def yonedaArbitrary[F[_] : Functor, A](implicit F: Arbitrary[F[A]]): Arbitrary[Yoneda[F, A]] =
+ implicit def yonedaArbitrary[F[_]: Functor, A](implicit F: Arbitrary[F[A]]): Arbitrary[Yoneda[F, A]] =
Arbitrary(F.arbitrary.map(Yoneda(_)))
implicit def yonedaEq[F[_]: Functor, A](implicit FA: Eq[F[A]]): Eq[Yoneda[F, A]] =
@@ -18,9 +18,9 @@ class YonedaSuite extends CatsSuite {
checkAll("Yoneda[Option, ?]", FunctorTests[Yoneda[Option, ?]].functor[Int, Int, Int])
checkAll("Functor[Yoneda[Option, ?]]", SerializableTests.serializable(Functor[Yoneda[Option, ?]]))
- test("toCoyoneda and then toYoneda is identity"){
- forAll{ (y: Yoneda[Option, Int]) =>
- y.toCoyoneda.toYoneda should === (y)
+ test("toCoyoneda and then toYoneda is identity") {
+ forAll { (y: Yoneda[Option, Int]) =>
+ y.toCoyoneda.toYoneda should ===(y)
}
}
}
diff --git a/js/src/main/scala/cats/js/instances/future.scala b/js/src/main/scala/cats/js/instances/future.scala
index d00daf10fd..d641b4fdb8 100644
--- a/js/src/main/scala/cats/js/instances/future.scala
+++ b/js/src/main/scala/cats/js/instances/future.scala
@@ -13,12 +13,12 @@ object future extends FutureInstances0
object Await {
def result[A](f: Future[A], atMost: FiniteDuration): A = f.value match {
- case Some(v) => v.get
- case None => throw new IllegalStateException()
- }
+ case Some(v) => v.get
+ case None => throw new IllegalStateException()
+ }
}
-private[instances] sealed trait FutureInstances0 extends FutureInstances1 {
+sealed private[instances] trait FutureInstances0 extends FutureInstances1 {
def futureComonad(atMost: FiniteDuration)(implicit ec: E): Comonad[Future] =
new FutureCoflatMap with Comonad[Future] {
def extract[A](x: Future[A]): A =
@@ -28,23 +28,23 @@ private[instances] sealed trait FutureInstances0 extends FutureInstances1 {
def futureOrder[A: Order](atMost: FiniteDuration)(implicit ec: E): Order[Future[A]] =
new Order[Future[A]] {
def compare(x: Future[A], y: Future[A]): Int =
- Await.result((x zip y).map { case (x, y) => x compare y }, atMost)
+ Await.result(x.zip(y).map { case (x, y) => x.compare(y) }, atMost)
}
}
-private[instances] sealed trait FutureInstances1 extends FutureInstances2 {
+sealed private[instances] trait FutureInstances1 extends FutureInstances2 {
def futurePartialOrder[A: PartialOrder](atMost: FiniteDuration)(implicit ec: E): PartialOrder[Future[A]] =
new PartialOrder[Future[A]] {
def partialCompare(x: Future[A], y: Future[A]): Double =
- Await.result((x zip y).map { case (x, y) => x partialCompare y }, atMost)
+ Await.result(x.zip(y).map { case (x, y) => x.partialCompare(y) }, atMost)
}
}
-private[instances] sealed trait FutureInstances2 {
+sealed private[instances] trait FutureInstances2 {
def futureEq[A: Eq](atMost: FiniteDuration)(implicit ec: E): Eq[Future[A]] =
new Eq[Future[A]] {
def eqv(x: Future[A], y: Future[A]): Boolean =
- Await.result((x zip y).map { case (x, y) => x === y }, atMost)
+ Await.result(x.zip(y).map { case (x, y) => x === y }, atMost)
}
}
diff --git a/js/src/test/scala/cats/tests/FutureTests.scala b/js/src/test/scala/cats/tests/FutureTests.scala
index bc712666c1..8976bc383a 100644
--- a/js/src/test/scala/cats/tests/FutureTests.scala
+++ b/js/src/test/scala/cats/tests/FutureTests.scala
@@ -32,12 +32,11 @@ class FutureTests extends CatsSuite {
implicit def eqfa[A: Eq]: Eq[Future[A]] =
new Eq[Future[A]] {
def eqv(fx: Future[A], fy: Future[A]): Boolean = {
- val fz = futureEither(fx) zip futureEither(fy)
+ val fz = futureEither(fx).zip(futureEither(fy))
Await.result(fz.map { case (tx, ty) => tx === ty }, timeout)
}
}
-
implicit val throwableEq: Eq[Throwable] =
Eq.by[Throwable, String](_.toString)
diff --git a/jvm/src/test/scala/cats/tests/FutureSuite.scala b/jvm/src/test/scala/cats/tests/FutureSuite.scala
index 02d477cc91..b30aaf7ec9 100644
--- a/jvm/src/test/scala/cats/tests/FutureSuite.scala
+++ b/jvm/src/test/scala/cats/tests/FutureSuite.scala
@@ -23,14 +23,15 @@ class FutureSuite extends CatsSuite {
implicit def eqfa[A: Eq]: Eq[Future[A]] =
new Eq[Future[A]] {
def eqv(fx: Future[A], fy: Future[A]): Boolean = {
- val fz = futureEither(fx) zip futureEither(fy)
+ val fz = futureEither(fx).zip(futureEither(fy))
Await.result(fz.map { case (tx, ty) => tx === ty }, timeout)
}
}
implicit def cogen[A: Cogen]: Cogen[Future[A]] =
- Cogen[Future[A]] { (seed: Seed, t: Future[A]) => Cogen[A].perturb(seed, Await.result(t, timeout)) }
-
+ Cogen[Future[A]] { (seed: Seed, t: Future[A]) =>
+ Cogen[A].perturb(seed, Await.result(t, timeout))
+ }
implicit val throwableEq: Eq[Throwable] =
Eq.by[Throwable, String](_.toString)
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/BandLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/BandLaws.scala
index a6e8f03180..167f2659ce 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/BandLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/BandLaws.scala
@@ -3,7 +3,7 @@ package cats.kernel.laws
import cats.kernel.Band
trait BandLaws[A] extends SemigroupLaws[A] {
- override implicit def S: Band[A]
+ implicit override def S: Band[A]
def idempotence(x: A): IsEq[A] =
S.combine(x, x) <-> x
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/BoundedSemilatticeLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/BoundedSemilatticeLaws.scala
index d55b64a380..92963f3c24 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/BoundedSemilatticeLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/BoundedSemilatticeLaws.scala
@@ -3,7 +3,7 @@ package cats.kernel.laws
import cats.kernel.BoundedSemilattice
trait BoundedSemilatticeLaws[A] extends CommutativeMonoidLaws[A] with SemilatticeLaws[A] {
- override implicit def S: BoundedSemilattice[A]
+ implicit override def S: BoundedSemilattice[A]
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeGroupLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeGroupLaws.scala
index 0a2d6ceee0..1f5735db4a 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeGroupLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeGroupLaws.scala
@@ -2,9 +2,8 @@ package cats
package kernel
package laws
-
trait CommutativeGroupLaws[A] extends GroupLaws[A] with CommutativeMonoidLaws[A] {
- override implicit def S: CommutativeGroup[A]
+ implicit override def S: CommutativeGroup[A]
}
object CommutativeGroupLaws {
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeMonoidLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeMonoidLaws.scala
index 115962db14..92e789794c 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeMonoidLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeMonoidLaws.scala
@@ -3,7 +3,7 @@ package cats.kernel.laws
import cats.kernel.CommutativeMonoid
trait CommutativeMonoidLaws[A] extends MonoidLaws[A] with CommutativeSemigroupLaws[A] {
- override implicit def S: CommutativeMonoid[A]
+ implicit override def S: CommutativeMonoid[A]
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeSemigroupLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeSemigroupLaws.scala
index b183816e34..6e405649c1 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeSemigroupLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/CommutativeSemigroupLaws.scala
@@ -3,7 +3,7 @@ package cats.kernel.laws
import cats.kernel.CommutativeSemigroup
trait CommutativeSemigroupLaws[A] extends SemigroupLaws[A] {
- override implicit def S: CommutativeSemigroup[A]
+ implicit override def S: CommutativeSemigroup[A]
def commutative(x: A, y: A): IsEq[A] =
S.combine(x, y) <-> S.combine(y, x)
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/GroupLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/GroupLaws.scala
index 340d24e9d7..b4ac324a73 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/GroupLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/GroupLaws.scala
@@ -1,9 +1,8 @@
package cats.kernel
package laws
-
trait GroupLaws[A] extends MonoidLaws[A] {
- override implicit def S: Group[A]
+ implicit override def S: Group[A]
def leftInverse(x: A): IsEq[A] =
S.empty <-> S.combine(S.inverse(x), x)
@@ -19,5 +18,3 @@ object GroupLaws {
def apply[A](implicit ev: Group[A]): GroupLaws[A] =
new GroupLaws[A] { def S: Group[A] = ev }
}
-
-
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/HashLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/HashLaws.scala
index a710a90e61..20fb31dd10 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/HashLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/HashLaws.scala
@@ -4,20 +4,18 @@ package laws
import scala.util.hashing._
trait HashLaws[A] extends EqLaws[A] {
- override implicit def E: Hash[A]
+ implicit override def E: Hash[A]
def hashCompatibility(x: A, y: A): IsEq[Boolean] =
(!E.eqv(x, y) || (Hash.hash(x) == Hash.hash(y))) <-> true
-
- def sameAsUniversalHash (x: A, y: A): IsEq[Boolean] =
+ def sameAsUniversalHash(x: A, y: A): IsEq[Boolean] =
((E.hash(x) == x.hashCode) && (Hash.fromUniversalHashCode[A].hash(x) == x.hashCode()) &&
- (E.eqv(x, y) == Hash.fromUniversalHashCode[A].eqv(x, y))) <-> true
-
+ (E.eqv(x, y) == Hash.fromUniversalHashCode[A].eqv(x, y))) <-> true
def sameAsScalaHashing(x: A, y: A, scalaHashing: Hashing[A]): IsEq[Boolean] =
- ((E.hash(x) == Hash.fromHashing(scalaHashing).hash(x)) &&
- (E.eqv(x, y) == Hash.fromHashing(scalaHashing).eqv(x, y))) <-> true
+ ((E.hash(x) == Hash.fromHashing(scalaHashing).hash(x)) &&
+ (E.eqv(x, y) == Hash.fromHashing(scalaHashing).eqv(x, y))) <-> true
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/MonoidLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/MonoidLaws.scala
index 979d80ca0a..8345e76044 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/MonoidLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/MonoidLaws.scala
@@ -3,7 +3,7 @@ package cats.kernel.laws
import cats.kernel.{Eq, Monoid}
trait MonoidLaws[A] extends SemigroupLaws[A] {
- override implicit def S: Monoid[A]
+ implicit override def S: Monoid[A]
def leftIdentity(x: A): IsEq[A] =
S.combine(S.empty, x) <-> x
@@ -20,9 +20,8 @@ trait MonoidLaws[A] extends SemigroupLaws[A] {
def combineAll(xs: Vector[A]): IsEq[A] =
S.combineAll(xs) <-> (S.empty +: xs).reduce(S.combine)
- def isId(x: A, eqv: Eq[A]): IsEq[Boolean] = {
+ def isId(x: A, eqv: Eq[A]): IsEq[Boolean] =
eqv.eqv(x, S.empty) <-> S.isEmpty(x)(eqv)
- }
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/OrderLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/OrderLaws.scala
index dc7aa026c3..1595108dde 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/OrderLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/OrderLaws.scala
@@ -5,7 +5,7 @@ import cats.kernel.Order
trait OrderLaws[A] extends PartialOrderLaws[A] {
- override implicit def E: Order[A]
+ implicit override def E: Order[A]
def totality(x: A, y: A): IsEq[Boolean] =
(E.lteqv(x, y) || E.lteqv(y, x)) <-> true
@@ -37,4 +37,3 @@ object OrderLaws {
def apply[A](implicit ev: Order[A]): OrderLaws[A] =
new OrderLaws[A] { def E: Order[A] = ev }
}
-
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/PartialOrderLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/PartialOrderLaws.scala
index f8887d7c14..a43acebf2a 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/PartialOrderLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/PartialOrderLaws.scala
@@ -4,7 +4,7 @@ import cats.kernel.{Eq, PartialOrder}
import cats.kernel.instances.option._
trait PartialOrderLaws[A] extends EqLaws[A] {
- override implicit def E: PartialOrder[A]
+ implicit override def E: PartialOrder[A]
def reflexitivityLt(x: A): IsEq[Boolean] =
E.lteqv(x, x) <-> true
@@ -50,7 +50,6 @@ trait PartialOrderLaws[A] extends EqLaws[A] {
else Eq[Option[A]].eqv(m, None) <-> true
}
-
}
object PartialOrderLaws {
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/SerializableLaws.scala b/kernel-laws/src/main/scala/cats/kernel/laws/SerializableLaws.scala
index aa567cd756..a860815890 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/SerializableLaws.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/SerializableLaws.scala
@@ -1,19 +1,19 @@
package cats.kernel.laws
import org.scalacheck.Prop
-import org.scalacheck.Prop.{ Exception, Proof, Result }
+import org.scalacheck.Prop.{Exception, Proof, Result}
import catalysts.Platform
import scala.util.control.NonFatal
/**
- * Check for Java Serializability.
- *
- * This law is only applicable on the JVM, but is something we want
- * to be sure to enforce. Therefore, we use bricks.Platform to do a
- * runtime check rather than create a separate jvm-laws project.
- */
+ * Check for Java Serializability.
+ *
+ * This law is only applicable on the JVM, but is something we want
+ * to be sure to enforce. Therefore, we use bricks.Platform to do a
+ * runtime check rather than create a separate jvm-laws project.
+ */
object SerializableLaws {
// This part is a bit tricky. Basically, we only want to test
@@ -29,25 +29,28 @@ object SerializableLaws {
// laws project.
def serializable[A](a: A): Prop =
- if (Platform.isJs) Prop(_ => Result(status = Proof)) else Prop { _ =>
- import java.io.{ ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream }
+ if (Platform.isJs) Prop(_ => Result(status = Proof))
+ else
+ Prop { _ =>
+ import java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream}
- val baos = new ByteArrayOutputStream()
- val oos = new ObjectOutputStream(baos)
- var ois: ObjectInputStream = null // scalastyle:ignore null
- try {
- oos.writeObject(a)
- oos.close()
- val bais = new ByteArrayInputStream(baos.toByteArray())
- ois = new ObjectInputStream(bais)
- val a2 = ois.readObject()
- ois.close()
- Result(status = Proof)
- } catch { case NonFatal(t) =>
- Result(status = Exception(t))
- } finally {
- oos.close()
- if (ois != null) ois.close() // scalastyle:ignore null
+ val baos = new ByteArrayOutputStream()
+ val oos = new ObjectOutputStream(baos)
+ var ois: ObjectInputStream = null // scalastyle:ignore null
+ try {
+ oos.writeObject(a)
+ oos.close()
+ val bais = new ByteArrayInputStream(baos.toByteArray())
+ ois = new ObjectInputStream(bais)
+ val a2 = ois.readObject()
+ ois.close()
+ Result(status = Proof)
+ } catch {
+ case NonFatal(t) =>
+ Result(status = Exception(t))
+ } finally {
+ oos.close()
+ if (ois != null) ois.close() // scalastyle:ignore null
+ }
}
- }
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/BandTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/BandTests.scala
index 87a9941f66..fd707966b1 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/BandTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/BandTests.scala
@@ -11,10 +11,7 @@ trait BandTests[A] extends SemigroupTests[A] {
def laws: BandLaws[A]
def band(implicit arbA: Arbitrary[A], eqA: Eq[A]): RuleSet =
- new DefaultRuleSet(
- "band",
- Some(semigroup),
- "idempotency" -> forAll(laws.idempotence _))
+ new DefaultRuleSet("band", Some(semigroup), "idempotency" -> forAll(laws.idempotence _))
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/CommutativeSemigroupTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/CommutativeSemigroupTests.scala
index 2a0f97accf..c5430d1ea0 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/CommutativeSemigroupTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/CommutativeSemigroupTests.scala
@@ -11,10 +11,7 @@ trait CommutativeSemigroupTests[A] extends SemigroupTests[A] {
def laws: CommutativeSemigroupLaws[A]
def commutativeSemigroup(implicit arbA: Arbitrary[A], eqA: Eq[A]): RuleSet =
- new DefaultRuleSet(
- "commutativeSemigroup",
- Some(semigroup),
- "commutative" -> forAll(laws.commutative _))
+ new DefaultRuleSet("commutativeSemigroup", Some(semigroup), "commutative" -> forAll(laws.commutative _))
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/EqTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/EqTests.scala
index 585687ed3b..e93e6f185a 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/EqTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/EqTests.scala
@@ -20,7 +20,8 @@ trait EqTests[A] extends Laws {
"reflexitivity" -> forAll(laws.reflexitivityEq _),
"symmetry" -> forAll(laws.symmetryEq _),
"antisymmetry" -> forAll(laws.antiSymmetryEq _),
- "transitivity" -> forAll(laws.transitivityEq _))
+ "transitivity" -> forAll(laws.transitivityEq _)
+ )
}
}
@@ -28,4 +29,3 @@ object EqTests {
def apply[A: Eq]: EqTests[A] =
new EqTests[A] { def laws: EqLaws[A] = EqLaws[A] }
}
-
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/GroupTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/GroupTests.scala
index 506f860c79..2e7d9e1e38 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/GroupTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/GroupTests.scala
@@ -16,7 +16,8 @@ trait GroupTests[A] extends MonoidTests[A] {
Some(monoid),
"left inverse" -> forAll(laws.leftInverse _),
"right inverse" -> forAll(laws.rightInverse _),
- "consistent inverse" -> forAll(laws.consistentInverse _))
+ "consistent inverse" -> forAll(laws.consistentInverse _)
+ )
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/MonoidTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/MonoidTests.scala
index f058cf8780..1436fee98f 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/MonoidTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/MonoidTests.scala
@@ -20,7 +20,8 @@ trait MonoidTests[A] extends SemigroupTests[A] {
"combine all" -> forAll(laws.combineAll _),
"collect0" -> forAll(laws.collect0 _),
"is id" -> forAll((a: A) => laws.isId(a, eqA)),
- "repeat0" -> forAll(laws.repeat0 _))
+ "repeat0" -> forAll(laws.repeat0 _)
+ )
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemigroupTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemigroupTests.scala
index 8badff4e6d..213b2287d3 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemigroupTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemigroupTests.scala
@@ -18,7 +18,8 @@ trait SemigroupTests[A] extends Laws {
"associative" -> forAll(laws.semigroupAssociative _),
"repeat1" -> forAll(laws.repeat1 _),
"repeat2" -> forAll(laws.repeat2 _),
- "combineAllOption" -> forAll(laws.combineAllOption _))
+ "combineAllOption" -> forAll(laws.combineAllOption _)
+ )
}
object SemigroupTests {
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemilatticeTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemilatticeTests.scala
index d4a697a52b..89c3f4e918 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemilatticeTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SemilatticeTests.scala
@@ -23,5 +23,3 @@ object SemilatticeTests {
def apply[A: Semilattice]: SemilatticeTests[A] =
new SemilatticeTests[A] { def laws: SemilatticeLaws[A] = SemilatticeLaws[A] }
}
-
-
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SerializableTests.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SerializableTests.scala
index a19d46c498..4be5b8a16e 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SerializableTests.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/SerializableTests.scala
@@ -5,8 +5,7 @@ import org.typelevel.discipline.Laws
object SerializableTests extends Laws {
def serializable[A](a: A): RuleSet =
- new DefaultRuleSet(
- name = "serializable",
- parent = None,
- "can serialize and deserialize" -> SerializableLaws.serializable(a))
+ new DefaultRuleSet(name = "serializable",
+ parent = None,
+ "can serialize and deserialize" -> SerializableLaws.serializable(a))
}
diff --git a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/package.scala b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/package.scala
index cd7ce970b0..99fb11e50d 100644
--- a/kernel-laws/src/main/scala/cats/kernel/laws/discipline/package.scala
+++ b/kernel-laws/src/main/scala/cats/kernel/laws/discipline/package.scala
@@ -6,11 +6,14 @@ import org.scalacheck.util.Pretty
package object discipline {
implicit def catsLawsIsEqToProp[A](isEq: IsEq[A])(implicit ev: Eq[A], pp: A => Pretty): Prop =
- isEq match { case IsEq(x, y) =>
- if (ev.eqv(x, y)) Prop.proved else Prop.falsified :| {
- val exp = Pretty.pretty[A](y, Pretty.Params(0))
- val act = Pretty.pretty[A](x, Pretty.Params(0))
- s"Expected: $exp\n" + s"Received: $act"
- }
+ isEq match {
+ case IsEq(x, y) =>
+ if (ev.eqv(x, y)) Prop.proved
+ else
+ Prop.falsified :| {
+ val exp = Pretty.pretty[A](y, Pretty.Params(0))
+ val act = Pretty.pretty[A](x, Pretty.Params(0))
+ s"Expected: $exp\n" + s"Received: $act"
+ }
}
}
diff --git a/kernel-laws/src/test/scala/cats/kernel/laws/LawTests.scala b/kernel-laws/src/test/scala/cats/kernel/laws/LawTests.scala
index 44779c592c..e9b61469f2 100644
--- a/kernel-laws/src/test/scala/cats/kernel/laws/LawTests.scala
+++ b/kernel-laws/src/test/scala/cats/kernel/laws/LawTests.scala
@@ -6,24 +6,22 @@ import catalysts.macros.TypeTagM
import cats.kernel.instances.all._
import cats.kernel.laws.discipline._
-
import org.typelevel.discipline.Laws
import org.typelevel.discipline.scalatest.Discipline
-import org.scalacheck.{ Arbitrary, Cogen, Gen }
+import org.scalacheck.{Arbitrary, Cogen, Gen}
import Arbitrary.arbitrary
-import org.scalactic.anyvals.{ PosInt, PosZInt }
+import org.scalactic.anyvals.{PosInt, PosZInt}
import org.scalatest.FunSuite
-import scala.concurrent.duration.{ Duration, FiniteDuration }
+import scala.concurrent.duration.{Duration, FiniteDuration}
import scala.collection.immutable.{BitSet, Queue}
import scala.util.Random
import java.util.UUID
-import java.util.concurrent.TimeUnit.{DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS}
+import java.util.concurrent.TimeUnit.{DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS}
object KernelCheck {
-
implicit val arbitraryBitSet: Arbitrary[BitSet] =
Arbitrary(arbitrary[List[Short]].map(ns => BitSet(ns.map(_ & 0xffff): _*)))
@@ -37,28 +35,34 @@ object KernelCheck {
// max range is +/- 292 years, but we give ourselves some extra headroom
// to ensure that we can add these things up. they crash on overflow.
val n = (292L * 365) / 50
- Arbitrary(Gen.oneOf(
- Gen.choose(-n, n).map(Duration(_, DAYS)),
- Gen.choose(-n * 24L, n * 24L).map(Duration(_, HOURS)),
- Gen.choose(-n * 1440L, n * 1440L).map(Duration(_, MINUTES)),
- Gen.choose(-n * 86400L, n * 86400L).map(Duration(_, SECONDS)),
- Gen.choose(-n * 86400000L, n * 86400000L).map(Duration(_, MILLISECONDS)),
- Gen.choose(-n * 86400000000L, n * 86400000000L).map(Duration(_, MICROSECONDS)),
- Gen.choose(-n * 86400000000000L, n * 86400000000000L).map(Duration(_, NANOSECONDS))))
+ Arbitrary(
+ Gen.oneOf(
+ Gen.choose(-n, n).map(Duration(_, DAYS)),
+ Gen.choose(-n * 24L, n * 24L).map(Duration(_, HOURS)),
+ Gen.choose(-n * 1440L, n * 1440L).map(Duration(_, MINUTES)),
+ Gen.choose(-n * 86400L, n * 86400L).map(Duration(_, SECONDS)),
+ Gen.choose(-n * 86400000L, n * 86400000L).map(Duration(_, MILLISECONDS)),
+ Gen.choose(-n * 86400000000L, n * 86400000000L).map(Duration(_, MICROSECONDS)),
+ Gen.choose(-n * 86400000000000L, n * 86400000000000L).map(Duration(_, NANOSECONDS))
+ )
+ )
}
implicit val arbitraryFiniteDuration: Arbitrary[FiniteDuration] = {
// max range is +/- 292 years, but we give ourselves some extra headroom
// to ensure that we can add these things up. they crash on overflow.
val n = (292L * 365) / 50
- Arbitrary(Gen.oneOf(
- Gen.choose(-n, n).map(FiniteDuration(_, DAYS)),
- Gen.choose(-n * 24L, n * 24L).map(FiniteDuration(_, HOURS)),
- Gen.choose(-n * 1440L, n * 1440L).map(FiniteDuration(_, MINUTES)),
- Gen.choose(-n * 86400L, n * 86400L).map(FiniteDuration(_, SECONDS)),
- Gen.choose(-n * 86400000L, n * 86400000L).map(FiniteDuration(_, MILLISECONDS)),
- Gen.choose(-n * 86400000000L, n * 86400000000L).map(FiniteDuration(_, MICROSECONDS)),
- Gen.choose(-n * 86400000000000L, n * 86400000000000L).map(FiniteDuration(_, NANOSECONDS))))
+ Arbitrary(
+ Gen.oneOf(
+ Gen.choose(-n, n).map(FiniteDuration(_, DAYS)),
+ Gen.choose(-n * 24L, n * 24L).map(FiniteDuration(_, HOURS)),
+ Gen.choose(-n * 1440L, n * 1440L).map(FiniteDuration(_, MINUTES)),
+ Gen.choose(-n * 86400L, n * 86400L).map(FiniteDuration(_, SECONDS)),
+ Gen.choose(-n * 86400000L, n * 86400000L).map(FiniteDuration(_, MILLISECONDS)),
+ Gen.choose(-n * 86400000000L, n * 86400000000L).map(FiniteDuration(_, MICROSECONDS)),
+ Gen.choose(-n * 86400000000000L, n * 86400000000000L).map(FiniteDuration(_, NANOSECONDS))
+ )
+ )
}
// this instance is not available in scalacheck 1.13.2.
@@ -82,27 +86,28 @@ object KernelCheck {
if (d == Duration.Inf) 3896691548866406746L
else if (d == Duration.MinusInf) 1844151880988859955L
else if (d == Duration.Undefined) -7917359255778781894L
- else d.length * (d.unit match {
- case DAYS => -6307593037248227856L
- case HOURS => -3527447467459552709L
- case MINUTES => 5955657079535371609L
- case SECONDS => 5314272869665647192L
- case MILLISECONDS => -2025740217814855607L
- case MICROSECONDS => -2965853209268633779L
- case NANOSECONDS => 6128745701389500153L
- })
+ else
+ d.length * (d.unit match {
+ case DAYS => -6307593037248227856L
+ case HOURS => -3527447467459552709L
+ case MINUTES => 5955657079535371609L
+ case SECONDS => 5314272869665647192L
+ case MILLISECONDS => -2025740217814855607L
+ case MICROSECONDS => -2965853209268633779L
+ case NANOSECONDS => 6128745701389500153L
+ })
}
implicit val cogenFiniteDuration: Cogen[FiniteDuration] =
Cogen[Long].contramap { d =>
d.length * (d.unit match {
- case DAYS => -6307593037248227856L
- case HOURS => -3527447467459552709L
- case MINUTES => 5955657079535371609L
- case SECONDS => 5314272869665647192L
+ case DAYS => -6307593037248227856L
+ case HOURS => -3527447467459552709L
+ case MINUTES => 5955657079535371609L
+ case SECONDS => 5314272869665647192L
case MILLISECONDS => -2025740217814855607L
case MICROSECONDS => -2965853209268633779L
- case NANOSECONDS => 6128745701389500153L
+ case NANOSECONDS => 6128745701389500153L
})
}
}
@@ -117,11 +122,7 @@ class Tests extends FunSuite with Discipline {
final val PropWorkers: PosInt = if (Platform.isJvm) PosInt(2) else PosInt(1)
implicit override val generatorDrivenConfig: PropertyCheckConfiguration =
- PropertyCheckConfiguration(
- minSuccessful = PropMinSuccessful,
- sizeRange = PropMaxSize,
- workers = PropWorkers)
-
+ PropertyCheckConfiguration(minSuccessful = PropMinSuccessful, sizeRange = PropMaxSize, workers = PropWorkers)
{
// needed for Cogen[Map[...]]
@@ -129,7 +130,6 @@ class Tests extends FunSuite with Discipline {
checkAll("Eq[Map[String, HasEq[Int]]]", EqTests[Map[String, HasEq[Int]]].eqv)
}
-
checkAll("Eq[List[HasEq[Int]]]", EqTests[List[HasEq[Int]]].eqv)
checkAll("Eq[Option[HasEq[Int]]]", EqTests[Option[HasEq[Int]]].eqv)
checkAll("Eq[Vector[HasEq[Int]]]", EqTests[Vector[HasEq[Int]]].eqv)
@@ -137,15 +137,21 @@ class Tests extends FunSuite with Discipline {
checkAll("Eq[Queue[HasEq[Int]]]", EqTests[Queue[HasEq[Int]]].eqv)
checkAll("PartialOrder[Set[Int]]", PartialOrderTests[Set[Int]].partialOrder)
- checkAll("PartialOrder.reverse(PartialOrder[Set[Int]])", PartialOrderTests(PartialOrder.reverse(PartialOrder[Set[Int]])).partialOrder)
- checkAll("PartialOrder.reverse(PartialOrder.reverse(PartialOrder[Set[Int]]))", PartialOrderTests(PartialOrder.reverse(PartialOrder.reverse(PartialOrder[Set[Int]]))).partialOrder)
+ checkAll("PartialOrder.reverse(PartialOrder[Set[Int]])",
+ PartialOrderTests(PartialOrder.reverse(PartialOrder[Set[Int]])).partialOrder)
+ checkAll(
+ "PartialOrder.reverse(PartialOrder.reverse(PartialOrder[Set[Int]]))",
+ PartialOrderTests(PartialOrder.reverse(PartialOrder.reverse(PartialOrder[Set[Int]]))).partialOrder
+ )
checkAll("PartialOrder[Option[HasPartialOrder[Int]]]", PartialOrderTests[Option[HasPartialOrder[Int]]].partialOrder)
checkAll("PartialOrder[List[HasPartialOrder[Int]]]", PartialOrderTests[List[HasPartialOrder[Int]]].partialOrder)
checkAll("PartialOrder[Vector[HasPartialOrder[Int]]]", PartialOrderTests[Vector[HasPartialOrder[Int]]].partialOrder)
checkAll("PartialOrder[Stream[HasPartialOrder[Int]]]", PartialOrderTests[Stream[HasPartialOrder[Int]]].partialOrder)
checkAll("PartialOrder[Queue[HasPartialOrder[Int]]]", PartialOrderTests[Queue[HasPartialOrder[Int]]].partialOrder)
- checkAll("Semilattice.asMeetPartialOrder[Set[Int]]", PartialOrderTests(Semilattice.asMeetPartialOrder[Set[Int]]).partialOrder)
- checkAll("Semilattice.asJoinPartialOrder[Set[Int]]", PartialOrderTests(Semilattice.asJoinPartialOrder[Set[Int]]).partialOrder)
+ checkAll("Semilattice.asMeetPartialOrder[Set[Int]]",
+ PartialOrderTests(Semilattice.asMeetPartialOrder[Set[Int]]).partialOrder)
+ checkAll("Semilattice.asJoinPartialOrder[Set[Int]]",
+ PartialOrderTests(Semilattice.asJoinPartialOrder[Set[Int]]).partialOrder)
checkAll("Order[Unit]", OrderTests[Unit].order)
checkAll("Order[Boolean]", OrderTests[Boolean].order)
@@ -161,7 +167,7 @@ class Tests extends FunSuite with Discipline {
checkAll("Order[Duration]", OrderTests[Duration].order)
checkAll("Order[FiniteDuration]", OrderTests[FiniteDuration].order)
checkAll("Order[UUID]", OrderTests[UUID].order)
- checkAll("Order[List[Int]]", OrderTests[List[Int]] .order)
+ checkAll("Order[List[Int]]", OrderTests[List[Int]].order)
checkAll("Order[Option[String]]", OrderTests[Option[String]].order)
checkAll("Order[List[String]", OrderTests[List[String]].order)
checkAll("Order[Vector[Int]]", OrderTests[Vector[Int]].order)
@@ -218,15 +224,14 @@ class Tests extends FunSuite with Discipline {
checkAll("CommutativeGroup[FiniteDuration]", CommutativeGroupTests[FiniteDuration].commutativeGroup)
checkAll("CommutativeGroup[FiniteDuration]", SerializableTests.serializable(CommutativeGroup[FiniteDuration]))
-
- checkAll("Hash[Unit]" , HashTests[Unit].hash)
- checkAll("Hash[Boolean]" , HashTests[Boolean].hash)
- checkAll("Hash[String]" , HashTests[String].hash)
- checkAll("Hash[Symbol]" , HashTests[Symbol].hash)
- checkAll("Hash[Byte]" , HashTests[Byte].hash)
- checkAll("Hash[Short]" , HashTests[Short].hash)
- checkAll("Hash[Char]" , HashTests[Char].hash)
- checkAll("Hash[Int]" , HashTests[Int].hash)
+ checkAll("Hash[Unit]", HashTests[Unit].hash)
+ checkAll("Hash[Boolean]", HashTests[Boolean].hash)
+ checkAll("Hash[String]", HashTests[String].hash)
+ checkAll("Hash[Symbol]", HashTests[Symbol].hash)
+ checkAll("Hash[Byte]", HashTests[Byte].hash)
+ checkAll("Hash[Short]", HashTests[Short].hash)
+ checkAll("Hash[Char]", HashTests[Char].hash)
+ checkAll("Hash[Int]", HashTests[Int].hash)
checkAll("Hash[Duration]", HashTests[Duration].hash)
checkAll("Hash[FiniteDuration]", HashTests[FiniteDuration].hash)
@@ -234,23 +239,21 @@ class Tests extends FunSuite with Discipline {
// `##` is different from `hashCode`. See [[scala.runtime.Statics.anyHash]].
// checkAll("Hash[Float]" , HashTests[Float].hash)
// checkAll("Hash[Double]" , HashTests[Double].hash)
- checkAll("Hash[BitSet]" , HashTests[BitSet].hash)
- checkAll("Hash[BigDecimal]" , HashTests[BigDecimal].hash)
- checkAll("Hash[BigInt]" , HashTests[BigInt].hash)
- checkAll("Hash[UUID]" , HashTests[UUID].hash)
- checkAll("Hash[List[Int]]" , HashTests[List[Int]].hash)
- checkAll("Hash[Option[String]]" , HashTests[Option[String]].hash)
- checkAll("Hash[List[String]]" , HashTests[List[String]].hash)
- checkAll("Hash[Vector[Int]]" , HashTests[Vector[Int]].hash)
- checkAll("Hash[Stream[Int]]" , HashTests[Stream[Int]].hash)
- checkAll("Hash[Set[Int]]" , HashTests[Set[Int]].hash)
- checkAll("Hash[(Int, String)]" , HashTests[(Int, String)].hash)
- checkAll("Hash[Either[Int, String]]" , HashTests[Either[Int, String]].hash)
- checkAll("Hash[Map[Int, String]]" , HashTests[Map[Int, String]].hash)
+ checkAll("Hash[BitSet]", HashTests[BitSet].hash)
+ checkAll("Hash[BigDecimal]", HashTests[BigDecimal].hash)
+ checkAll("Hash[BigInt]", HashTests[BigInt].hash)
+ checkAll("Hash[UUID]", HashTests[UUID].hash)
+ checkAll("Hash[List[Int]]", HashTests[List[Int]].hash)
+ checkAll("Hash[Option[String]]", HashTests[Option[String]].hash)
+ checkAll("Hash[List[String]]", HashTests[List[String]].hash)
+ checkAll("Hash[Vector[Int]]", HashTests[Vector[Int]].hash)
+ checkAll("Hash[Stream[Int]]", HashTests[Stream[Int]].hash)
+ checkAll("Hash[Set[Int]]", HashTests[Set[Int]].hash)
+ checkAll("Hash[(Int, String)]", HashTests[(Int, String)].hash)
+ checkAll("Hash[Either[Int, String]]", HashTests[Either[Int, String]].hash)
+ checkAll("Hash[Map[Int, String]]", HashTests[Map[Int, String]].hash)
checkAll("Hash[Queue[Int]", HashTests[Queue[Int]].hash)
-
-
{
// default Arbitrary[BigDecimal] is a bit too intense :/
implicit val arbBigDecimal: Arbitrary[BigDecimal] =
@@ -272,8 +275,8 @@ class Tests extends FunSuite with Discipline {
def subsetPartialOrder[A]: PartialOrder[Set[A]] = new PartialOrder[Set[A]] {
def partialCompare(x: Set[A], y: Set[A]): Double =
if (x == y) 0.0
- else if (x subsetOf y) -1.0
- else if (y subsetOf x) 1.0
+ else if (x.subsetOf(y)) -1.0
+ else if (y.subsetOf(x)) 1.0
else Double.NaN
}
@@ -282,14 +285,13 @@ class Tests extends FunSuite with Discipline {
{
implicit def subsetPartialOrdering[A]: PartialOrdering[Set[A]] = new PartialOrdering[Set[A]] {
- override def tryCompare(x: Set[A], y: Set[A]): Option[Int] = {
+ override def tryCompare(x: Set[A], y: Set[A]): Option[Int] =
if (x == y) Some(0)
- else if (x subsetOf y) Some(-1)
- else if (y subsetOf x) Some(1)
+ else if (x.subsetOf(y)) Some(-1)
+ else if (y.subsetOf(x)) Some(1)
else None
- }
- override def lteq(x: Set[A], y: Set[A]): Boolean = (x subsetOf y) || (x == y)
+ override def lteq(x: Set[A], y: Set[A]): Boolean = (x.subsetOf(y)) || (x == y)
}
checkAll("fromPartialOrdering[Int]", PartialOrderTests(PartialOrder.fromPartialOrdering[Set[Int]]).partialOrder)
}
@@ -305,17 +307,17 @@ class Tests extends FunSuite with Discipline {
test("comparison") {
val order = Order[Int]
val eqv = Eq[Comparison]
- eqv.eqv(order.comparison(1, 0), Comparison.GreaterThan) &&
- eqv.eqv(order.comparison(0, 0), Comparison.EqualTo) &&
+ eqv.eqv(order.comparison(1, 0), Comparison.GreaterThan) &&
+ eqv.eqv(order.comparison(0, 0), Comparison.EqualTo) &&
eqv.eqv(order.comparison(-1, 0), Comparison.LessThan)
}
test("partialComparison") {
val po = subsetPartialOrder[Int]
val eqv = Eq[Option[Comparison]]
- eqv.eqv(po.partialComparison(Set(1), Set()), Some(Comparison.GreaterThan)) &&
- eqv.eqv(po.partialComparison(Set(), Set()), Some(Comparison.EqualTo)) &&
- eqv.eqv(po.partialComparison(Set(), Set(1)), Some(Comparison.LessThan)) &&
+ eqv.eqv(po.partialComparison(Set(1), Set()), Some(Comparison.GreaterThan)) &&
+ eqv.eqv(po.partialComparison(Set(), Set()), Some(Comparison.EqualTo)) &&
+ eqv.eqv(po.partialComparison(Set(), Set(1)), Some(Comparison.LessThan)) &&
eqv.eqv(po.partialComparison(Set(1, 2), Set(2, 3)), None)
}
@@ -352,7 +354,9 @@ class Tests extends FunSuite with Discipline {
// integers.
implicit val arbNOrder: Arbitrary[Order[N]] = Arbitrary(arbitrary[Int].map { seed =>
val order = new Random(seed).shuffle(Vector.range(0, nMax))
- Order.by { (n: N) => order(n.n) }
+ Order.by { (n: N) =>
+ order(n.n)
+ }
})
implicit val cogNOrder: Cogen[Order[N]] =
Cogen[Unit].contramap(_ => ())
@@ -360,7 +364,9 @@ class Tests extends FunSuite with Discipline {
// integers.
implicit val arbNEq: Arbitrary[Eq[N]] = Arbitrary(arbitrary[Int].map { seed =>
val mapping = new Random(seed).shuffle(Vector.range(0, nMax))
- Eq.by { (n: N) => mapping(n.n) }
+ Eq.by { (n: N) =>
+ mapping(n.n)
+ }
})
implicit val cogNEq: Cogen[Eq[N]] =
Cogen[Unit].contramap(_ => ())
@@ -374,8 +380,11 @@ class Tests extends FunSuite with Discipline {
}
implicit val NEqEq: Eq[Eq[N]] = new Eq[Eq[N]] {
def eqv(a: Eq[N], b: Eq[N]) =
- Iterator.tabulate(nMax)(N)
- .flatMap { x => Iterator.tabulate(nMax)(N).map((x, _)) }
+ Iterator
+ .tabulate(nMax)(N)
+ .flatMap { x =>
+ Iterator.tabulate(nMax)(N).map((x, _))
+ }
.forall { case (x, y) => a.eqv(x, y) == b.eqv(x, y) }
}
@@ -434,5 +443,5 @@ class Tests extends FunSuite with Discipline {
laws[L, A]("")
private[laws] def laws[L[_] <: Laws, A](extraTag: String)(implicit laws: L[A], tag: TypeTagM[A]): LawChecker[L[A]] =
- LawChecker("[" + tag.name.toString + (if(extraTag != "") "@@" + extraTag else "") + "]", laws)
+ LawChecker("[" + tag.name.toString + (if (extraTag != "") "@@" + extraTag else "") + "]", laws)
}
diff --git a/kernel/src/main/scala-2.12-/cats/kernel/compat/TraversableOnce.scala b/kernel/src/main/scala-2.12-/cats/kernel/compat/TraversableOnce.scala
index 4685fd53e5..0106979caf 100644
--- a/kernel/src/main/scala-2.12-/cats/kernel/compat/TraversableOnce.scala
+++ b/kernel/src/main/scala-2.12-/cats/kernel/compat/TraversableOnce.scala
@@ -1,8 +1,7 @@
package cats.kernel
package compat
-
-private[kernel] object TraversableOnce {
+private[kernel] object TraversableOnce {
def reduceOption[A, A1 >: A](as: TraversableOnce[A], op: (A1, A1) => A1): Option[A1] =
as.reduceOption(op)
}
diff --git a/kernel/src/main/scala-2.12-/cats/kernel/compat/WrappedMutableMapBase.scala b/kernel/src/main/scala-2.12-/cats/kernel/compat/WrappedMutableMapBase.scala
index 80d570fe4a..216a84bd0b 100644
--- a/kernel/src/main/scala-2.12-/cats/kernel/compat/WrappedMutableMapBase.scala
+++ b/kernel/src/main/scala-2.12-/cats/kernel/compat/WrappedMutableMapBase.scala
@@ -3,8 +3,7 @@ package compat
import scala.collection.mutable
-
-private[kernel] abstract class WrappedMutableMapBase[K, V](m: mutable.Map[K, V]) extends Map[K, V] {
+abstract private[kernel] class WrappedMutableMapBase[K, V](m: mutable.Map[K, V]) extends Map[K, V] {
def +[V2 >: V](kv: (K, V2)): Map[K, V2] = m.toMap + kv
def -(key: K): Map[K, V] = m.toMap - key
}
diff --git a/kernel/src/main/scala/cats/kernel/Band.scala b/kernel/src/main/scala/cats/kernel/Band.scala
index e2d6c6ab05..9c46c63338 100644
--- a/kernel/src/main/scala/cats/kernel/Band.scala
+++ b/kernel/src/main/scala/cats/kernel/Band.scala
@@ -2,7 +2,6 @@ package cats.kernel
import scala.{specialized => sp}
-
/**
* Bands are semigroups whose operation
* (i.e. combine) is also idempotent.
diff --git a/kernel/src/main/scala/cats/kernel/BoundedSemilattice.scala b/kernel/src/main/scala/cats/kernel/BoundedSemilattice.scala
index 9838164ea7..77ae533e9e 100644
--- a/kernel/src/main/scala/cats/kernel/BoundedSemilattice.scala
+++ b/kernel/src/main/scala/cats/kernel/BoundedSemilattice.scala
@@ -9,5 +9,6 @@ object BoundedSemilattice extends SemilatticeFunctions[BoundedSemilattice] {
/**
* Access an implicit `BoundedSemilattice[A]`.
*/
- @inline final def apply[@sp(Int, Long, Float, Double) A](implicit ev: BoundedSemilattice[A]): BoundedSemilattice[A] = ev
+ @inline final def apply[@sp(Int, Long, Float, Double) A](implicit ev: BoundedSemilattice[A]): BoundedSemilattice[A] =
+ ev
}
diff --git a/kernel/src/main/scala/cats/kernel/CommutativeGroup.scala b/kernel/src/main/scala/cats/kernel/CommutativeGroup.scala
index 80a5c6fa8c..441ee2fcf1 100644
--- a/kernel/src/main/scala/cats/kernel/CommutativeGroup.scala
+++ b/kernel/src/main/scala/cats/kernel/CommutativeGroup.scala
@@ -1,6 +1,6 @@
package cats.kernel
-import scala.{ specialized => sp }
+import scala.{specialized => sp}
/**
* An commutative group (also known as an abelian group) is a group
diff --git a/kernel/src/main/scala/cats/kernel/CommutativeMonoid.scala b/kernel/src/main/scala/cats/kernel/CommutativeMonoid.scala
index c8bb7a3657..a539f9efe1 100644
--- a/kernel/src/main/scala/cats/kernel/CommutativeMonoid.scala
+++ b/kernel/src/main/scala/cats/kernel/CommutativeMonoid.scala
@@ -1,6 +1,6 @@
package cats.kernel
-import scala.{ specialized => sp }
+import scala.{specialized => sp}
/**
* CommutativeMonoid represents a commutative monoid.
@@ -10,6 +10,7 @@ import scala.{ specialized => sp }
trait CommutativeMonoid[@sp(Int, Long, Float, Double) A] extends Any with Monoid[A] with CommutativeSemigroup[A]
object CommutativeMonoid extends MonoidFunctions[CommutativeMonoid] {
+
/**
* Access an implicit `CommutativeMonoid[A]`.
*/
diff --git a/kernel/src/main/scala/cats/kernel/CommutativeSemigroup.scala b/kernel/src/main/scala/cats/kernel/CommutativeSemigroup.scala
index 2874a6b5d8..a4f2c13a8d 100644
--- a/kernel/src/main/scala/cats/kernel/CommutativeSemigroup.scala
+++ b/kernel/src/main/scala/cats/kernel/CommutativeSemigroup.scala
@@ -1,6 +1,6 @@
package cats.kernel
-import scala.{ specialized => sp }
+import scala.{specialized => sp}
/**
* CommutativeSemigroup represents a commutative semigroup.
diff --git a/kernel/src/main/scala/cats/kernel/Comparison.scala b/kernel/src/main/scala/cats/kernel/Comparison.scala
index 78a2498779..6d3a25faa3 100644
--- a/kernel/src/main/scala/cats/kernel/Comparison.scala
+++ b/kernel/src/main/scala/cats/kernel/Comparison.scala
@@ -5,26 +5,24 @@ sealed abstract class Comparison(val toInt: Int, val toDouble: Double) extends P
object Comparison {
final case object GreaterThan extends Comparison(1, 1.0)
- final case object EqualTo extends Comparison(0, 0.0)
- final case object LessThan extends Comparison(-1, -1.0)
+ final case object EqualTo extends Comparison(0, 0.0)
+ final case object LessThan extends Comparison(-1, -1.0)
// Used for fromDouble
private val SomeGt = Some(Comparison.GreaterThan)
private val SomeEq = Some(Comparison.EqualTo)
private val SomeLt = Some(Comparison.LessThan)
- def fromInt(int: Int): Comparison = {
- if (int > 0) Comparison.GreaterThan
+ def fromInt(int: Int): Comparison =
+ if (int > 0) Comparison.GreaterThan
else if (int == 0) Comparison.EqualTo
- else Comparison.LessThan // scalastyle:ignore ensure.single.space.after.token
- }
+ else Comparison.LessThan // scalastyle:ignore ensure.single.space.after.token
- def fromDouble(double: Double): Option[Comparison] = {
+ def fromDouble(double: Double): Option[Comparison] =
if (double.isNaN) None
else if (double > 0.0) SomeGt
else if (double == 0.0) SomeEq
else SomeLt
- }
implicit val catsKernelEqForComparison: Eq[Comparison] = Eq.fromUniversalEquals
}
diff --git a/kernel/src/main/scala/cats/kernel/Eq.scala b/kernel/src/main/scala/cats/kernel/Eq.scala
index 9caf1c0700..631e264b2d 100644
--- a/kernel/src/main/scala/cats/kernel/Eq.scala
+++ b/kernel/src/main/scala/cats/kernel/Eq.scala
@@ -33,6 +33,7 @@ abstract class EqFunctions[E[T] <: Eq[T]] {
}
trait EqToEquivConversion {
+
/**
* Implicitly derive a `scala.math.Equiv[A]` from a `Eq[A]`
* instance.
@@ -59,24 +60,23 @@ object Eq extends EqFunctions[Eq] with EqToEquivConversion {
}
/**
- * Return an Eq that gives the result of the and of eq1 and eq2
- * note this is idempotent
- */
+ * Return an Eq that gives the result of the and of eq1 and eq2
+ * note this is idempotent
+ */
def and[@sp A](eq1: Eq[A], eq2: Eq[A]): Eq[A] =
new Eq[A] {
def eqv(x: A, y: A) = eq1.eqv(x, y) && eq2.eqv(x, y)
}
/**
- * Return an Eq that gives the result of the or of this and that
- * Note this is idempotent
- */
+ * Return an Eq that gives the result of the or of this and that
+ * Note this is idempotent
+ */
def or[@sp A](eq1: Eq[A], eq2: Eq[A]): Eq[A] =
new Eq[A] {
def eqv(x: A, y: A) = eq1.eqv(x, y) || eq2.eqv(x, y)
}
-
/**
* Create an `Eq` instance from an `eqv` implementation.
*/
diff --git a/kernel/src/main/scala/cats/kernel/Group.scala b/kernel/src/main/scala/cats/kernel/Group.scala
index 31d019146f..fc7722f847 100644
--- a/kernel/src/main/scala/cats/kernel/Group.scala
+++ b/kernel/src/main/scala/cats/kernel/Group.scala
@@ -1,6 +1,6 @@
package cats.kernel
-import scala.{ specialized => sp }
+import scala.{specialized => sp}
/**
* A group is a monoid where each element has an inverse.
@@ -41,7 +41,7 @@ trait Group[@sp(Int, Long, Float, Double) A] extends Any with Monoid[A] {
* Return `a` appended to itself `n` times. If `n` is negative, then
* this returns `inverse(a)` appended to itself `n` times.
*/
- override def combineN(a: A, n: Int): A = {
+ override def combineN(a: A, n: Int): A =
// This method is a bit tricky. Normally, to sum x a negative
// number of times (n), we can sum (-x) a positive number of times
// (-n). The issue here is that Int.MinValue cannot be negated; in
@@ -58,7 +58,6 @@ trait Group[@sp(Int, Long, Float, Double) A] extends Any with Monoid[A] {
else if (n == 0) empty
else if (n == Int.MinValue) combineN(inverse(combine(a, a)), 1073741824)
else repeatedCombineN(inverse(a), -n)
- }
}
abstract class GroupFunctions[G[T] <: Group[T]] extends MonoidFunctions[Group] {
diff --git a/kernel/src/main/scala/cats/kernel/Hash.scala b/kernel/src/main/scala/cats/kernel/Hash.scala
index 4579f12184..b833750b89 100644
--- a/kernel/src/main/scala/cats/kernel/Hash.scala
+++ b/kernel/src/main/scala/cats/kernel/Hash.scala
@@ -26,7 +26,6 @@ abstract class HashFunctions[H[T] <: Hash[T]] extends EqFunctions[H] {
}
-
object Hash extends HashFunctions[Hash] {
/** Fetch a `Hash` instance given the specific type. */
diff --git a/kernel/src/main/scala/cats/kernel/Monoid.scala b/kernel/src/main/scala/cats/kernel/Monoid.scala
index 3dab5678af..bf66a33641 100644
--- a/kernel/src/main/scala/cats/kernel/Monoid.scala
+++ b/kernel/src/main/scala/cats/kernel/Monoid.scala
@@ -1,6 +1,6 @@
package cats.kernel
-import scala.{ specialized => sp }
+import scala.{specialized => sp}
/**
* A monoid is a semigroup with an identity. A monoid is a specialization of a
diff --git a/kernel/src/main/scala/cats/kernel/Order.scala b/kernel/src/main/scala/cats/kernel/Order.scala
index 4b67ad8645..8563a56254 100644
--- a/kernel/src/main/scala/cats/kernel/Order.scala
+++ b/kernel/src/main/scala/cats/kernel/Order.scala
@@ -20,6 +20,7 @@ import scala.{specialized => sp}
* By the totality law, x <= y and y <= x cannot be both false.
*/
trait Order[@sp A] extends Any with PartialOrder[A] { self =>
+
/**
* Result of comparing `x` with `y`. Returns an Int whose sign is:
* - negative iff `x < y`
@@ -113,6 +114,7 @@ abstract class OrderFunctions[O[T] <: Order[T]] extends PartialOrderFunctions[O]
}
trait OrderToOrderingConversion {
+
/**
* Implicitly derive a `scala.math.Ordering[A]` from a `Order[A]`
* instance.
@@ -123,6 +125,7 @@ trait OrderToOrderingConversion {
}
object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
+
/**
* Access an implicit `Order[A]`.
*/
@@ -138,20 +141,20 @@ object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
}
/**
- * Defines an ordering on `A` from the given order such that all arrows switch direction.
- */
+ * Defines an ordering on `A` from the given order such that all arrows switch direction.
+ */
def reverse[@sp A](order: Order[A]): Order[A] =
new Order[A] {
def compare(x: A, y: A): Int = order.compare(y, x)
}
/**
- * Returns a new `Order[A]` instance that first compares by the first
- * `Order` instance and uses the second `Order` instance to "break ties".
- *
- * That is, `Order.whenEqual(x, y)` creates an `Order` that first orders by `x` and
- * then (if two elements are equal) falls back to `y` for the comparison.
- */
+ * Returns a new `Order[A]` instance that first compares by the first
+ * `Order` instance and uses the second `Order` instance to "break ties".
+ *
+ * That is, `Order.whenEqual(x, y)` creates an `Order` that first orders by `x` and
+ * then (if two elements are equal) falls back to `y` for the comparison.
+ */
def whenEqual[@sp A](first: Order[A], second: Order[A]): Order[A] =
new Order[A] {
def compare(x: A, y: A) = {
@@ -222,10 +225,9 @@ object Order extends OrderFunctions[Order] with OrderToOrderingConversion {
override def toOrdering: Ordering[A] = ev
}
- def fromComparable[A <: Comparable[A]]: Order[A] = {
+ def fromComparable[A <: Comparable[A]]: Order[A] =
new Order[A] {
override def compare(x: A, y: A): Int =
- x compareTo y
+ x.compareTo(y)
}
- }
}
diff --git a/kernel/src/main/scala/cats/kernel/PartialOrder.scala b/kernel/src/main/scala/cats/kernel/PartialOrder.scala
index caa3baf535..565990929f 100644
--- a/kernel/src/main/scala/cats/kernel/PartialOrder.scala
+++ b/kernel/src/main/scala/cats/kernel/PartialOrder.scala
@@ -23,6 +23,7 @@ import scala.{specialized => sp}
* false true = 1.0 (corresponds to x > y)
*/
trait PartialOrder[@sp A] extends Any with Eq[A] { self =>
+
/**
* Result of comparing `x` with `y`. Returns NaN if operands are not
* comparable. If operands are comparable, returns a Double whose
@@ -68,7 +69,7 @@ trait PartialOrder[@sp A] extends Any with Eq[A] { self =>
*/
def pmax(x: A, y: A): Option[A] = {
val c = partialCompare(x, y)
- if (c >= 0) Some(x)
+ if (c >= 0) Some(x)
else if (c < 0) Some(y)
else None
}
@@ -124,6 +125,7 @@ abstract class PartialOrderFunctions[P[T] <: PartialOrder[T]] extends EqFunction
}
object PartialOrder extends PartialOrderFunctions[PartialOrder] with PartialOrderToPartialOrderingConversion {
+
/**
* Access an implicit `PartialOrder[A]`.
*/
@@ -139,8 +141,8 @@ object PartialOrder extends PartialOrderFunctions[PartialOrder] with PartialOrde
}
/**
- * Defines a partial order on `A` from p where all arrows switch direction.
- */
+ * Defines a partial order on `A` from p where all arrows switch direction.
+ */
def reverse[@sp A](p: PartialOrder[A]): PartialOrder[A] =
new PartialOrder[A] {
def partialCompare(x: A, y: A): Double = p.partialCompare(y, x)
@@ -160,7 +162,6 @@ object PartialOrder extends PartialOrderFunctions[PartialOrder] with PartialOrde
}
}
-
trait PartialOrderToPartialOrderingConversion {
implicit def catsKernelPartialOrderingForPartialOrder[A](implicit ev: PartialOrder[A]): PartialOrdering[A] =
new PartialOrdering[A] {
diff --git a/kernel/src/main/scala/cats/kernel/Semigroup.scala b/kernel/src/main/scala/cats/kernel/Semigroup.scala
index 5665324abc..e63544c5c4 100644
--- a/kernel/src/main/scala/cats/kernel/Semigroup.scala
+++ b/kernel/src/main/scala/cats/kernel/Semigroup.scala
@@ -2,6 +2,7 @@ package cats.kernel
import scala.{specialized => sp}
import scala.annotation.tailrec
+
/**
* A semigroup is any set `A` with an associative operation (`combine`).
*/
@@ -49,7 +50,8 @@ trait Semigroup[@sp(Int, Long, Float, Double) A] extends Any with Serializable {
*/
protected[this] def repeatedCombineN(a: A, n: Int): A = {
@tailrec def loop(b: A, k: Int, extra: A): A =
- if (k == 1) combine(b, extra) else {
+ if (k == 1) combine(b, extra)
+ else {
val x = if ((k & 1) == 1) combine(b, extra) else extra
loop(combine(b, b), k >>> 1, x)
}
@@ -83,13 +85,13 @@ abstract class SemigroupFunctions[S[T] <: Semigroup[T]] {
def maybeCombine[@sp(Int, Long, Float, Double) A](ox: Option[A], y: A)(implicit ev: S[A]): A =
ox match {
case Some(x) => ev.combine(x, y)
- case None => y
+ case None => y
}
def maybeCombine[@sp(Int, Long, Float, Double) A](x: A, oy: Option[A])(implicit ev: S[A]): A =
oy match {
case Some(y) => ev.combine(x, y)
- case None => x
+ case None => x
}
def isCommutative[A](implicit ev: S[A]): Boolean =
diff --git a/kernel/src/main/scala/cats/kernel/Semilattice.scala b/kernel/src/main/scala/cats/kernel/Semilattice.scala
index 77a69ff2d5..ca1646aa7d 100644
--- a/kernel/src/main/scala/cats/kernel/Semilattice.scala
+++ b/kernel/src/main/scala/cats/kernel/Semilattice.scala
@@ -6,9 +6,7 @@ import scala.{specialized => sp}
* Semilattices are commutative semigroups whose operation
* (i.e. combine) is also idempotent.
*/
-trait Semilattice[@sp(Int, Long, Float, Double) A] extends Any
- with Band[A]
- with CommutativeSemigroup[A] { self =>
+trait Semilattice[@sp(Int, Long, Float, Double) A] extends Any with Band[A] with CommutativeSemigroup[A] { self =>
/**
* Given Eq[A], return a PartialOrder[A] using the `combine`
@@ -25,7 +23,8 @@ trait Semilattice[@sp(Int, Long, Float, Double) A] extends Any
def asMeetPartialOrder(implicit ev: Eq[A]): PartialOrder[A] =
new PartialOrder[A] {
def partialCompare(x: A, y: A): Double =
- if (ev.eqv(x, y)) 0.0 else {
+ if (ev.eqv(x, y)) 0.0
+ else {
val z = self.combine(x, y)
if (ev.eqv(x, z)) -1.0 else if (ev.eqv(y, z)) 1.0 else Double.NaN
}
@@ -46,7 +45,8 @@ trait Semilattice[@sp(Int, Long, Float, Double) A] extends Any
def asJoinPartialOrder(implicit ev: Eq[A]): PartialOrder[A] =
new PartialOrder[A] {
def partialCompare(x: A, y: A): Double =
- if (ev.eqv(x, y)) 0.0 else {
+ if (ev.eqv(x, y)) 0.0
+ else {
val z = self.combine(x, y)
if (ev.eqv(y, z)) -1.0 else if (ev.eqv(x, z)) 1.0 else Double.NaN
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/StaticMethods.scala b/kernel/src/main/scala/cats/kernel/instances/StaticMethods.scala
index 47df763c2e..8e136a1520 100644
--- a/kernel/src/main/scala/cats/kernel/instances/StaticMethods.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/StaticMethods.scala
@@ -10,10 +10,10 @@ object StaticMethods {
new WrappedMutableMap(m)
private[kernel] class WrappedMutableMap[K, V](m: mutable.Map[K, V])
- extends kernel.compat.WrappedMutableMapBase[K, V](m) {
- override def size: Int = m.size
- def get(k: K): Option[V] = m.get(k)
- def iterator: Iterator[(K, V)] = m.iterator
+ extends kernel.compat.WrappedMutableMapBase[K, V](m) {
+ override def size: Int = m.size
+ def get(k: K): Option[V] = m.get(k)
+ def iterator: Iterator[(K, V)] = m.iterator
}
// scalastyle:off return
@@ -119,7 +119,7 @@ object StaticMethods {
import scala.util.hashing.MurmurHash3._
var n = 0
var h = seqSeed
- xs foreach { x =>
+ xs.foreach { x =>
h = mix(h, A.hash(x))
n += 1
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/all.scala b/kernel/src/main/scala/cats/kernel/instances/all.scala
index 75d1503545..bc8f0e6ecc 100644
--- a/kernel/src/main/scala/cats/kernel/instances/all.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/all.scala
@@ -35,5 +35,4 @@ trait AllInstances
with UUIDInstances
with VectorInstances
-
trait AllInstancesBinCompat0 extends FiniteDurationInstances
diff --git a/kernel/src/main/scala/cats/kernel/instances/bigDecimal.scala b/kernel/src/main/scala/cats/kernel/instances/bigDecimal.scala
index 910eb8e147..126617bd68 100644
--- a/kernel/src/main/scala/cats/kernel/instances/bigDecimal.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/bigDecimal.scala
@@ -21,7 +21,7 @@ class BigDecimalOrder extends Order[BigDecimal] with Hash[BigDecimal] {
def hash(x: BigDecimal): Int = x.hashCode()
- def compare(x: BigDecimal, y: BigDecimal): Int = x compare y
+ def compare(x: BigDecimal, y: BigDecimal): Int = x.compare(y)
override def eqv(x: BigDecimal, y: BigDecimal): Boolean = x == y
override def neqv(x: BigDecimal, y: BigDecimal): Boolean = x != y
@@ -30,6 +30,6 @@ class BigDecimalOrder extends Order[BigDecimal] with Hash[BigDecimal] {
override def lt(x: BigDecimal, y: BigDecimal): Boolean = x < y
override def lteqv(x: BigDecimal, y: BigDecimal): Boolean = x <= y
- override def min(x: BigDecimal, y: BigDecimal): BigDecimal = x min y
- override def max(x: BigDecimal, y: BigDecimal): BigDecimal = x max y
+ override def min(x: BigDecimal, y: BigDecimal): BigDecimal = x.min(y)
+ override def max(x: BigDecimal, y: BigDecimal): BigDecimal = x.max(y)
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/bigInt.scala b/kernel/src/main/scala/cats/kernel/instances/bigInt.scala
index 46a5a26af8..e52dbac3fa 100644
--- a/kernel/src/main/scala/cats/kernel/instances/bigInt.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/bigInt.scala
@@ -20,7 +20,7 @@ class BigIntGroup extends CommutativeGroup[BigInt] {
class BigIntOrder extends Order[BigInt] with Hash[BigInt] {
def hash(x: BigInt): Int = x.hashCode()
- def compare(x: BigInt, y: BigInt): Int = x compare y
+ def compare(x: BigInt, y: BigInt): Int = x.compare(y)
override def eqv(x: BigInt, y: BigInt): Boolean = x == y
override def neqv(x: BigInt, y: BigInt): Boolean = x != y
@@ -29,6 +29,6 @@ class BigIntOrder extends Order[BigInt] with Hash[BigInt] {
override def lt(x: BigInt, y: BigInt): Boolean = x < y
override def lteqv(x: BigInt, y: BigInt): Boolean = x <= y
- override def min(x: BigInt, y: BigInt): BigInt = x min y
- override def max(x: BigInt, y: BigInt): BigInt = x max y
+ override def min(x: BigInt, y: BigInt): BigInt = x.min(y)
+ override def max(x: BigInt, y: BigInt): BigInt = x.max(y)
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/boolean.scala b/kernel/src/main/scala/cats/kernel/instances/boolean.scala
index 8b00558796..e217a77618 100644
--- a/kernel/src/main/scala/cats/kernel/instances/boolean.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/boolean.scala
@@ -14,8 +14,8 @@ class BooleanOrder extends Order[Boolean] with Hash[Boolean] {
def compare(x: Boolean, y: Boolean): Int =
if (x == y) 0 else if (x) 1 else -1
- override def eqv(x:Boolean, y:Boolean): Boolean = x == y
- override def neqv(x:Boolean, y:Boolean): Boolean = x != y
+ override def eqv(x: Boolean, y: Boolean): Boolean = x == y
+ override def neqv(x: Boolean, y: Boolean): Boolean = x != y
override def gt(x: Boolean, y: Boolean): Boolean = x && !y
override def lt(x: Boolean, y: Boolean): Boolean = !x && y
override def gteqv(x: Boolean, y: Boolean): Boolean = x == y || x
diff --git a/kernel/src/main/scala/cats/kernel/instances/char.scala b/kernel/src/main/scala/cats/kernel/instances/char.scala
index be0a77949c..5756535c12 100644
--- a/kernel/src/main/scala/cats/kernel/instances/char.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/char.scala
@@ -11,8 +11,8 @@ class CharOrder extends Order[Char] with Hash[Char] {
def hash(x: Char): Int = x.hashCode()
def compare(x: Char, y: Char): Int =
if (x < y) -1 else if (x > y) 1 else 0
- override def eqv(x:Char, y:Char): Boolean = x == y
- override def neqv(x:Char, y:Char): Boolean = x != y
+ override def eqv(x: Char, y: Char): Boolean = x == y
+ override def neqv(x: Char, y: Char): Boolean = x != y
override def gt(x: Char, y: Char): Boolean = x > y
override def gteqv(x: Char, y: Char): Boolean = x >= y
override def lt(x: Char, y: Char): Boolean = x < y
diff --git a/kernel/src/main/scala/cats/kernel/instances/double.scala b/kernel/src/main/scala/cats/kernel/instances/double.scala
index e9f8c203ec..3c77440be2 100644
--- a/kernel/src/main/scala/cats/kernel/instances/double.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/double.scala
@@ -21,8 +21,8 @@ class DoubleOrder extends Order[Double] with Hash[Double] {
def compare(x: Double, y: Double): Int =
java.lang.Double.compare(x, y)
- override def eqv(x:Double, y:Double): Boolean = x == y
- override def neqv(x:Double, y:Double): Boolean = x != y
+ override def eqv(x: Double, y: Double): Boolean = x == y
+ override def neqv(x: Double, y: Double): Boolean = x != y
override def gt(x: Double, y: Double): Boolean = x > y
override def gteqv(x: Double, y: Double): Boolean = x >= y
override def lt(x: Double, y: Double): Boolean = x < y
diff --git a/kernel/src/main/scala/cats/kernel/instances/duration.scala b/kernel/src/main/scala/cats/kernel/instances/duration.scala
index 406ed025e7..33f63cd403 100644
--- a/kernel/src/main/scala/cats/kernel/instances/duration.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/duration.scala
@@ -21,7 +21,7 @@ trait DurationInstances {
class DurationOrder extends Order[Duration] with Hash[Duration] {
def hash(x: Duration): Int = x.hashCode()
- def compare(x: Duration, y: Duration): Int = x compare y
+ def compare(x: Duration, y: Duration): Int = x.compare(y)
override def eqv(x: Duration, y: Duration): Boolean = x == y
override def neqv(x: Duration, y: Duration): Boolean = x != y
@@ -30,8 +30,8 @@ class DurationOrder extends Order[Duration] with Hash[Duration] {
override def lt(x: Duration, y: Duration): Boolean = x < y
override def lteqv(x: Duration, y: Duration): Boolean = x <= y
- override def min(x: Duration, y: Duration): Duration = x min y
- override def max(x: Duration, y: Duration): Duration = x max y
+ override def min(x: Duration, y: Duration): Duration = x.min(y)
+ override def max(x: Duration, y: Duration): Duration = x.max(y)
}
/**
diff --git a/kernel/src/main/scala/cats/kernel/instances/either.scala b/kernel/src/main/scala/cats/kernel/instances/either.scala
index bf71f23389..d063ad6047 100644
--- a/kernel/src/main/scala/cats/kernel/instances/either.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/either.scala
@@ -9,14 +9,16 @@ trait EitherInstances extends EitherInstances0 {
new Order[Either[A, B]] {
def compare(x: Either[A, B], y: Either[A, B]): Int =
x match {
- case Left(xx) => y match {
- case Left(yy) => A.compare(xx, yy)
- case Right(_) => -1
- }
- case Right(xx) => y match {
- case Left(_) => 1
- case Right(yy) => B.compare(xx, yy)
- }
+ case Left(xx) =>
+ y match {
+ case Left(yy) => A.compare(xx, yy)
+ case Right(_) => -1
+ }
+ case Right(xx) =>
+ y match {
+ case Left(_) => 1
+ case Right(yy) => B.compare(xx, yy)
+ }
}
}
@@ -27,10 +29,11 @@ trait EitherInstances extends EitherInstances0 {
def combine(x: Either[A, B], y: Either[A, B]): Either[A, B] =
x match {
case left @ Left(_) => left
- case Right(xx) => y match {
- case left @ Left(_) => left
- case Right(yy) => Right(B.combine(xx, yy))
- }
+ case Right(xx) =>
+ y match {
+ case left @ Left(_) => left
+ case Right(yy) => Right(B.combine(xx, yy))
+ }
}
}
}
@@ -42,25 +45,29 @@ trait EitherInstances0 extends EitherInstances1 {
def combine(x: Either[A, B], y: Either[A, B]): Either[A, B] =
x match {
case left @ Left(_) => left
- case Right(xx) => y match {
- case left @ Left(_) => left
- case Right(yy) => Right(B.combine(xx, yy))
- }
+ case Right(xx) =>
+ y match {
+ case left @ Left(_) => left
+ case Right(yy) => Right(B.combine(xx, yy))
+ }
}
}
- implicit def catsStdPartialOrderForEither[A, B](implicit A: PartialOrder[A], B: PartialOrder[B]): PartialOrder[Either[A, B]] =
+ implicit def catsStdPartialOrderForEither[A, B](implicit A: PartialOrder[A],
+ B: PartialOrder[B]): PartialOrder[Either[A, B]] =
new PartialOrder[Either[A, B]] {
def partialCompare(x: Either[A, B], y: Either[A, B]): Double =
x match {
- case Left(xx) => y match {
- case Left(yy) => A.partialCompare(xx, yy)
- case Right(_) => -1.0
- }
- case Right(xx) => y match {
- case Left(_) => 1.0
- case Right(yy) => B.partialCompare(xx, yy)
- }
+ case Left(xx) =>
+ y match {
+ case Left(yy) => A.partialCompare(xx, yy)
+ case Right(_) => -1.0
+ }
+ case Right(xx) =>
+ y match {
+ case Left(_) => 1.0
+ case Right(yy) => B.partialCompare(xx, yy)
+ }
}
}
@@ -73,27 +80,27 @@ trait EitherInstances1 {
}
-
// isolated class for inheritance
class EitherEq[A, B](implicit A: Eq[A], B: Eq[B]) extends Eq[Either[A, B]] {
def eqv(x: Either[A, B], y: Either[A, B]): Boolean =
x match {
- case Left(xx) => y match {
- case Left(yy) => A.eqv(xx, yy)
- case Right(_) => false
- }
- case Right(xx) => y match {
- case Left(_) => false
- case Right(yy) => B.eqv(xx, yy)
- }
+ case Left(xx) =>
+ y match {
+ case Left(yy) => A.eqv(xx, yy)
+ case Right(_) => false
+ }
+ case Right(xx) =>
+ y match {
+ case Left(_) => false
+ case Right(yy) => B.eqv(xx, yy)
+ }
}
}
class EitherHash[A, B](implicit A: Hash[A], B: Hash[B]) extends EitherEq[A, B] with Hash[Either[A, B]] {
- def hash(x: Either[A, B]): Int = {
+ def hash(x: Either[A, B]): Int =
x match {
- case Left(xx) => StaticMethods.product1Hash(A.hash(xx))
+ case Left(xx) => StaticMethods.product1Hash(A.hash(xx))
case Right(xx) => StaticMethods.product1Hash(B.hash(xx))
}
- }
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/finiteDuration.scala b/kernel/src/main/scala/cats/kernel/instances/finiteDuration.scala
index 3efa92d283..c4a7e0682f 100644
--- a/kernel/src/main/scala/cats/kernel/instances/finiteDuration.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/finiteDuration.scala
@@ -1,17 +1,17 @@
package cats.kernel
package instances
-import scala.concurrent.duration.{ Duration, FiniteDuration }
-
+import scala.concurrent.duration.{Duration, FiniteDuration}
trait FiniteDurationInstances {
- implicit val catsKernelStdOrderForFiniteDuration: Order[FiniteDuration] with Hash[FiniteDuration] = new FiniteDurationOrder
+ implicit val catsKernelStdOrderForFiniteDuration: Order[FiniteDuration] with Hash[FiniteDuration] =
+ new FiniteDurationOrder
implicit val catsKernelStdGroupForFiniteDuration: CommutativeGroup[FiniteDuration] = new FiniteDurationGroup
}
class FiniteDurationOrder extends Order[FiniteDuration] with Hash[FiniteDuration] {
def hash(x: FiniteDuration): Int = x.hashCode()
- def compare(x: FiniteDuration, y: FiniteDuration): Int = x compare y
+ def compare(x: FiniteDuration, y: FiniteDuration): Int = x.compare(y)
override def eqv(x: FiniteDuration, y: FiniteDuration): Boolean = x == y
override def neqv(x: FiniteDuration, y: FiniteDuration): Boolean = x != y
@@ -20,8 +20,8 @@ class FiniteDurationOrder extends Order[FiniteDuration] with Hash[FiniteDuration
override def lt(x: FiniteDuration, y: FiniteDuration): Boolean = x < y
override def lteqv(x: FiniteDuration, y: FiniteDuration): Boolean = x <= y
- override def min(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x min y
- override def max(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x max y
+ override def min(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x.min(y)
+ override def max(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x.max(y)
}
class FiniteDurationGroup extends CommutativeGroup[FiniteDuration] {
diff --git a/kernel/src/main/scala/cats/kernel/instances/float.scala b/kernel/src/main/scala/cats/kernel/instances/float.scala
index d6b9a07e39..ba06fd613b 100644
--- a/kernel/src/main/scala/cats/kernel/instances/float.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/float.scala
@@ -33,8 +33,8 @@ class FloatOrder extends Order[Float] with Hash[Float] {
def compare(x: Float, y: Float): Int =
java.lang.Float.compare(x, y)
- override def eqv(x:Float, y:Float): Boolean = x == y
- override def neqv(x:Float, y:Float): Boolean = x != y
+ override def eqv(x: Float, y: Float): Boolean = x == y
+ override def neqv(x: Float, y: Float): Boolean = x != y
override def gt(x: Float, y: Float): Boolean = x > y
override def gteqv(x: Float, y: Float): Boolean = x >= y
override def lt(x: Float, y: Float): Boolean = x < y
diff --git a/kernel/src/main/scala/cats/kernel/instances/function.scala b/kernel/src/main/scala/cats/kernel/instances/function.scala
index 4ff4f1476e..a0846825f8 100644
--- a/kernel/src/main/scala/cats/kernel/instances/function.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/function.scala
@@ -36,10 +36,14 @@ trait FunctionInstances0 extends FunctionInstances1 {
implicit def catsKernelGroupForFunction1[A, B](implicit G: Group[B]): Group[A => B] =
new Function1Group[A, B] { def B: Group[B] = G }
- implicit def catsKernelBoundedSemilatticeForFunction0[A](implicit G: BoundedSemilattice[A]): BoundedSemilattice[() => A] =
+ implicit def catsKernelBoundedSemilatticeForFunction0[A](
+ implicit G: BoundedSemilattice[A]
+ ): BoundedSemilattice[() => A] =
new Function0Monoid[A] with BoundedSemilattice[() => A] { def A: Monoid[A] = G }
- implicit def catsKernelBoundedSemilatticeForFunction1[A, B](implicit G: BoundedSemilattice[B]): BoundedSemilattice[A => B] =
+ implicit def catsKernelBoundedSemilatticeForFunction1[A, B](
+ implicit G: BoundedSemilattice[B]
+ ): BoundedSemilattice[A => B] =
new Function1Monoid[A, B] with BoundedSemilattice[A => B] { def B: Monoid[B] = G }
}
@@ -50,10 +54,14 @@ trait FunctionInstances1 extends FunctionInstances2 {
def eqv(x: () => A, y: () => A): Boolean = ev.eqv(x(), y())
}
- implicit def catsKernelCommutativeMonoidForFunction0[A](implicit M: CommutativeMonoid[A]): CommutativeMonoid[() => A] =
+ implicit def catsKernelCommutativeMonoidForFunction0[A](
+ implicit M: CommutativeMonoid[A]
+ ): CommutativeMonoid[() => A] =
new Function0Monoid[A] with CommutativeMonoid[() => A] { def A: Monoid[A] = M }
- implicit def catsKernelCommutativeMonoidForFunction1[A, B](implicit M: CommutativeMonoid[B]): CommutativeMonoid[A => B] =
+ implicit def catsKernelCommutativeMonoidForFunction1[A, B](
+ implicit M: CommutativeMonoid[B]
+ ): CommutativeMonoid[A => B] =
new Function1Monoid[A, B] with CommutativeMonoid[A => B] { def B: Monoid[B] = M }
implicit def catsKernelSemilatticeForFunction0[A](implicit M: Semilattice[A]): Semilattice[() => A] =
@@ -80,10 +88,14 @@ trait FunctionInstances2 extends FunctionInstances3 {
trait FunctionInstances3 extends FunctionInstances4 {
- implicit def catsKernelCommutativeSemigroupForFunction0[A](implicit S: CommutativeSemigroup[A]): CommutativeSemigroup[() => A] =
+ implicit def catsKernelCommutativeSemigroupForFunction0[A](
+ implicit S: CommutativeSemigroup[A]
+ ): CommutativeSemigroup[() => A] =
new Function0Semigroup[A] with CommutativeSemigroup[() => A] { def A: Semigroup[A] = S }
- implicit def catsKernelCommutativeSemigroupForFunction1[A, B](implicit S: CommutativeSemigroup[B]): CommutativeSemigroup[A => B] =
+ implicit def catsKernelCommutativeSemigroupForFunction1[A, B](
+ implicit S: CommutativeSemigroup[B]
+ ): CommutativeSemigroup[A => B] =
new Function1Semigroup[A, B] with CommutativeSemigroup[A => B] { def B: Semigroup[B] = S }
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/map.scala b/kernel/src/main/scala/cats/kernel/instances/map.scala
index 1831ffb991..ef50b20145 100644
--- a/kernel/src/main/scala/cats/kernel/instances/map.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/map.scala
@@ -27,13 +27,14 @@ class MapHash[K, V](implicit V: Hash[V]) extends MapEq[K, V]()(V) with Hash[Map[
def hash(x: Map[K, V]): Int = {
var a, b, n = 0
var c = 1
- x foreach { case (k, v) =>
- // use the default hash on keys because that's what Scala's Map does
- val h = StaticMethods.product2Hash(k.hashCode(), V.hash(v))
- a += h
- b ^= h
- if (h != 0) c *= h
- n += 1
+ x.foreach {
+ case (k, v) =>
+ // use the default hash on keys because that's what Scala's Map does
+ val h = StaticMethods.product2Hash(k.hashCode(), V.hash(v))
+ a += h
+ b ^= h
+ if (h != 0) c *= h
+ n += 1
}
var h = mapSeed
h = mix(h, a)
@@ -46,26 +47,30 @@ class MapHash[K, V](implicit V: Hash[V]) extends MapEq[K, V]()(V) with Hash[Map[
class MapEq[K, V](implicit V: Eq[V]) extends Eq[Map[K, V]] {
def eqv(x: Map[K, V], y: Map[K, V]): Boolean =
if (x eq y) true
- else x.size == y.size && x.forall { case (k, v1) =>
- y.get(k) match {
- case Some(v2) => V.eqv(v1, v2)
- case None => false
+ else
+ x.size == y.size && x.forall {
+ case (k, v1) =>
+ y.get(k) match {
+ case Some(v2) => V.eqv(v1, v2)
+ case None => false
+ }
}
- }
}
-class MapMonoid[K, V](implicit V: Semigroup[V]) extends Monoid[Map[K, V]] {
+class MapMonoid[K, V](implicit V: Semigroup[V]) extends Monoid[Map[K, V]] {
def empty: Map[K, V] = Map.empty
def combine(xs: Map[K, V], ys: Map[K, V]): Map[K, V] =
if (xs.size <= ys.size) {
- xs.foldLeft(ys) { case (my, (k, x)) =>
- my.updated(k, Semigroup.maybeCombine(x, my.get(k)))
+ xs.foldLeft(ys) {
+ case (my, (k, x)) =>
+ my.updated(k, Semigroup.maybeCombine(x, my.get(k)))
}
} else {
- ys.foldLeft(xs) { case (mx, (k, y)) =>
- mx.updated(k, Semigroup.maybeCombine(mx.get(k), y))
+ ys.foldLeft(xs) {
+ case (mx, (k, y)) =>
+ mx.updated(k, Semigroup.maybeCombine(mx.get(k), y))
}
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/option.scala b/kernel/src/main/scala/cats/kernel/instances/option.scala
index ab324dabd8..1d5f051926 100644
--- a/kernel/src/main/scala/cats/kernel/instances/option.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/option.scala
@@ -32,7 +32,7 @@ class OptionOrder[A](implicit A: Order[A]) extends Order[Option[A]] {
if (y.isEmpty) 0 else -1
case Some(a) =>
y match {
- case None => 1
+ case None => 1
case Some(b) => A.compare(a, b)
}
}
@@ -45,7 +45,7 @@ class OptionPartialOrder[A](implicit A: PartialOrder[A]) extends PartialOrder[Op
if (y.isEmpty) 0.0 else -1.0
case Some(a) =>
y match {
- case None => 1.0
+ case None => 1.0
case Some(b) => A.partialCompare(a, b)
}
}
@@ -53,7 +53,7 @@ class OptionPartialOrder[A](implicit A: PartialOrder[A]) extends PartialOrder[Op
class OptionHash[A](implicit A: Hash[A]) extends OptionEq[A]()(A) with Hash[Option[A]] {
def hash(x: Option[A]): Int = x match {
- case None => None.hashCode()
+ case None => None.hashCode()
case Some(xx) => StaticMethods.product1Hash(A.hash(xx))
}
}
@@ -64,7 +64,7 @@ class OptionEq[A](implicit A: Eq[A]) extends Eq[Option[A]] {
case None => y.isEmpty
case Some(a) =>
y match {
- case None => false
+ case None => false
case Some(b) => A.eqv(a, b)
}
}
@@ -77,7 +77,7 @@ class OptionMonoid[A](implicit A: Semigroup[A]) extends Monoid[Option[A]] {
case None => y
case Some(a) =>
y match {
- case None => x
+ case None => x
case Some(b) => Some(A.combine(a, b))
}
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/string.scala b/kernel/src/main/scala/cats/kernel/instances/string.scala
index 14faf231e8..1e24ed3bc3 100644
--- a/kernel/src/main/scala/cats/kernel/instances/string.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/string.scala
@@ -15,7 +15,7 @@ class StringOrder extends Order[String] with Hash[String] {
override def eqv(x: String, y: String): Boolean =
x == y
def compare(x: String, y: String): Int =
- if (x eq y) 0 else x compareTo y
+ if (x eq y) 0 else x.compareTo(y)
}
class StringMonoid extends Monoid[String] {
diff --git a/kernel/src/main/scala/cats/kernel/instances/symbol.scala b/kernel/src/main/scala/cats/kernel/instances/symbol.scala
index 0b89e4fff2..fef07e9f6d 100644
--- a/kernel/src/main/scala/cats/kernel/instances/symbol.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/symbol.scala
@@ -11,11 +11,10 @@ class SymbolOrder extends Order[Symbol] with Hash[Symbol] {
def hash(x: Symbol): Int = x.hashCode()
- override def eqv(x: Symbol, y: Symbol): Boolean = {
+ override def eqv(x: Symbol, y: Symbol): Boolean =
// Symbols are interned
x eq y
- }
def compare(x: Symbol, y: Symbol): Int =
- if (x eq y) 0 else x.name compareTo y.name
+ if (x eq y) 0 else x.name.compareTo(y.name)
}
diff --git a/kernel/src/main/scala/cats/kernel/instances/uuid.scala b/kernel/src/main/scala/cats/kernel/instances/uuid.scala
index 1ef98c6837..95da72ea42 100644
--- a/kernel/src/main/scala/cats/kernel/instances/uuid.scala
+++ b/kernel/src/main/scala/cats/kernel/instances/uuid.scala
@@ -7,7 +7,7 @@ package object uuid extends UUIDInstances
trait UUIDInstances {
implicit val catsKernelStdOrderForUUID: Order[UUID] with Hash[UUID] = new Order[UUID] with Hash[UUID] {
- def compare(x: UUID, y: UUID): Int = x compareTo y
+ def compare(x: UUID, y: UUID): Int = x.compareTo(y)
def hash(x: UUID): Int = x.hashCode()
}
}
diff --git a/laws/src/main/scala/cats/laws/AlternativeLaws.scala b/laws/src/main/scala/cats/laws/AlternativeLaws.scala
index e8bb2f83b3..bb75483bcd 100644
--- a/laws/src/main/scala/cats/laws/AlternativeLaws.scala
+++ b/laws/src/main/scala/cats/laws/AlternativeLaws.scala
@@ -8,13 +8,13 @@ trait AlternativeLaws[F[_]] extends ApplicativeLaws[F] with MonoidKLaws[F] {
implicit def algebra[A]: Monoid[F[A]] = F.algebra[A]
def alternativeRightAbsorption[A, B](ff: F[A => B]): IsEq[F[B]] =
- (ff ap F.empty[A]) <-> F.empty[B]
+ (ff.ap(F.empty[A])) <-> F.empty[B]
def alternativeLeftDistributivity[A, B](fa: F[A], fa2: F[A], f: A => B): IsEq[F[B]] =
- ((fa |+| fa2) map f) <-> ((fa map f) |+| (fa2 map f))
+ ((fa |+| fa2).map(f)) <-> ((fa.map(f)) |+| (fa2.map(f)))
def alternativeRightDistributivity[A, B](fa: F[A], ff: F[A => B], fg: F[A => B]): IsEq[F[B]] =
- ((ff |+| fg) ap fa) <-> ((ff ap fa) |+| (fg ap fa))
+ ((ff |+| fg).ap(fa)) <-> ((ff.ap(fa)) |+| (fg.ap(fa)))
}
diff --git a/laws/src/main/scala/cats/laws/ApplicativeErrorLaws.scala b/laws/src/main/scala/cats/laws/ApplicativeErrorLaws.scala
index 44b7afc720..ddc66a6d27 100644
--- a/laws/src/main/scala/cats/laws/ApplicativeErrorLaws.scala
+++ b/laws/src/main/scala/cats/laws/ApplicativeErrorLaws.scala
@@ -32,7 +32,7 @@ trait ApplicativeErrorLaws[F[_], E] extends ApplicativeLaws[F] {
F.handleError(fa)(f) <-> F.recover(fa) { case x => f(x) }
def recoverConsistentWithRecoverWith[A](fa: F[A], pf: PartialFunction[E, A]): IsEq[F[A]] =
- F.recover(fa)(pf) <-> F.recoverWith(fa)(pf andThen F.pure)
+ F.recover(fa)(pf) <-> F.recoverWith(fa)(pf.andThen(F.pure))
def attemptConsistentWithAttemptT[A](fa: F[A]): IsEq[EitherT[F, E, A]] =
EitherT(F.attempt(fa)) <-> F.attemptT(fa)
@@ -44,7 +44,7 @@ trait ApplicativeErrorLaws[F[_], E] extends ApplicativeLaws[F] {
F.onError(F.pure(a)) { case x => f(x) } <-> F.pure(a)
def onErrorRaise[A](fa: F[A], e: E, fb: F[Unit]): IsEq[F[A]] =
- F.onError(F.raiseError[A](e)){case err => fb} <-> F.map2(fb, F.raiseError[A](e))((_, b) => b)
+ F.onError(F.raiseError[A](e)) { case err => fb } <-> F.map2(fb, F.raiseError[A](e))((_, b) => b)
}
object ApplicativeErrorLaws {
diff --git a/laws/src/main/scala/cats/laws/ArrowChoiceLaws.scala b/laws/src/main/scala/cats/laws/ArrowChoiceLaws.scala
index b6b2546e82..a465e37e18 100644
--- a/laws/src/main/scala/cats/laws/ArrowChoiceLaws.scala
+++ b/laws/src/main/scala/cats/laws/ArrowChoiceLaws.scala
@@ -15,9 +15,9 @@ trait ArrowChoiceLaws[F[_, _]] extends ArrowLaws[F] with ChoiceLaws[F] {
def sumAssoc[A, B, C](e: Either[Either[A, B], C]): Either[A, Either[B, C]] =
e match {
- case Left(Left(x)) => Left(x)
+ case Left(Left(x)) => Left(x)
case Left(Right(y)) => Right(Left(y))
- case Right(z) => Right(Right(z))
+ case Right(z) => Right(Right(z))
}
def leftLiftCommute[A, B, C](f: A => B): IsEq[F[Either[A, C], Either[B, C]]] =
@@ -36,7 +36,9 @@ trait ArrowChoiceLaws[F[_, _]] extends ArrowLaws[F] with ChoiceLaws[F] {
def leftAndThenRightIdentityCommutes[A, B, C, D](f: F[A, B], g: C => D): IsEq[F[Either[A, C], Either[B, D]]] =
(F.left(f) >>> F.lift(identity[B] _ +++ g)) <-> (F.lift(identity[A] _ +++ g) >>> F.left(f))
- def leftTwiceCommutesWithSumAssociation[A, B, C, D](f: F[A, D]): IsEq[F[Either[Either[A, B], C], Either[D, Either[B, C]]]] =
+ def leftTwiceCommutesWithSumAssociation[A, B, C, D](
+ f: F[A, D]
+ ): IsEq[F[Either[Either[A, B], C], Either[D, Either[B, C]]]] =
(F.left(F.left[A, D, B](f)) >>> F.lift(sumAssoc[D, B, C])) <->
(F.lift(sumAssoc[A, B, C]) >>> F.left(f))
}
diff --git a/laws/src/main/scala/cats/laws/ArrowLaws.scala b/laws/src/main/scala/cats/laws/ArrowLaws.scala
index e2ea3ed4c6..1e29e63d12 100644
--- a/laws/src/main/scala/cats/laws/ArrowLaws.scala
+++ b/laws/src/main/scala/cats/laws/ArrowLaws.scala
@@ -17,28 +17,28 @@ trait ArrowLaws[F[_, _]] extends CategoryLaws[F] with StrongLaws[F] {
F.lift(identity[A]) <-> F.id[A]
def arrowComposition[A, B, C](f: A => B, g: B => C): IsEq[F[A, C]] =
- F.lift(f andThen g) <-> (F.lift(f) andThen F.lift(g))
+ F.lift(f.andThen(g)) <-> (F.lift(f).andThen(F.lift(g)))
def arrowExtension[A, B, C](g: A => B): IsEq[F[(A, C), (B, C)]] =
- F.lift(g).first[C] <-> F.lift(g split identity[C])
+ F.lift(g).first[C] <-> F.lift(g.split(identity[C]))
def arrowFunctor[A, B, C, D](f: F[A, B], g: F[B, C]): IsEq[F[(A, D), (C, D)]] =
- (f andThen g).first[D] <-> (f.first[D] andThen g.first[D])
+ f.andThen(g).first[D] <-> (f.first[D].andThen(g.first[D]))
def arrowExchange[A, B, C, D](f: F[A, B], g: C => D): IsEq[F[(A, C), (B, D)]] =
- (f.first[C] andThen F.lift(identity[B] _ split g)) <-> (F.lift(identity[A] _ split g) andThen f.first[D])
+ (f.first[C].andThen(F.lift((identity[B] _).split(g)))) <-> (F.lift((identity[A] _).split(g)).andThen(f.first[D]))
def arrowUnit[A, B, C](f: F[A, B]): IsEq[F[(A, C), B]] =
- (f.first[C] andThen F.lift(fst[B, C])) <-> (F.lift(fst[A, C]) andThen f)
+ (f.first[C].andThen(F.lift(fst[B, C]))) <-> (F.lift(fst[A, C]).andThen(f))
def arrowAssociation[A, B, C, D](f: F[A, B]): IsEq[F[((A, C), D), (B, (C, D))]] =
- (f.first[C].first[D] andThen F.lift(assoc[B, C, D])) <-> (F.lift(assoc[A, C, D]) andThen f.first[(C, D)])
+ (f.first[C].first[D].andThen(F.lift(assoc[B, C, D]))) <-> (F.lift(assoc[A, C, D]).andThen(f.first[(C, D)]))
def splitConsistentWithAndThen[A, B, C, D](f: F[A, B], g: F[C, D]): IsEq[F[(A, C), (B, D)]] =
- F.split(f, g) <-> (f.first andThen g.second)
+ F.split(f, g) <-> (f.first.andThen(g.second))
def mergeConsistentWithAndThen[A, B, C](f: F[A, B], g: F[A, C]): IsEq[F[A, (B, C)]] =
- F.merge(f, g) <-> ((F.lift((x: A) => (x, x))) andThen F.split(f, g))
+ F.merge(f, g) <-> ((F.lift((x: A) => (x, x))).andThen(F.split(f, g)))
private def fst[A, B](p: (A, B)): A = p._1
diff --git a/laws/src/main/scala/cats/laws/BifoldableLaws.scala b/laws/src/main/scala/cats/laws/BifoldableLaws.scala
index 783eefa7c0..d82c490bdf 100644
--- a/laws/src/main/scala/cats/laws/BifoldableLaws.scala
+++ b/laws/src/main/scala/cats/laws/BifoldableLaws.scala
@@ -12,7 +12,9 @@ trait BifoldableLaws[F[_, _]] {
expected <-> F.bifoldMap(fab)(f, g)
}
- def bifoldRightConsistentWithBifoldMap[A, B, C](fab: F[A, B], f: A => C, g: B => C)(implicit C: Monoid[C]): IsEq[C] = {
+ def bifoldRightConsistentWithBifoldMap[A, B, C](fab: F[A, B], f: A => C, g: B => C)(
+ implicit C: Monoid[C]
+ ): IsEq[C] = {
val expected = F.bifoldRight(fab, Later(C.empty))(
(a: A, ec: Eval[C]) => ec.map(c => C.combine(f(a), c)),
(b: B, ec: Eval[C]) => ec.map(c => C.combine(g(b), c))
diff --git a/laws/src/main/scala/cats/laws/BifunctorLaws.scala b/laws/src/main/scala/cats/laws/BifunctorLaws.scala
index f356d39d4c..1304db1b39 100644
--- a/laws/src/main/scala/cats/laws/BifunctorLaws.scala
+++ b/laws/src/main/scala/cats/laws/BifunctorLaws.scala
@@ -12,16 +12,14 @@ trait BifunctorLaws[F[_, _]] {
def bifunctorIdentity[A, B](fa: F[A, B]): IsEq[F[A, B]] =
fa.bimap(identity, identity) <-> fa
- def bifunctorComposition[A, B, C, X, Y, Z](fa: F[A, X], f: A => B, f2: B => C, g: X => Y, g2: Y => Z): IsEq[F[C, Z]] = {
- fa.bimap(f, g).bimap(f2, g2) <-> fa.bimap(f andThen f2, g andThen g2)
- }
+ def bifunctorComposition[A, B, C, X, Y, Z](fa: F[A, X], f: A => B, f2: B => C, g: X => Y, g2: Y => Z): IsEq[F[C, Z]] =
+ fa.bimap(f, g).bimap(f2, g2) <-> fa.bimap(f.andThen(f2), g.andThen(g2))
def bifunctorLeftMapIdentity[A, B](fa: F[A, B]): IsEq[F[A, B]] =
fa.leftMap(identity) <-> fa
- def bifunctorLeftMapComposition[A, B, C, D](fa: F[A, B], f: A => C, g: C => D): IsEq[F[D, B]] = {
- fa.leftMap(f).leftMap(g) <-> fa.leftMap(f andThen g)
- }
+ def bifunctorLeftMapComposition[A, B, C, D](fa: F[A, B], f: A => C, g: C => D): IsEq[F[D, B]] =
+ fa.leftMap(f).leftMap(g) <-> fa.leftMap(f.andThen(g))
}
diff --git a/laws/src/main/scala/cats/laws/BitraverseLaws.scala b/laws/src/main/scala/cats/laws/BitraverseLaws.scala
index d22172d4f3..a2e08bbc17 100644
--- a/laws/src/main/scala/cats/laws/BitraverseLaws.scala
+++ b/laws/src/main/scala/cats/laws/BitraverseLaws.scala
@@ -16,8 +16,7 @@ trait BitraverseLaws[F[_, _]] extends BifoldableLaws[F] with BifunctorLaws[F] {
h: C => G[E],
i: D => G[H]
)(implicit
- G: Applicative[G]
- ): IsEq[G[G[F[E, H]]]] = {
+ G: Applicative[G]): IsEq[G[G[F[E, H]]]] = {
val fg = F.bitraverse(fab)(f, g)
val hi = G.map(fg)(f => F.bitraverse(f)(h, i))
diff --git a/laws/src/main/scala/cats/laws/CategoryLaws.scala b/laws/src/main/scala/cats/laws/CategoryLaws.scala
index 85d85a738c..ea380c7c83 100644
--- a/laws/src/main/scala/cats/laws/CategoryLaws.scala
+++ b/laws/src/main/scala/cats/laws/CategoryLaws.scala
@@ -11,10 +11,10 @@ trait CategoryLaws[F[_, _]] extends ComposeLaws[F] {
implicit override def F: Category[F]
def categoryLeftIdentity[A, B](f: F[A, B]): IsEq[F[A, B]] =
- (F.id[A] andThen f) <-> f
+ (F.id[A].andThen(f)) <-> f
def categoryRightIdentity[A, B](f: F[A, B]): IsEq[F[A, B]] =
- (f andThen F.id[B]) <-> f
+ (f.andThen(F.id[B])) <-> f
}
object CategoryLaws {
diff --git a/laws/src/main/scala/cats/laws/CoflatMapLaws.scala b/laws/src/main/scala/cats/laws/CoflatMapLaws.scala
index 7591959d8f..eaf6bfaf71 100644
--- a/laws/src/main/scala/cats/laws/CoflatMapLaws.scala
+++ b/laws/src/main/scala/cats/laws/CoflatMapLaws.scala
@@ -28,7 +28,7 @@ trait CoflatMapLaws[F[_]] extends FunctorLaws[F] {
*/
def cokleisliAssociativity[A, B, C, D](f: F[A] => B, g: F[B] => C, h: F[C] => D, fa: F[A]): IsEq[D] = {
val (cf, cg, ch) = (Cokleisli(f), Cokleisli(g), Cokleisli(h))
- ((cf andThen cg) andThen ch).run(fa) <-> (cf andThen (cg andThen ch)).run(fa)
+ (cf.andThen(cg)).andThen(ch).run(fa) <-> cf.andThen(cg.andThen(ch)).run(fa)
}
}
diff --git a/laws/src/main/scala/cats/laws/CommutativeApplyLaws.scala b/laws/src/main/scala/cats/laws/CommutativeApplyLaws.scala
index cbc2a54e3e..19536c982b 100644
--- a/laws/src/main/scala/cats/laws/CommutativeApplyLaws.scala
+++ b/laws/src/main/scala/cats/laws/CommutativeApplyLaws.scala
@@ -3,8 +3,8 @@ package cats.laws
import cats.CommutativeApply
/**
- * Laws that must be obeyed by any `CommutativeApply`.
- */
+ * Laws that must be obeyed by any `CommutativeApply`.
+ */
trait CommutativeApplyLaws[F[_]] extends ApplyLaws[F] {
implicit override def F: CommutativeApply[F]
diff --git a/laws/src/main/scala/cats/laws/CommutativeArrowLaws.scala b/laws/src/main/scala/cats/laws/CommutativeArrowLaws.scala
index 9212b896eb..2b9e9bc138 100644
--- a/laws/src/main/scala/cats/laws/CommutativeArrowLaws.scala
+++ b/laws/src/main/scala/cats/laws/CommutativeArrowLaws.scala
@@ -6,8 +6,8 @@ import cats.syntax.compose._
import cats.syntax.strong._
/** Reference: "Causal Commutative Arrows", Journal of Functional Programming
- * Figure 4.
- */
+ * Figure 4.
+ */
trait CommutativeArrowLaws[F[_, _]] extends ArrowLaws[F] {
implicit override def F: CommutativeArrow[F]
diff --git a/laws/src/main/scala/cats/laws/CommutativeFlatMapLaws.scala b/laws/src/main/scala/cats/laws/CommutativeFlatMapLaws.scala
index 1ed46cd511..04b5a19aba 100644
--- a/laws/src/main/scala/cats/laws/CommutativeFlatMapLaws.scala
+++ b/laws/src/main/scala/cats/laws/CommutativeFlatMapLaws.scala
@@ -8,8 +8,8 @@ trait CommutativeFlatMapLaws[F[_]] extends CommutativeApplyLaws[F] with FlatMapL
implicit override def F: CommutativeFlatMap[F]
def flatmapCommutative[A, B, C](fa: F[A], fb: F[B], g: (A, B) => F[C]): IsEq[F[C]] =
- F.flatMap(fa)( a => F.flatMap(fb)( b => g(a, b))) <->
- F.flatMap(fb)( b => F.flatMap(fa)( a => g(a, b)))
+ F.flatMap(fa)(a => F.flatMap(fb)(b => g(a, b))) <->
+ F.flatMap(fb)(b => F.flatMap(fa)(a => g(a, b)))
}
diff --git a/laws/src/main/scala/cats/laws/CommutativeMonadLaws.scala b/laws/src/main/scala/cats/laws/CommutativeMonadLaws.scala
index 7333a994ef..509d046db8 100644
--- a/laws/src/main/scala/cats/laws/CommutativeMonadLaws.scala
+++ b/laws/src/main/scala/cats/laws/CommutativeMonadLaws.scala
@@ -4,7 +4,10 @@ package laws
/**
* Laws that must be obeyed by any `CommutativeMonad`.
*/
-trait CommutativeMonadLaws[F[_]] extends MonadLaws[F] with CommutativeFlatMapLaws[F] with CommutativeApplicativeLaws[F] {
+trait CommutativeMonadLaws[F[_]]
+ extends MonadLaws[F]
+ with CommutativeFlatMapLaws[F]
+ with CommutativeApplicativeLaws[F] {
implicit override def F: CommutativeMonad[F]
}
diff --git a/laws/src/main/scala/cats/laws/ComonadLaws.scala b/laws/src/main/scala/cats/laws/ComonadLaws.scala
index d594c44155..b459a49109 100644
--- a/laws/src/main/scala/cats/laws/ComonadLaws.scala
+++ b/laws/src/main/scala/cats/laws/ComonadLaws.scala
@@ -30,14 +30,14 @@ trait ComonadLaws[F[_]] extends CoflatMapLaws[F] {
* `cats.data.Cokleisli` arrows. This is analogous to [[comonadLeftIdentity]].
*/
def cokleisliLeftIdentity[A, B](fa: F[A], f: F[A] => B): IsEq[B] =
- (Cokleisli(F.extract[A]) andThen Cokleisli(f)).run(fa) <-> f(fa)
+ Cokleisli(F.extract[A]).andThen(Cokleisli(f)).run(fa) <-> f(fa)
/**
* `extract` is the right identity element under left-to-right composition of
* `cats.data.Cokleisli` arrows. This is analogous to [[comonadRightIdentity]].
*/
def cokleisliRightIdentity[A, B](fa: F[A], f: F[A] => B): IsEq[B] =
- (Cokleisli(f) andThen Cokleisli(F.extract[B])).run(fa) <-> f(fa)
+ Cokleisli(f).andThen(Cokleisli(F.extract[B])).run(fa) <-> f(fa)
}
object ComonadLaws {
diff --git a/laws/src/main/scala/cats/laws/ComposeLaws.scala b/laws/src/main/scala/cats/laws/ComposeLaws.scala
index e6b3519156..c1d14e546f 100644
--- a/laws/src/main/scala/cats/laws/ComposeLaws.scala
+++ b/laws/src/main/scala/cats/laws/ComposeLaws.scala
@@ -11,7 +11,7 @@ trait ComposeLaws[F[_, _]] {
implicit def F: Compose[F]
def composeAssociativity[A, B, C, D](fab: F[A, B], fbc: F[B, C], fcd: F[C, D]): IsEq[F[A, D]] =
- ((fab andThen fbc) andThen fcd) <-> (fab andThen (fbc andThen fcd))
+ ((fab.andThen(fbc)).andThen(fcd)) <-> (fab.andThen(fbc.andThen(fcd)))
}
object ComposeLaws {
diff --git a/laws/src/main/scala/cats/laws/ContravariantLaws.scala b/laws/src/main/scala/cats/laws/ContravariantLaws.scala
index 234ffc707b..4b325a4d3e 100644
--- a/laws/src/main/scala/cats/laws/ContravariantLaws.scala
+++ b/laws/src/main/scala/cats/laws/ContravariantLaws.scala
@@ -14,7 +14,7 @@ trait ContravariantLaws[F[_]] extends InvariantLaws[F] {
fa.contramap(identity[A]) <-> fa
def contravariantComposition[A, B, C](fa: F[A], f: B => A, g: C => B): IsEq[F[C]] =
- fa.contramap(f).contramap(g) <-> fa.contramap(f compose g)
+ fa.contramap(f).contramap(g) <-> fa.contramap(f.compose(g))
}
object ContravariantLaws {
diff --git a/laws/src/main/scala/cats/laws/ContravariantMonoidalLaws.scala b/laws/src/main/scala/cats/laws/ContravariantMonoidalLaws.scala
index ef99653482..db55d2e247 100644
--- a/laws/src/main/scala/cats/laws/ContravariantMonoidalLaws.scala
+++ b/laws/src/main/scala/cats/laws/ContravariantMonoidalLaws.scala
@@ -18,10 +18,10 @@ trait ContravariantMonoidalLaws[F[_]] extends ContravariantSemigroupalLaws[F] {
(F.trivial[A], fa).contramapN(delta[A]) <-> fa
def contravariantMonoidalContramap2CompatibleContramapLeft[A, B, C](fa: F[A], f: B => (A, C)): IsEq[F[B]] =
- (fa, F.trivial[C]).contramapN(f) <-> fa.contramap(f andThen (_._1))
+ (fa, F.trivial[C]).contramapN(f) <-> fa.contramap(f.andThen(_._1))
def contravariantMonoidalContramap2CompatibleContramapRight[A, B, C](fa: F[A], f: C => (B, A)): IsEq[F[C]] =
- (F.trivial[B], fa).contramapN(f) <-> fa.contramap(f andThen (_._2))
+ (F.trivial[B], fa).contramapN(f) <-> fa.contramap(f.andThen(_._2))
}
object ContravariantMonoidalLaws {
diff --git a/laws/src/main/scala/cats/laws/DeferLaws.scala b/laws/src/main/scala/cats/laws/DeferLaws.scala
index 5e24cf7fe8..3aad5f06d4 100644
--- a/laws/src/main/scala/cats/laws/DeferLaws.scala
+++ b/laws/src/main/scala/cats/laws/DeferLaws.scala
@@ -2,6 +2,7 @@ package cats
package laws
import catalysts.Platform
+
/**
* Laws that must be obeyed by any `Defer`.
*/
diff --git a/laws/src/main/scala/cats/laws/DistributiveLaws.scala b/laws/src/main/scala/cats/laws/DistributiveLaws.scala
index 1df311b445..744bcefff6 100644
--- a/laws/src/main/scala/cats/laws/DistributiveLaws.scala
+++ b/laws/src/main/scala/cats/laws/DistributiveLaws.scala
@@ -8,13 +8,11 @@ import cats.syntax.distributive._
trait DistributiveLaws[F[_]] extends FunctorLaws[F] {
implicit override def F: Distributive[F]
- def distributeIdentity[A, B](fa: F[A], f: A => B): IsEq[F[B]] = {
+ def distributeIdentity[A, B](fa: F[A], f: A => B): IsEq[F[B]] =
fa.distribute[Id, B](f) <-> F.map(fa)(f)
- }
- def cosequenceIdentity[A](fa: F[A]): IsEq[F[A]] = {
+ def cosequenceIdentity[A](fa: F[A]): IsEq[F[A]] =
F.cosequence[Id, A](fa) <-> fa
- }
def cosequenceTwiceIsId[A, M[_]](fma: F[M[A]])(implicit M: Distributive[M]): IsEq[F[M[A]]] = {
val result = F.cosequence(M.cosequence(fma))
@@ -27,8 +25,7 @@ trait DistributiveLaws[F[_]] extends FunctorLaws[F] {
g: B => N[C]
)(implicit
N: Distributive[N],
- M: Functor[M]
- ): IsEq[Nested[F, N, M[C]]] = {
+ M: Functor[M]): IsEq[Nested[F, N, M[C]]] = {
val rhs = ma.distribute[Nested[F, N, ?], C](a => Nested(F.map(f(a))(g)))
val lhs = Nested(F.map(ma.distribute(f))(fb => fb.distribute(g)))
lhs <-> rhs
diff --git a/laws/src/main/scala/cats/laws/FlatMapLaws.scala b/laws/src/main/scala/cats/laws/FlatMapLaws.scala
index 93d0da15af..07f47ce666 100644
--- a/laws/src/main/scala/cats/laws/FlatMapLaws.scala
+++ b/laws/src/main/scala/cats/laws/FlatMapLaws.scala
@@ -18,23 +18,23 @@ trait FlatMapLaws[F[_]] extends ApplyLaws[F] {
def flatMapConsistentApply[A, B](fa: F[A], fab: F[A => B]): IsEq[F[B]] =
fab.ap(fa) <-> fab.flatMap(f => fa.map(f))
-
/**
* The composition of `cats.data.Kleisli` arrows is associative. This is
* analogous to [[flatMapAssociativity]].
*/
def kleisliAssociativity[A, B, C, D](f: A => F[B], g: B => F[C], h: C => F[D], a: A): IsEq[F[D]] = {
val (kf, kg, kh) = (Kleisli(f), Kleisli(g), Kleisli(h))
- ((kf andThen kg) andThen kh).run(a) <-> (kf andThen (kg andThen kh)).run(a)
+ (kf.andThen(kg)).andThen(kh).run(a) <-> kf.andThen(kg.andThen(kh)).run(a)
}
def mproductConsistency[A, B](fa: F[A], fb: A => F[B]): IsEq[F[(A, B)]] =
F.mproduct(fa)(fb) <-> F.flatMap(fa)(a => F.map(fb(a))((a, _)))
def tailRecMConsistentFlatMap[A](a: A, f: A => F[A]): IsEq[F[A]] = {
- def bounce(n: Int) = F.tailRecM[(A, Int), A]((a, n)) { case (a0, i) =>
- if (i > 0) f(a0).map(a1 => Left((a1, i-1)))
- else f(a0).map(Right(_))
+ def bounce(n: Int) = F.tailRecM[(A, Int), A]((a, n)) {
+ case (a0, i) =>
+ if (i > 0) f(a0).map(a1 => Left((a1, i - 1)))
+ else f(a0).map(Right(_))
}
/*
* The law is for n >= 1
@@ -52,8 +52,14 @@ trait FlatMapLaws[F[_]] extends ApplyLaws[F] {
*/
def flatMapFromTailRecMConsistency[A, B](fa: F[A], fn: A => F[B]): IsEq[F[B]] = {
val tailRecMFlatMap = F.tailRecM[Option[A], B](Option.empty[A]) {
- case None => F.map(fa) { a => Left(Some(a)) }
- case Some(a) => F.map(fn(a)) { b => Right(b) }
+ case None =>
+ F.map(fa) { a =>
+ Left(Some(a))
+ }
+ case Some(a) =>
+ F.map(fn(a)) { b =>
+ Right(b)
+ }
}
F.flatMap(fa)(fn) <-> tailRecMFlatMap
diff --git a/laws/src/main/scala/cats/laws/FoldableLaws.scala b/laws/src/main/scala/cats/laws/FoldableLaws.scala
index 2d7d261956..64cb6e83ca 100644
--- a/laws/src/main/scala/cats/laws/FoldableLaws.scala
+++ b/laws/src/main/scala/cats/laws/FoldableLaws.scala
@@ -12,24 +12,20 @@ trait FoldableLaws[F[_]] extends UnorderedFoldableLaws[F] {
fa: F[A],
f: A => B
)(implicit
- M: Monoid[B]
- ): IsEq[B] = {
- fa.foldMap(f) <-> fa.foldLeft(M.empty) { (b, a) => b |+| f(a) }
- }
+ M: Monoid[B]): IsEq[B] =
+ fa.foldMap(f) <-> fa.foldLeft(M.empty) { (b, a) =>
+ b |+| f(a)
+ }
def rightFoldConsistentWithFoldMap[A, B](
fa: F[A],
f: A => B
)(implicit
- M: Monoid[B]
- ): IsEq[B] = {
+ M: Monoid[B]): IsEq[B] =
fa.foldMap(f) <-> fa.foldRight(Later(M.empty))((a, lb) => lb.map(f(a) |+| _)).value
- }
- def existsConsistentWithFind[A](fa: F[A], p: A => Boolean): Boolean = {
+ def existsConsistentWithFind[A](fa: F[A], p: A => Boolean): Boolean =
F.exists(fa)(p) == F.find(fa)(p).isDefined
- }
-
/**
* Monadic folding with identity monad is analogous to `foldLeft`.
@@ -38,9 +34,8 @@ trait FoldableLaws[F[_]] extends UnorderedFoldableLaws[F] {
fa: F[A],
b: B,
f: (B, A) => B
- ): IsEq[B] = {
+ ): IsEq[B] =
F.foldM[Id, A, B](fa, b)(f) <-> F.foldLeft(fa, b)(f)
- }
/**
* `reduceLeftOption` consistent with `reduceLeftToOption`
@@ -48,9 +43,8 @@ trait FoldableLaws[F[_]] extends UnorderedFoldableLaws[F] {
def reduceLeftOptionConsistentWithReduceLeftToOption[A](
fa: F[A],
f: (A, A) => A
- ): IsEq[Option[A]] = {
+ ): IsEq[Option[A]] =
F.reduceLeftOption(fa)(f) <-> F.reduceLeftToOption(fa)(identity)(f)
- }
/**
* `reduceRightOption` consistent with `reduceRightToOption`
@@ -64,40 +58,52 @@ trait FoldableLaws[F[_]] extends UnorderedFoldableLaws[F] {
}
def getRef[A](fa: F[A], idx: Long): IsEq[Option[A]] =
- F.get(fa)(idx) <-> (
- if (idx < 0L) None
- else F.foldM[Either[A, ?], A, Long](fa, 0L) { (i, a) =>
- if (i == idx) Left(a) else Right(i + 1L)
- } match {
- case Left(a) => Some(a)
- case Right(_) => None
- })
+ F.get(fa)(idx) <-> (if (idx < 0L) None
+ else
+ F.foldM[Either[A, ?], A, Long](fa, 0L) { (i, a) =>
+ if (i == idx) Left(a) else Right(i + 1L)
+ } match {
+ case Left(a) => Some(a)
+ case Right(_) => None
+ })
def foldRef[A](fa: F[A])(implicit A: Monoid[A]): IsEq[A] =
- F.fold(fa) <-> F.foldLeft(fa, A.empty) { (acc, a) => A.combine(acc, a) }
+ F.fold(fa) <-> F.foldLeft(fa, A.empty) { (acc, a) =>
+ A.combine(acc, a)
+ }
def toListRef[A](fa: F[A]): IsEq[List[A]] =
- F.toList(fa) <-> F.foldLeft(fa, mutable.ListBuffer.empty[A]) { (buf, a) =>
- buf += a
- }.toList
+ F.toList(fa) <-> F
+ .foldLeft(fa, mutable.ListBuffer.empty[A]) { (buf, a) =>
+ buf += a
+ }
+ .toList
def filter_Ref[A](fa: F[A], p: A => Boolean): IsEq[List[A]] =
- F.filter_(fa)(p) <-> F.foldLeft(fa, mutable.ListBuffer.empty[A]) { (buf, a) =>
- if (p(a)) buf += a else buf
- }.toList
+ F.filter_(fa)(p) <-> F
+ .foldLeft(fa, mutable.ListBuffer.empty[A]) { (buf, a) =>
+ if (p(a)) buf += a else buf
+ }
+ .toList
def takeWhile_Ref[A](fa: F[A], p: A => Boolean): IsEq[List[A]] =
- F.takeWhile_(fa)(p) <-> F.foldRight(fa, Now(List.empty[A])) { (a, llst) =>
- if (p(a)) llst.map(a :: _) else Now(Nil)
- }.value
+ F.takeWhile_(fa)(p) <-> F
+ .foldRight(fa, Now(List.empty[A])) { (a, llst) =>
+ if (p(a)) llst.map(a :: _) else Now(Nil)
+ }
+ .value
def dropWhile_Ref[A](fa: F[A], p: A => Boolean): IsEq[List[A]] =
- F.dropWhile_(fa)(p) <-> F.foldLeft(fa, mutable.ListBuffer.empty[A]) { (buf, a) =>
- if (buf.nonEmpty || !p(a)) buf += a else buf
- }.toList
+ F.dropWhile_(fa)(p) <-> F
+ .foldLeft(fa, mutable.ListBuffer.empty[A]) { (buf, a) =>
+ if (buf.nonEmpty || !p(a)) buf += a else buf
+ }
+ .toList
def collectFirstSome_Ref[A, B](fa: F[A], f: A => Option[B]): IsEq[Option[B]] =
- F.collectFirstSome(fa)(f) <-> F.foldLeft(fa, Option.empty[B]){ (ob, a) => if (ob.isDefined) ob else f(a) }
+ F.collectFirstSome(fa)(f) <-> F.foldLeft(fa, Option.empty[B]) { (ob, a) =>
+ if (ob.isDefined) ob else f(a)
+ }
def collectFirst_Ref[A, B](fa: F[A], pf: PartialFunction[A, B]): IsEq[Option[B]] =
F.collectFirst(fa)(pf) <-> F.collectFirstSome(fa)(pf.lift)
diff --git a/laws/src/main/scala/cats/laws/FunctorFilterLaws.scala b/laws/src/main/scala/cats/laws/FunctorFilterLaws.scala
index 32af361b1d..a3e65012da 100644
--- a/laws/src/main/scala/cats/laws/FunctorFilterLaws.scala
+++ b/laws/src/main/scala/cats/laws/FunctorFilterLaws.scala
@@ -1,11 +1,9 @@
package cats
package laws
-
trait FunctorFilterLaws[F[_]] {
implicit def F: FunctorFilter[F]
-
implicit def functor: Functor[F] = F.functor
def mapFilterComposition[A, B, C](fa: F[A], f: A => Option[B], g: B => Option[C]): IsEq[F[C]] = {
@@ -14,22 +12,18 @@ trait FunctorFilterLaws[F[_]] {
lhs <-> rhs
}
- def mapFilterMapConsistency[A, B](fa: F[A], f: A => B): IsEq[F[B]] = {
- F.mapFilter(fa)(f andThen (x => Some(x): Option[B])) <-> functor.map(fa)(f)
- }
+ def mapFilterMapConsistency[A, B](fa: F[A], f: A => B): IsEq[F[B]] =
+ F.mapFilter(fa)(f.andThen(x => Some(x): Option[B])) <-> functor.map(fa)(f)
- def collectConsistentWithMapFilter[A, B](fa: F[A], f: PartialFunction[A, B]): IsEq[F[B]] = {
+ def collectConsistentWithMapFilter[A, B](fa: F[A], f: PartialFunction[A, B]): IsEq[F[B]] =
F.collect(fa)(f) <-> F.mapFilter(fa)(f.lift)
- }
- def flattenOptionConsistentWithMapFilter[A](fa: F[Option[A]]): IsEq[F[A]] = {
+ def flattenOptionConsistentWithMapFilter[A](fa: F[Option[A]]): IsEq[F[A]] =
F.flattenOption(fa) <-> F.mapFilter(fa)(identity)
- }
- def filterConsistentWithMapFilter[A](fa: F[A], f: A => Boolean): IsEq[F[A]] = {
+ def filterConsistentWithMapFilter[A](fa: F[A], f: A => Boolean): IsEq[F[A]] =
F.filter(fa)(f) <->
F.mapFilter(fa)(a => if (f(a)) Some(a) else None)
- }
}
object FunctorFilterLaws {
diff --git a/laws/src/main/scala/cats/laws/FunctorLaws.scala b/laws/src/main/scala/cats/laws/FunctorLaws.scala
index 48f9f9ff56..1f9f163333 100644
--- a/laws/src/main/scala/cats/laws/FunctorLaws.scala
+++ b/laws/src/main/scala/cats/laws/FunctorLaws.scala
@@ -13,7 +13,7 @@ trait FunctorLaws[F[_]] extends InvariantLaws[F] {
fa.map(identity) <-> fa
def covariantComposition[A, B, C](fa: F[A], f: A => B, g: B => C): IsEq[F[C]] =
- fa.map(f).map(g) <-> fa.map(f andThen g)
+ fa.map(f).map(g) <-> fa.map(f.andThen(g))
}
object FunctorLaws {
diff --git a/laws/src/main/scala/cats/laws/InjectKLaws.scala b/laws/src/main/scala/cats/laws/InjectKLaws.scala
index 01049c6980..b5b77c90b1 100644
--- a/laws/src/main/scala/cats/laws/InjectKLaws.scala
+++ b/laws/src/main/scala/cats/laws/InjectKLaws.scala
@@ -5,7 +5,7 @@ trait InjectKLaws[F[_], G[_]] {
def injectK: InjectK[F, G]
def injectKRoundTripInj[A](fa: F[A]): IsEq[Option[F[A]]] =
- (injectK.prj compose injectK.inj).apply(fa) <-> Some(fa)
+ injectK.prj.compose(injectK.inj).apply(fa) <-> Some(fa)
def injectKRoundTripPrj[A](ga: G[A]): IsEq[Option[G[A]]] =
injectK.prj(ga) match {
@@ -16,5 +16,5 @@ trait InjectKLaws[F[_], G[_]] {
object InjectKLaws {
def apply[F[_], G[_]](implicit ev: InjectK[F, G]): InjectKLaws[F, G] =
- new InjectKLaws[F, G]{ val injectK: InjectK[F, G] = ev }
+ new InjectKLaws[F, G] { val injectK: InjectK[F, G] = ev }
}
diff --git a/laws/src/main/scala/cats/laws/InjectLaws.scala b/laws/src/main/scala/cats/laws/InjectLaws.scala
index 694e16edc8..956793698b 100644
--- a/laws/src/main/scala/cats/laws/InjectLaws.scala
+++ b/laws/src/main/scala/cats/laws/InjectLaws.scala
@@ -5,7 +5,7 @@ trait InjectLaws[A, B] {
def inject: Inject[A, B]
def injectRoundTripInj(a: A): IsEq[Option[A]] =
- (inject.prj compose inject.inj).apply(a) <-> Some(a)
+ inject.prj.compose(inject.inj).apply(a) <-> Some(a)
def injectRoundTripPrj(b: B): IsEq[Option[B]] =
inject.prj(b) match {
@@ -16,5 +16,5 @@ trait InjectLaws[A, B] {
object InjectLaws {
def apply[A, B](implicit ev: Inject[A, B]): InjectLaws[A, B] =
- new InjectLaws[A, B]{ val inject: Inject[A, B] = ev }
+ new InjectLaws[A, B] { val inject: Inject[A, B] = ev }
}
diff --git a/laws/src/main/scala/cats/laws/InvariantLaws.scala b/laws/src/main/scala/cats/laws/InvariantLaws.scala
index b6f762679b..4718b45b44 100644
--- a/laws/src/main/scala/cats/laws/InvariantLaws.scala
+++ b/laws/src/main/scala/cats/laws/InvariantLaws.scala
@@ -14,7 +14,7 @@ trait InvariantLaws[F[_]] {
fa.imap(identity[A])(identity[A]) <-> fa
def invariantComposition[A, B, C](fa: F[A], f1: A => B, f2: B => A, g1: B => C, g2: C => B): IsEq[F[C]] =
- fa.imap(f1)(f2).imap(g1)(g2) <-> fa.imap(g1 compose f1)(f2 compose g2)
+ fa.imap(f1)(f2).imap(g1)(g2) <-> fa.imap(g1.compose(f1))(f2.compose(g2))
}
object InvariantLaws {
diff --git a/laws/src/main/scala/cats/laws/InvariantMonoidalLaws.scala b/laws/src/main/scala/cats/laws/InvariantMonoidalLaws.scala
index 528bd7ae72..ed7b19c8ae 100644
--- a/laws/src/main/scala/cats/laws/InvariantMonoidalLaws.scala
+++ b/laws/src/main/scala/cats/laws/InvariantMonoidalLaws.scala
@@ -5,7 +5,7 @@ package laws
* Laws that must be obeyed by any `cats.InvariantMonoidal`.
*/
trait InvariantMonoidalLaws[F[_]] extends InvariantSemigroupalLaws[F] {
- override implicit def F: InvariantMonoidal[F]
+ implicit override def F: InvariantMonoidal[F]
import cats.syntax.semigroupal._
import cats.syntax.invariant._
@@ -15,10 +15,11 @@ trait InvariantMonoidalLaws[F[_]] extends InvariantSemigroupalLaws[F] {
def invariantMonoidalRightIdentity[A, B](fa: F[A]): IsEq[F[A]] =
fa.product(F.unit).imap(_._1)(a => (a, ())) <-> fa
- def invariantMonoidalAssociativity[A, B, C](fa: F[A], fb: F[B], fc: F[C]):
- IsEq[F[(A, (B, C))]] =
- fa.product(fb.product(fc)) <-> fa.product(fb).product(fc)
- .imap { case ((a, b), c) => (a, (b, c)) } { case (a, (b, c)) => ((a, b), c) }
+ def invariantMonoidalAssociativity[A, B, C](fa: F[A], fb: F[B], fc: F[C]): IsEq[F[(A, (B, C))]] =
+ fa.product(fb.product(fc)) <-> fa
+ .product(fb)
+ .product(fc)
+ .imap { case ((a, b), c) => (a, (b, c)) } { case (a, (b, c)) => ((a, b), c) }
}
object InvariantMonoidalLaws {
diff --git a/laws/src/main/scala/cats/laws/InvariantSemigroupalLaws.scala b/laws/src/main/scala/cats/laws/InvariantSemigroupalLaws.scala
index f1c301787c..f81d718ad1 100644
--- a/laws/src/main/scala/cats/laws/InvariantSemigroupalLaws.scala
+++ b/laws/src/main/scala/cats/laws/InvariantSemigroupalLaws.scala
@@ -1,10 +1,9 @@
package cats
package laws
-
/**
- * Laws that are expected for any `cats.InvariantSemigroupal`.
- */
+ * Laws that are expected for any `cats.InvariantSemigroupal`.
+ */
trait InvariantSemigroupalLaws[F[_]] extends InvariantLaws[F] with SemigroupalLaws[F] {
implicit override def F: InvariantSemigroupal[F]
diff --git a/laws/src/main/scala/cats/laws/MonadLaws.scala b/laws/src/main/scala/cats/laws/MonadLaws.scala
index f6e8e304aa..b488192ae6 100644
--- a/laws/src/main/scala/cats/laws/MonadLaws.scala
+++ b/laws/src/main/scala/cats/laws/MonadLaws.scala
@@ -21,14 +21,14 @@ trait MonadLaws[F[_]] extends ApplicativeLaws[F] with FlatMapLaws[F] {
* `cats.data.Kleisli` arrows. This is analogous to [[monadLeftIdentity]].
*/
def kleisliLeftIdentity[A, B](a: A, f: A => F[B]): IsEq[F[B]] =
- (Kleisli(F.pure[A]) andThen Kleisli(f)).run(a) <-> f(a)
+ Kleisli(F.pure[A]).andThen(Kleisli(f)).run(a) <-> f(a)
/**
* `pure` is the right identity element under left-to-right composition of
* `cats.data.Kleisli` arrows. This is analogous to [[monadRightIdentity]].
*/
def kleisliRightIdentity[A, B](a: A, f: A => F[B]): IsEq[F[B]] =
- (Kleisli(f) andThen Kleisli(F.pure[B])).run(a) <-> f(a)
+ Kleisli(f).andThen(Kleisli(F.pure[B])).run(a) <-> f(a)
/**
* Make sure that map and flatMap are consistent.
diff --git a/laws/src/main/scala/cats/laws/MonoidKLaws.scala b/laws/src/main/scala/cats/laws/MonoidKLaws.scala
index 8f2f3b600c..e8ad9251ec 100644
--- a/laws/src/main/scala/cats/laws/MonoidKLaws.scala
+++ b/laws/src/main/scala/cats/laws/MonoidKLaws.scala
@@ -5,7 +5,7 @@ package laws
* Laws that must be obeyed by any `cats.MonoidK`.
*/
trait MonoidKLaws[F[_]] extends SemigroupKLaws[F] {
- override implicit def F: MonoidK[F]
+ implicit override def F: MonoidK[F]
def monoidKLeftIdentity[A](a: F[A]): IsEq[F[A]] =
F.combineK(F.empty, a) <-> a
diff --git a/laws/src/main/scala/cats/laws/NonEmptyParallelLaws.scala b/laws/src/main/scala/cats/laws/NonEmptyParallelLaws.scala
index f3251d0b56..23d721d4de 100644
--- a/laws/src/main/scala/cats/laws/NonEmptyParallelLaws.scala
+++ b/laws/src/main/scala/cats/laws/NonEmptyParallelLaws.scala
@@ -1,10 +1,9 @@
package cats
package laws
-
/**
- * Laws that must be obeyed by any `cats.NonEmptyParallel`.
- */
+ * Laws that must be obeyed by any `cats.NonEmptyParallel`.
+ */
trait NonEmptyParallelLaws[M[_], F[_]] {
def P: NonEmptyParallel[M, F]
diff --git a/laws/src/main/scala/cats/laws/NonEmptyTraverseLaws.scala b/laws/src/main/scala/cats/laws/NonEmptyTraverseLaws.scala
index cf0423cb2b..b9b8b4c16b 100644
--- a/laws/src/main/scala/cats/laws/NonEmptyTraverseLaws.scala
+++ b/laws/src/main/scala/cats/laws/NonEmptyTraverseLaws.scala
@@ -1,7 +1,6 @@
package cats.laws
-
-import cats.{Apply, Id, Semigroup, NonEmptyTraverse}
+import cats.{Apply, Id, NonEmptyTraverse, Semigroup}
import cats.data.{Const, Nested}
import cats.syntax.nonEmptyTraverse._
import cats.syntax.reducible._
@@ -9,18 +8,16 @@ import cats.syntax.reducible._
trait NonEmptyTraverseLaws[F[_]] extends TraverseLaws[F] with ReducibleLaws[F] {
implicit override def F: NonEmptyTraverse[F]
- def nonEmptyTraverseIdentity[A, B](fa: F[A], f: A => B): IsEq[F[B]] = {
+ def nonEmptyTraverseIdentity[A, B](fa: F[A], f: A => B): IsEq[F[B]] =
fa.nonEmptyTraverse[Id, B](f) <-> F.map(fa)(f)
- }
def nonEmptyTraverseSequentialComposition[A, B, C, M[_], N[_]](
- fa: F[A],
- f: A => M[B],
- g: B => N[C]
- )(implicit
- N: Apply[N],
- M: Apply[M]
- ): IsEq[Nested[M, N, F[C]]] = {
+ fa: F[A],
+ f: A => M[B],
+ g: B => N[C]
+ )(implicit
+ N: Apply[N],
+ M: Apply[M]): IsEq[Nested[M, N, F[C]]] = {
val lhs = Nested(M.map(fa.nonEmptyTraverse(f))(fb => fb.nonEmptyTraverse(g)))
val rhs = fa.nonEmptyTraverse[Nested[M, N, ?], C](a => Nested(M.map(f(a))(g)))
@@ -28,13 +25,12 @@ trait NonEmptyTraverseLaws[F[_]] extends TraverseLaws[F] with ReducibleLaws[F] {
}
def nonEmptyTraverseParallelComposition[A, B, M[_], N[_]](
- fa: F[A],
- f: A => M[B],
- g: A => N[B]
- )(implicit
- N: Apply[N],
- M: Apply[M]
- ): IsEq[(M[F[B]], N[F[B]])] = {
+ fa: F[A],
+ f: A => M[B],
+ g: A => N[B]
+ )(implicit
+ N: Apply[N],
+ M: Apply[M]): IsEq[(M[F[B]], N[F[B]])] = {
type MN[Z] = (M[Z], N[Z])
implicit val MN = new Apply[MN] {
def ap[X, Y](f: MN[X => Y])(fa: MN[X]): MN[Y] = {
@@ -58,9 +54,9 @@ trait NonEmptyTraverseLaws[F[_]] extends TraverseLaws[F] with ReducibleLaws[F] {
}
def reduceMapDerived[A, B](
- fa: F[A],
- f: A => B
- )(implicit B: Semigroup[B]): IsEq[B] = {
+ fa: F[A],
+ f: A => B
+ )(implicit B: Semigroup[B]): IsEq[B] = {
val lhs: B = fa.nonEmptyTraverse[Const[B, ?], B](a => Const(f(a))).getConst
val rhs: B = fa.reduceMap(f)
lhs <-> rhs
diff --git a/laws/src/main/scala/cats/laws/ParallelLaws.scala b/laws/src/main/scala/cats/laws/ParallelLaws.scala
index d750064cc0..9573f48d12 100644
--- a/laws/src/main/scala/cats/laws/ParallelLaws.scala
+++ b/laws/src/main/scala/cats/laws/ParallelLaws.scala
@@ -1,10 +1,9 @@
package cats
package laws
-
/**
- * Laws that must be obeyed by any `cats.Parallel`.
- */
+ * Laws that must be obeyed by any `cats.Parallel`.
+ */
trait ParallelLaws[M[_], F[_]] extends NonEmptyParallelLaws[M, F] {
def P: Parallel[M, F]
diff --git a/laws/src/main/scala/cats/laws/ProfunctorLaws.scala b/laws/src/main/scala/cats/laws/ProfunctorLaws.scala
index 003b1eb618..e391b76ccf 100644
--- a/laws/src/main/scala/cats/laws/ProfunctorLaws.scala
+++ b/laws/src/main/scala/cats/laws/ProfunctorLaws.scala
@@ -14,9 +14,11 @@ trait ProfunctorLaws[F[_, _]] {
fab.dimap(identity[A])(identity[B]) <-> fab
def profunctorComposition[A2, A1, A0, B0, B1, B2](fab: F[A0, B0],
- f2: A2 => A1, f1: A1 => A0,
- g1: B0 => B1, g2: B1 => B2): IsEq[F[A2, B2]] =
- fab.dimap(f1)(g1).dimap(f2)(g2) <-> fab.dimap(f1 compose f2)(g2 compose g1)
+ f2: A2 => A1,
+ f1: A1 => A0,
+ g1: B0 => B1,
+ g2: B1 => B2): IsEq[F[A2, B2]] =
+ fab.dimap(f1)(g1).dimap(f2)(g2) <-> fab.dimap(f1.compose(f2))(g2.compose(g1))
def profunctorLmapIdentity[A, B](fab: F[A, B]): IsEq[F[A, B]] =
fab.lmap(identity[A]) <-> fab
@@ -24,13 +26,11 @@ trait ProfunctorLaws[F[_, _]] {
def profunctorRmapIdentity[A, B](fab: F[A, B]): IsEq[F[A, B]] =
fab.rmap(identity[B]) <-> fab
- def profunctorLmapComposition[A2, A1, A0, B](fab: F[A0, B],
- f: A2 => A1, g: A1 => A0): IsEq[F[A2, B]] =
- fab.lmap(g).lmap(f) <-> fab.lmap(g compose f)
+ def profunctorLmapComposition[A2, A1, A0, B](fab: F[A0, B], f: A2 => A1, g: A1 => A0): IsEq[F[A2, B]] =
+ fab.lmap(g).lmap(f) <-> fab.lmap(g.compose(f))
- def profunctorRmapComposition[A, B2, B1, B0](fab: F[A, B0],
- f: B0 => B1, g: B1 => B2): IsEq[F[A, B2]] =
- fab.rmap(f).rmap(g) <-> fab.rmap(g compose f)
+ def profunctorRmapComposition[A, B2, B1, B0](fab: F[A, B0], f: B0 => B1, g: B1 => B2): IsEq[F[A, B2]] =
+ fab.rmap(f).rmap(g) <-> fab.rmap(g.compose(f))
}
diff --git a/laws/src/main/scala/cats/laws/ReducibleLaws.scala b/laws/src/main/scala/cats/laws/ReducibleLaws.scala
index bd74e04e0d..4d52ebd9e0 100644
--- a/laws/src/main/scala/cats/laws/ReducibleLaws.scala
+++ b/laws/src/main/scala/cats/laws/ReducibleLaws.scala
@@ -10,24 +10,21 @@ trait ReducibleLaws[F[_]] extends FoldableLaws[F] {
fa: F[A],
f: A => B
)(implicit
- B: Semigroup[B]
- ): IsEq[B] =
+ B: Semigroup[B]): IsEq[B] =
fa.reduceMap(f) <-> fa.reduceLeftTo(f)((b, a) => b |+| f(a))
def reduceRightToConsistentWithReduceMap[A, B](
fa: F[A],
f: A => B
)(implicit
- B: Semigroup[B]
- ): IsEq[B] =
+ B: Semigroup[B]): IsEq[B] =
fa.reduceMap(f) <-> fa.reduceRightTo(f)((a, eb) => eb.map(f(a) |+| _)).value
def reduceRightToConsistentWithReduceRightToOption[A, B](
fa: F[A],
f: A => B
)(implicit
- B: Semigroup[B]
- ): IsEq[Option[B]] =
+ B: Semigroup[B]): IsEq[Option[B]] =
fa.reduceRightToOption(f)((a, eb) => eb.map(f(a) |+| _)).value <->
fa.reduceRightTo(f)((a, eb) => eb.map(f(a) |+| _)).map(Option(_)).value
diff --git a/laws/src/main/scala/cats/laws/RepresentableLaws.scala b/laws/src/main/scala/cats/laws/RepresentableLaws.scala
index ed997a2ef4..a5758ce335 100644
--- a/laws/src/main/scala/cats/laws/RepresentableLaws.scala
+++ b/laws/src/main/scala/cats/laws/RepresentableLaws.scala
@@ -1,24 +1,21 @@
package cats
package laws
-
/**
* Laws that must be obeyed by any `Representable` functor.
*/
trait RepresentableLaws[F[_], R] {
- implicit val R: Representable.Aux[F, R]
+ implicit val R: Representable.Aux[F, R]
- def indexTabulateIsId[B](fb: F[B]): IsEq[F[B]] = {
- R.tabulate(R.index(fb)) <-> fb
- }
+ def indexTabulateIsId[B](fb: F[B]): IsEq[F[B]] =
+ R.tabulate(R.index(fb)) <-> fb
- def tabulateIndexIsId[B](f: R => B, x: R): IsEq[B] = {
- R.index(R.tabulate(f))(x) <-> f(x)
- }
+ def tabulateIndexIsId[B](f: R => B, x: R): IsEq[B] =
+ R.index(R.tabulate(f))(x) <-> f(x)
}
object RepresentableLaws {
- def apply[F[_], R](implicit ev: Representable.Aux[F, R]): RepresentableLaws[F, R] =
- new RepresentableLaws[F, R] { val R: Representable.Aux[F, R] = ev }
+ def apply[F[_], R](implicit ev: Representable.Aux[F, R]): RepresentableLaws[F, R] =
+ new RepresentableLaws[F, R] { val R: Representable.Aux[F, R] = ev }
}
diff --git a/laws/src/main/scala/cats/laws/StrongLaws.scala b/laws/src/main/scala/cats/laws/StrongLaws.scala
index 82a66d317e..77a2a1bb3e 100644
--- a/laws/src/main/scala/cats/laws/StrongLaws.scala
+++ b/laws/src/main/scala/cats/laws/StrongLaws.scala
@@ -12,10 +12,14 @@ import cats.instances.function._
trait StrongLaws[F[_, _]] extends ProfunctorLaws[F] {
implicit override def F: Strong[F]
- def strongFirstDistributivity[A0, A1, B1, B2, C](fab: F[A1, B1], f: A0 => A1, g: B1 => B2): IsEq[F[(A0, C), (B2, C)]] =
+ def strongFirstDistributivity[A0, A1, B1, B2, C](fab: F[A1, B1],
+ f: A0 => A1,
+ g: B1 => B2): IsEq[F[(A0, C), (B2, C)]] =
fab.dimap(f)(g).first[C] <-> fab.first[C].dimap(f.first[C])(g.first[C])
- def strongSecondDistributivity[A0, A1, B1, B2, C](fab: F[A1, B1], f: A0 => A1, g: B1 => B2): IsEq[F[(C, A0), (C, B2)]] =
+ def strongSecondDistributivity[A0, A1, B1, B2, C](fab: F[A1, B1],
+ f: A0 => A1,
+ g: B1 => B2): IsEq[F[(C, A0), (C, B2)]] =
fab.dimap(f)(g).second[C] <-> fab.second[C].dimap(f.second[C])(g.second[C])
}
diff --git a/laws/src/main/scala/cats/laws/TraverseFilterLaws.scala b/laws/src/main/scala/cats/laws/TraverseFilterLaws.scala
index bd799fa8f6..d3c093c838 100644
--- a/laws/src/main/scala/cats/laws/TraverseFilterLaws.scala
+++ b/laws/src/main/scala/cats/laws/TraverseFilterLaws.scala
@@ -8,31 +8,25 @@ import cats.instances.option._
trait TraverseFilterLaws[F[_]] extends FunctorFilterLaws[F] {
implicit override def F: TraverseFilter[F]
- def traverseFilterIdentity[G[_]: Applicative, A](fa: F[A]): IsEq[G[F[A]]] = {
+ def traverseFilterIdentity[G[_]: Applicative, A](fa: F[A]): IsEq[G[F[A]]] =
fa.traverseFilter(_.some.pure[G]) <-> fa.pure[G]
- }
- def traverseFilterConsistentWithTraverse[G[_]: Applicative, A](fa: F[A], f: A => G[A]): IsEq[G[F[A]]] = {
+ def traverseFilterConsistentWithTraverse[G[_]: Applicative, A](fa: F[A], f: A => G[A]): IsEq[G[F[A]]] =
fa.traverseFilter(a => f(a).map(_.some)) <-> F.traverse.traverse(fa)(f)
- }
- def traverseFilterComposition[A, B, C, M[_], N[_]](fa: F[A],
- f: A => M[Option[B]],
- g: B => N[Option[C]]
- )(implicit
- M: Applicative[M],
- N: Applicative[N]
- ): IsEq[Nested[M, N, F[C]]] = {
+ def traverseFilterComposition[A, B, C, M[_], N[_]](fa: F[A], f: A => M[Option[B]], g: B => N[Option[C]])(
+ implicit
+ M: Applicative[M],
+ N: Applicative[N]
+ ): IsEq[Nested[M, N, F[C]]] = {
val lhs = Nested[M, N, F[C]](fa.traverseFilter(f).map(_.traverseFilter(g)))
- val rhs: Nested[M, N, F[C]] = fa.traverseFilter[Nested[M, N, ?], C](a =>
- Nested[M, N, Option[C]](f(a).map(_.traverseFilter(g)))
- )
+ val rhs: Nested[M, N, F[C]] =
+ fa.traverseFilter[Nested[M, N, ?], C](a => Nested[M, N, Option[C]](f(a).map(_.traverseFilter(g))))
lhs <-> rhs
}
- def filterAConsistentWithTraverseFilter[G[_]: Applicative, A](fa: F[A], f: A => G[Boolean]): IsEq[G[F[A]]] = {
+ def filterAConsistentWithTraverseFilter[G[_]: Applicative, A](fa: F[A], f: A => G[Boolean]): IsEq[G[F[A]]] =
fa.filterA(f) <-> fa.traverseFilter(a => f(a).map(if (_) Some(a) else None))
- }
}
object TraverseFilterLaws {
diff --git a/laws/src/main/scala/cats/laws/TraverseLaws.scala b/laws/src/main/scala/cats/laws/TraverseLaws.scala
index e796b9070c..2658928dbf 100644
--- a/laws/src/main/scala/cats/laws/TraverseLaws.scala
+++ b/laws/src/main/scala/cats/laws/TraverseLaws.scala
@@ -9,9 +9,8 @@ import cats.syntax.foldable._
trait TraverseLaws[F[_]] extends FunctorLaws[F] with FoldableLaws[F] with UnorderedTraverseLaws[F] {
implicit override def F: Traverse[F]
- def traverseIdentity[A, B](fa: F[A], f: A => B): IsEq[F[B]] = {
+ def traverseIdentity[A, B](fa: F[A], f: A => B): IsEq[F[B]] =
fa.traverse[Id, B](f) <-> F.map(fa)(f)
- }
def traverseSequentialComposition[A, B, C, M[_], N[_]](
fa: F[A],
@@ -19,8 +18,7 @@ trait TraverseLaws[F[_]] extends FunctorLaws[F] with FoldableLaws[F] with Unorde
g: B => N[C]
)(implicit
N: Applicative[N],
- M: Applicative[M]
- ): IsEq[Nested[M, N, F[C]]] = {
+ M: Applicative[M]): IsEq[Nested[M, N, F[C]]] = {
val lhs = Nested(M.map(fa.traverse(f))(fb => fb.traverse(g)))
val rhs = fa.traverse[Nested[M, N, ?], C](a => Nested(M.map(f(a))(g)))
@@ -33,8 +31,7 @@ trait TraverseLaws[F[_]] extends FunctorLaws[F] with FoldableLaws[F] with Unorde
g: A => N[B]
)(implicit
N: Applicative[N],
- M: Applicative[M]
- ): IsEq[(M[F[B]], N[F[B]])] = {
+ M: Applicative[M]): IsEq[(M[F[B]], N[F[B]])] = {
type MN[Z] = (M[Z], N[Z])
implicit val MN = new Applicative[MN] {
def pure[X](x: X): MN[X] = (M.pure(x), N.pure(x))
@@ -79,23 +76,24 @@ trait TraverseLaws[F[_]] extends FunctorLaws[F] with FoldableLaws[F] with Unorde
def store[T](a: T): Const[FirstOption[T], T] = Const(new FirstOption(Some(a)))
val first = F.traverse[Const[FirstOption[A], ?], A, A](fa)(store).getConst.o
- val traverseFirst = F.traverse[Const[FirstOption[A], ?], A, A](
- F.traverse(fa)(liftId)
- )(store).getConst.o
+ val traverseFirst = F
+ .traverse[Const[FirstOption[A], ?], A, A](
+ F.traverse(fa)(liftId)
+ )(store)
+ .getConst
+ .o
first <-> traverseFirst
}
def mapWithIndexRef[A, B](fa: F[A], f: (A, Int) => B): IsEq[F[B]] = {
val lhs = F.mapWithIndex(fa)(f)
- val rhs = F.traverse(fa)(a =>
- State((s: Int) => (s + 1, f(a, s)))).runA(0).value
+ val rhs = F.traverse(fa)(a => State((s: Int) => (s + 1, f(a, s)))).runA(0).value
lhs <-> rhs
}
def traverseWithIndexMRef[G[_], A, B](fa: F[A], f: (A, Int) => G[B])(implicit G: Monad[G]): IsEq[G[F[B]]] = {
val lhs = F.traverseWithIndexM(fa)(f)
- val rhs = F.traverse(fa)(a =>
- StateT((s: Int) => G.map(f(a, s))(b => (s + 1, b)))).runA(0)
+ val rhs = F.traverse(fa)(a => StateT((s: Int) => G.map(f(a, s))(b => (s + 1, b)))).runA(0)
lhs <-> rhs
}
diff --git a/laws/src/main/scala/cats/laws/UnorderedFoldableLaws.scala b/laws/src/main/scala/cats/laws/UnorderedFoldableLaws.scala
index ee98a97708..7df29a0c3e 100644
--- a/laws/src/main/scala/cats/laws/UnorderedFoldableLaws.scala
+++ b/laws/src/main/scala/cats/laws/UnorderedFoldableLaws.scala
@@ -9,24 +9,21 @@ trait UnorderedFoldableLaws[F[_]] {
def unorderedFoldConsistentWithUnorderedFoldMap[A: CommutativeMonoid](fa: F[A]): IsEq[A] =
F.unorderedFoldMap(fa)(identity) <-> F.unorderedFold(fa)
-
-
- def forallConsistentWithExists[A](fa: F[A], p: A => Boolean): Boolean = {
+ def forallConsistentWithExists[A](fa: F[A], p: A => Boolean): Boolean =
if (F.forall(fa)(p)) {
val negationExists = F.exists(fa)(a => !(p(a)))
// if p is true for all elements, then there cannot be an element for which
// it does not hold.
!negationExists &&
- // if p is true for all elements, then either there must be no elements
- // or there must exist an element for which it is true.
- (F.isEmpty(fa) || F.exists(fa)(p))
+ // if p is true for all elements, then either there must be no elements
+ // or there must exist an element for which it is true.
+ (F.isEmpty(fa) || F.exists(fa)(p))
} else true // can't test much in this case
- }
def existsLazy[A](fa: F[A]): Boolean = {
var i = 0
- F.exists(fa){ _ =>
+ F.exists(fa) { _ =>
i = i + 1
true
}
@@ -35,7 +32,7 @@ trait UnorderedFoldableLaws[F[_]] {
def forallLazy[A](fa: F[A]): Boolean = {
var i = 0
- F.forall(fa){ _ =>
+ F.forall(fa) { _ =>
i = i + 1
false
}
@@ -43,12 +40,10 @@ trait UnorderedFoldableLaws[F[_]] {
}
/**
- * If `F[A]` is empty, forall must return true.
- */
- def forallEmpty[A](fa: F[A], p: A => Boolean): Boolean = {
+ * If `F[A]` is empty, forall must return true.
+ */
+ def forallEmpty[A](fa: F[A], p: A => Boolean): Boolean =
!F.isEmpty(fa) || F.forall(fa)(p)
- }
-
def nonEmptyRef[A](fa: F[A]): IsEq[Boolean] =
F.nonEmpty(fa) <-> !F.isEmpty(fa)
diff --git a/laws/src/main/scala/cats/laws/UnorderedTraverseLaws.scala b/laws/src/main/scala/cats/laws/UnorderedTraverseLaws.scala
index 0841f4255b..0ec264284b 100644
--- a/laws/src/main/scala/cats/laws/UnorderedTraverseLaws.scala
+++ b/laws/src/main/scala/cats/laws/UnorderedTraverseLaws.scala
@@ -7,26 +7,22 @@ trait UnorderedTraverseLaws[F[_]] extends UnorderedFoldableLaws[F] {
implicit def F: UnorderedTraverse[F]
def unorderedTraverseIdentity[A, B](fa: F[A])(f: A => B)(implicit ev: Functor[F]): IsEq[F[B]] =
- F.unorderedTraverse[Id, A, B](fa)(f) <-> (ev.map(fa)(f))
+ F.unorderedTraverse[Id, A, B](fa)(f) <-> (ev.map(fa)(f))
- def unorderedTraverseSequentialComposition[A, B, C, M[_], N[_]]
- (fa: F[A],
- f: A => M[B],
- g: B => N[C])
- (implicit N: CommutativeApplicative[N],
- M: CommutativeApplicative[M]): IsEq[Nested[M, N, F[C]]] = {
+ def unorderedTraverseSequentialComposition[A, B, C, M[_], N[_]](fa: F[A], f: A => M[B], g: B => N[C])(
+ implicit N: CommutativeApplicative[N],
+ M: CommutativeApplicative[M]
+ ): IsEq[Nested[M, N, F[C]]] = {
val lhs = Nested(M.map(F.unorderedTraverse(fa)(f))(fb => F.unorderedTraverse(fb)(g)))
val rhs = F.unorderedTraverse[Nested[M, N, ?], A, C](fa)(a => Nested(M.map(f(a))(g)))
lhs <-> rhs
}
- def unorderedTraverseParallelComposition[A, B, M[_], N[_]]
- (fa: F[A],
- f: A => M[B],
- g: A => N[B])
- (implicit N: CommutativeApplicative[N],
- M: CommutativeApplicative[M]): IsEq[(M[F[B]], N[F[B]])] = {
+ def unorderedTraverseParallelComposition[A, B, M[_], N[_]](fa: F[A], f: A => M[B], g: A => N[B])(
+ implicit N: CommutativeApplicative[N],
+ M: CommutativeApplicative[M]
+ ): IsEq[(M[F[B]], N[F[B]])] = {
type MN[Z] = (M[Z], N[Z])
implicit val MN = new CommutativeApplicative[MN] {
diff --git a/laws/src/main/scala/cats/laws/discipline/AlternativeTests.scala b/laws/src/main/scala/cats/laws/discipline/AlternativeTests.scala
index 832ad97efb..848710a2dd 100644
--- a/laws/src/main/scala/cats/laws/discipline/AlternativeTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/AlternativeTests.scala
@@ -6,24 +6,23 @@ import cats.laws.discipline.SemigroupalTests.Isomorphisms
import org.scalacheck.{Arbitrary, Cogen, Prop}
import Prop._
-trait AlternativeTests[F[_]] extends ApplicativeTests[F] with MonoidKTests[F] {
+trait AlternativeTests[F[_]] extends ApplicativeTests[F] with MonoidKTests[F] {
def laws: AlternativeLaws[F]
def alternative[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
val name: String = "alternative"
val bases: Seq[(String, RuleSet)] = Nil
@@ -34,7 +33,6 @@ trait AlternativeTests[F[_]] extends ApplicativeTests[F] with MonoidKTests[F] {
"right absorption" -> forAll(laws.alternativeRightAbsorption[A, B] _)
)
}
-}
}
diff --git a/laws/src/main/scala/cats/laws/discipline/ApplicativeErrorTests.scala b/laws/src/main/scala/cats/laws/discipline/ApplicativeErrorTests.scala
index 6edc466d0b..e417b0f5de 100644
--- a/laws/src/main/scala/cats/laws/discipline/ApplicativeErrorTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ApplicativeErrorTests.scala
@@ -12,27 +12,26 @@ trait ApplicativeErrorTests[F[_], E] extends ApplicativeTests[F] {
def laws: ApplicativeErrorLaws[F, E]
def applicativeError[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFU: Arbitrary[F[Unit]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- ArbE: Arbitrary[E],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- CogenE: Cogen[E],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqE: Eq[E],
- EqFEitherEU: Eq[F[Either[E, Unit]]],
- EqFEitherEA: Eq[F[Either[E, A]]],
- EqEitherTFEA: Eq[EitherT[F, E, A]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFU: Arbitrary[F[Unit]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ ArbE: Arbitrary[E],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ CogenE: Cogen[E],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqE: Eq[E],
+ EqFEitherEU: Eq[F[Either[E, Unit]]],
+ EqFEitherEA: Eq[F[Either[E, A]]],
+ EqEitherTFEA: Eq[EitherT[F, E, A]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "applicativeError"
def bases: Seq[(String, RuleSet)] = Nil
@@ -44,16 +43,19 @@ trait ApplicativeErrorTests[F[_], E] extends ApplicativeTests[F] {
"applicativeError handleError pure" -> forAll(laws.handleErrorPure[A] _),
"applicativeError raiseError attempt" -> forAll(laws.raiseErrorAttempt _),
"applicativeError pure attempt" -> forAll(laws.pureAttempt[A] _),
- "applicativeError handleErrorWith consistent with recoverWith" -> forAll(laws.handleErrorWithConsistentWithRecoverWith[A] _),
+ "applicativeError handleErrorWith consistent with recoverWith" -> forAll(
+ laws.handleErrorWithConsistentWithRecoverWith[A] _
+ ),
"applicativeError handleError consistent with recover" -> forAll(laws.handleErrorConsistentWithRecover[A] _),
"applicativeError recover consistent with recoverWith" -> forAll(laws.recoverConsistentWithRecoverWith[A] _),
"applicativeError attempt consistent with attemptT" -> forAll(laws.attemptConsistentWithAttemptT[A] _),
- "applicativeError attempt fromEither consistent with pure" -> forAll(laws.attemptFromEitherConsistentWithPure[A] _),
+ "applicativeError attempt fromEither consistent with pure" -> forAll(
+ laws.attemptFromEitherConsistentWithPure[A] _
+ ),
"applicativeError onError pure" -> forAll(laws.onErrorPure[A] _),
"applicativeError onError raise" -> forAll(laws.onErrorRaise[A] _)
)
}
- }
}
object ApplicativeErrorTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ApplicativeTests.scala b/laws/src/main/scala/cats/laws/discipline/ApplicativeTests.scala
index e7990de517..62852aad98 100644
--- a/laws/src/main/scala/cats/laws/discipline/ApplicativeTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ApplicativeTests.scala
@@ -10,20 +10,19 @@ trait ApplicativeTests[F[_]] extends ApplyTests[F] {
def laws: ApplicativeLaws[F]
def applicative[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet =
new DefaultRuleSet(
name = "applicative",
parent = Some(apply[A, B, C]),
@@ -34,8 +33,8 @@ trait ApplicativeTests[F[_]] extends ApplyTests[F] {
"applicative unit" -> forAll(laws.applicativeUnit[A] _),
"ap consistent with product + map" -> forAll(laws.apProductConsistent[A, B] _),
"monoidal left identity" -> forAll((fa: F[A]) => iso.leftIdentity(laws.monoidalLeftIdentity(fa))),
- "monoidal right identity" -> forAll((fa: F[A]) => iso.rightIdentity(laws.monoidalRightIdentity(fa))))
- }
+ "monoidal right identity" -> forAll((fa: F[A]) => iso.rightIdentity(laws.monoidalRightIdentity(fa)))
+ )
}
object ApplicativeTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ApplyTests.scala b/laws/src/main/scala/cats/laws/discipline/ApplyTests.scala
index 0d75d8a703..2a43c3c4be 100644
--- a/laws/src/main/scala/cats/laws/discipline/ApplyTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ApplyTests.scala
@@ -10,19 +10,18 @@ trait ApplyTests[F[_]] extends FunctorTests[F] with SemigroupalTests[F] {
def laws: ApplyLaws[F]
def apply[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = new RuleSet {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet = new RuleSet {
val name = "apply"
val parents = Seq(functor[A, B, C], semigroupal[A, B, C])
val bases = Seq.empty
@@ -31,7 +30,8 @@ trait ApplyTests[F[_]] extends FunctorTests[F] with SemigroupalTests[F] {
"map2/product-map consistency" -> forAll(laws.map2ProductConsistency[A, B, C] _),
"map2/map2Eval consistency" -> forAll(laws.map2EvalConsistency[A, B, C] _),
"productR consistent map2" -> forAll(laws.productRConsistency[A, C] _),
- "productL consistent map2" -> forAll(laws.productLConsistency[A, C] _))
+ "productL consistent map2" -> forAll(laws.productLConsistency[A, C] _)
+ )
}
}
diff --git a/laws/src/main/scala/cats/laws/discipline/Arbitrary.scala b/laws/src/main/scala/cats/laws/discipline/Arbitrary.scala
index 80675a4297..664dc28477 100644
--- a/laws/src/main/scala/cats/laws/discipline/Arbitrary.scala
+++ b/laws/src/main/scala/cats/laws/discipline/Arbitrary.scala
@@ -23,10 +23,13 @@ object arbitrary extends ArbitraryInstances0 {
// this instance is not available in scalacheck 1.13.2.
// remove this once a newer version is available.
implicit def catsLawsCogenForTry[A](implicit A: Cogen[A]): Cogen[Try[A]] =
- Cogen((seed, x) => x match {
- case Success(a) => A.perturb(seed, a)
- case Failure(e) => Cogen[Throwable].perturb(seed, e)
- })
+ Cogen(
+ (seed, x) =>
+ x match {
+ case Success(a) => A.perturb(seed, a)
+ case Failure(e) => Cogen[Throwable].perturb(seed, e)
+ }
+ )
// this instance is not available in scalacheck 1.13.2.
// remove this once a newer version is available.
@@ -39,7 +42,8 @@ object arbitrary extends ArbitraryInstances0 {
implicit def catsLawsCogenForConst[A, B](implicit A: Cogen[A]): Cogen[Const[A, B]] =
A.contramap(_.getConst)
- implicit def catsLawsArbitraryForOneAnd[F[_], A](implicit A: Arbitrary[A], F: Arbitrary[F[A]]): Arbitrary[OneAnd[F, A]] =
+ implicit def catsLawsArbitraryForOneAnd[F[_], A](implicit A: Arbitrary[A],
+ F: Arbitrary[F[A]]): Arbitrary[OneAnd[F, A]] =
Arbitrary(F.arbitrary.flatMap(fa => A.arbitrary.map(a => OneAnd(a, fa))))
implicit def catsLawsCogenForOneAnd[F[_], A](implicit A: Cogen[A], F: Cogen[F[A]]): Cogen[OneAnd[F, A]] =
@@ -52,8 +56,7 @@ object arbitrary extends ArbitraryInstances0 {
Cogen[Vector[A]].contramap(_.toVector)
implicit def catsLawsArbitraryForNonEmptySet[A: Order](implicit A: Arbitrary[A]): Arbitrary[NonEmptySet[A]] =
- Arbitrary(implicitly[Arbitrary[SortedSet[A]]].arbitrary.flatMap(fa =>
- A.arbitrary.map(a => NonEmptySet(a, fa))))
+ Arbitrary(implicitly[Arbitrary[SortedSet[A]]].arbitrary.flatMap(fa => A.arbitrary.map(a => NonEmptySet(a, fa))))
implicit def catsLawsCogenForNonEmptySet[A: Order: Cogen]: Cogen[NonEmptySet[A]] =
Cogen[SortedSet[A]].contramap(_.toSortedSet)
@@ -79,7 +82,7 @@ object arbitrary extends ArbitraryInstances0 {
implicit def catsLawsArbitraryForNonEmptyChain[A](implicit A: Arbitrary[A]): Arbitrary[NonEmptyChain[A]] =
Arbitrary(implicitly[Arbitrary[Chain[A]]].arbitrary.flatMap { chain =>
NonEmptyChain.fromChain(chain) match {
- case None => A.arbitrary.map(NonEmptyChain.one)
+ case None => A.arbitrary.map(NonEmptyChain.one)
case Some(ne) => Gen.const(ne)
}
})
@@ -87,7 +90,6 @@ object arbitrary extends ArbitraryInstances0 {
implicit def catsLawsCogenForNonEmptyChain[A](implicit A: Cogen[A]): Cogen[NonEmptyChain[A]] =
Cogen[Chain[A]].contramap(_.toChain)
-
implicit def catsLawsArbitraryForZipNonEmptyList[A](implicit A: Arbitrary[A]): Arbitrary[ZipNonEmptyList[A]] =
Arbitrary(implicitly[Arbitrary[NonEmptyList[A]]].arbitrary.map(nel => new ZipNonEmptyList(nel)))
@@ -98,29 +100,31 @@ object arbitrary extends ArbitraryInstances0 {
a <- A.arbitrary
} yield NonEmptyMap((k, a), fa))
- implicit def cogenNonEmptyMap[K: Order : Cogen, A: Order : Cogen]: Cogen[NonEmptyMap[K, A]] =
+ implicit def cogenNonEmptyMap[K: Order: Cogen, A: Order: Cogen]: Cogen[NonEmptyMap[K, A]] =
Cogen[SortedMap[K, A]].contramap(_.toSortedMap)
- implicit def catsLawsArbitraryForEitherT[F[_], A, B](implicit F: Arbitrary[F[Either[A, B]]]): Arbitrary[EitherT[F, A, B]] =
+ implicit def catsLawsArbitraryForEitherT[F[_], A, B](
+ implicit F: Arbitrary[F[Either[A, B]]]
+ ): Arbitrary[EitherT[F, A, B]] =
Arbitrary(F.arbitrary.map(EitherT(_)))
implicit def catsLawsCogenForEitherT[F[_], A, B](implicit F: Cogen[F[Either[A, B]]]): Cogen[EitherT[F, A, B]] =
F.contramap(_.value)
- implicit def catsLawsArbitraryForValidated[A, B](implicit A: Arbitrary[A], B: Arbitrary[B]): Arbitrary[Validated[A, B]] =
+ implicit def catsLawsArbitraryForValidated[A, B](implicit A: Arbitrary[A],
+ B: Arbitrary[B]): Arbitrary[Validated[A, B]] =
Arbitrary(Gen.oneOf(A.arbitrary.map(Validated.invalid), B.arbitrary.map(Validated.valid)))
implicit def catsLawsCogenForValidated[A, B](implicit A: Cogen[A], B: Cogen[B]): Cogen[Validated[A, B]] =
Cogen((seed, x) => x.fold(A.perturb(seed, _), B.perturb(seed, _)))
implicit def catsLawsArbitraryForIor[A, B](implicit A: Arbitrary[A], B: Arbitrary[B]): Arbitrary[A Ior B] =
- Arbitrary(Gen.oneOf(A.arbitrary.map(Ior.left), B.arbitrary.map(Ior.right), for { a <- A.arbitrary; b <- B.arbitrary } yield Ior.both(a, b)))
+ Arbitrary(Gen.oneOf(A.arbitrary.map(Ior.left), B.arbitrary.map(Ior.right), for {
+ a <- A.arbitrary; b <- B.arbitrary
+ } yield Ior.both(a, b)))
implicit def catsLawsCogenForIor[A, B](implicit A: Cogen[A], B: Cogen[B]): Cogen[A Ior B] =
- Cogen((seed, x) => x.fold(
- A.perturb(seed, _),
- B.perturb(seed, _),
- (a, b) => A.perturb(B.perturb(seed, b), a)))
+ Cogen((seed, x) => x.fold(A.perturb(seed, _), B.perturb(seed, _), (a, b) => A.perturb(B.perturb(seed, b), a)))
implicit def catsLawsArbitraryForIorT[F[_], A, B](implicit F: Arbitrary[F[Ior[A, B]]]): Arbitrary[IorT[F, A, B]] =
Arbitrary(F.arbitrary.map(IorT(_)))
@@ -141,39 +145,48 @@ object arbitrary extends ArbitraryInstances0 {
F.contramap(_.value)
implicit def catsLawsArbitraryForEval[A: Arbitrary]: Arbitrary[Eval[A]] =
- Arbitrary(Gen.oneOf(
- getArbitrary[A].map(a => Eval.now(a)),
- getArbitrary[() => A].map(f => Eval.later(f())),
- getArbitrary[() => A].map(f => Eval.always(f()))))
+ Arbitrary(
+ Gen.oneOf(getArbitrary[A].map(a => Eval.now(a)),
+ getArbitrary[() => A].map(f => Eval.later(f())),
+ getArbitrary[() => A].map(f => Eval.always(f())))
+ )
implicit def catsLawsCogenForEval[A: Cogen]: Cogen[Eval[A]] =
Cogen[A].contramap(_.value)
- implicit def catsLawsArbitraryForTuple2K[F[_], G[_], A](implicit F: Arbitrary[F[A]], G: Arbitrary[G[A]]): Arbitrary[Tuple2K[F, G, A]] =
+ implicit def catsLawsArbitraryForTuple2K[F[_], G[_], A](implicit F: Arbitrary[F[A]],
+ G: Arbitrary[G[A]]): Arbitrary[Tuple2K[F, G, A]] =
Arbitrary(F.arbitrary.flatMap(fa => G.arbitrary.map(ga => Tuple2K[F, G, A](fa, ga))))
- implicit def catsLawsArbitraryForFunc[F[_], A, B](implicit AA: Arbitrary[A], CA: Cogen[A], F: Arbitrary[F[B]]): Arbitrary[Func[F, A, B]] =
+ implicit def catsLawsArbitraryForFunc[F[_], A, B](implicit AA: Arbitrary[A],
+ CA: Cogen[A],
+ F: Arbitrary[F[B]]): Arbitrary[Func[F, A, B]] =
Arbitrary(Arbitrary.arbitrary[A => F[B]].map(Func.func))
- implicit def catsLawsArbitraryForAppFunc[F[_], A, B](implicit AA: Arbitrary[A], CA: Cogen[A], F: Arbitrary[F[B]], FF: Applicative[F]): Arbitrary[AppFunc[F, A, B]] =
+ implicit def catsLawsArbitraryForAppFunc[F[_], A, B](implicit AA: Arbitrary[A],
+ CA: Cogen[A],
+ F: Arbitrary[F[B]],
+ FF: Applicative[F]): Arbitrary[AppFunc[F, A, B]] =
Arbitrary(Arbitrary.arbitrary[A => F[B]].map(Func.appFunc(_)))
- implicit def catsLawsArbitraryForWriter[L:Arbitrary, V:Arbitrary]: Arbitrary[Writer[L, V]] =
+ implicit def catsLawsArbitraryForWriter[L: Arbitrary, V: Arbitrary]: Arbitrary[Writer[L, V]] =
catsLawsArbitraryForWriterT[Id, L, V]
implicit def catsLawsCogenForWriter[L: Cogen, V: Cogen]: Cogen[Writer[L, V]] =
Cogen[(L, V)].contramap(_.run)
// until this is provided by scalacheck
- implicit def catsLawsArbitraryForPartialFunction[A, B](implicit F: Arbitrary[A => Option[B]]): Arbitrary[PartialFunction[A, B]] =
+ implicit def catsLawsArbitraryForPartialFunction[A, B](
+ implicit F: Arbitrary[A => Option[B]]
+ ): Arbitrary[PartialFunction[A, B]] =
Arbitrary(F.arbitrary.map(Function.unlift))
- implicit def catsLawsArbitraryForEitherK[F[_], G[_], A](implicit F: Arbitrary[F[A]], G: Arbitrary[G[A]]): Arbitrary[EitherK[F, G, A]] =
- Arbitrary(Gen.oneOf(
- F.arbitrary.map(EitherK.leftc[F, G, A]),
- G.arbitrary.map(EitherK.rightc[F, G, A])))
+ implicit def catsLawsArbitraryForEitherK[F[_], G[_], A](implicit F: Arbitrary[F[A]],
+ G: Arbitrary[G[A]]): Arbitrary[EitherK[F, G, A]] =
+ Arbitrary(Gen.oneOf(F.arbitrary.map(EitherK.leftc[F, G, A]), G.arbitrary.map(EitherK.rightc[F, G, A])))
- implicit def catsLawsCogenForEitherK[F[_], G[_], A](implicit F: Cogen[F[A]], G: Cogen[G[A]]): Cogen[EitherK[F, G, A]] =
+ implicit def catsLawsCogenForEitherK[F[_], G[_], A](implicit F: Cogen[F[A]],
+ G: Cogen[G[A]]): Cogen[EitherK[F, G, A]] =
Cogen((seed, x) => x.run.fold(F.perturb(seed, _), G.perturb(seed, _)))
implicit def catLawsCogenForTuple2K[F[_], G[_], A](implicit F: Cogen[F[A]], G: Cogen[G[A]]): Cogen[Tuple2K[F, G, A]] =
@@ -190,26 +203,41 @@ object arbitrary extends ArbitraryInstances0 {
// implies equal, in order to avoid producing invalid instances.
implicit def catsLawsArbitraryForEq[A: Arbitrary]: Arbitrary[Eq[A]] =
- Arbitrary(getArbitrary[Int => Int].map(f => new Eq[A] {
- def eqv(x: A, y: A): Boolean = f(x.##) == f(y.##)
- }))
+ Arbitrary(
+ getArbitrary[Int => Int].map(
+ f =>
+ new Eq[A] {
+ def eqv(x: A, y: A): Boolean = f(x.##) == f(y.##)
+ }
+ )
+ )
implicit def catsLawsArbitraryForEquiv[A: Arbitrary]: Arbitrary[Equiv[A]] =
Arbitrary(getArbitrary[Eq[A]].map(Eq.catsKernelEquivForEq(_)))
implicit def catsLawsArbitraryForPartialOrder[A: Arbitrary]: Arbitrary[PartialOrder[A]] =
- Arbitrary(getArbitrary[Int => Double].map(f => new PartialOrder[A] {
- def partialCompare(x: A, y: A): Double =
- if (x.## == y.##) 0.0 else f(x.##) - f(y.##)
- }))
+ Arbitrary(
+ getArbitrary[Int => Double].map(
+ f =>
+ new PartialOrder[A] {
+ def partialCompare(x: A, y: A): Double =
+ if (x.## == y.##) 0.0 else f(x.##) - f(y.##)
+ }
+ )
+ )
implicit def catsLawsArbitraryForPartialOrdering[A: Arbitrary]: Arbitrary[PartialOrdering[A]] =
Arbitrary(getArbitrary[PartialOrder[A]].map(PartialOrder.catsKernelPartialOrderingForPartialOrder(_)))
implicit def catsLawsArbitraryForOrder[A: Arbitrary]: Arbitrary[Order[A]] =
- Arbitrary(getArbitrary[Int => Int].map(f => new Order[A] {
- def compare(x: A, y: A): Int = java.lang.Integer.compare(f(x.##), f(y.##))
- }))
+ Arbitrary(
+ getArbitrary[Int => Int].map(
+ f =>
+ new Order[A] {
+ def compare(x: A, y: A): Int = java.lang.Integer.compare(f(x.##), f(y.##))
+ }
+ )
+ )
implicit def catsLawsArbitraryForSortedMap[K: Arbitrary: Order, V: Arbitrary]: Arbitrary[SortedMap[K, V]] =
Arbitrary(getArbitrary[Map[K, V]].map(s => SortedMap.empty[K, V](implicitly[Order[K]].toOrdering) ++ s))
@@ -239,7 +267,9 @@ object arbitrary extends ArbitraryInstances0 {
implicit def catsLawsArbitraryForNested[F[_], G[_], A](implicit FG: Arbitrary[F[G[A]]]): Arbitrary[Nested[F, G, A]] =
Arbitrary(FG.arbitrary.map(Nested(_)))
- implicit def catsLawsArbitraryForBinested[F[_, _], G[_], H[_], A, B](implicit F: Arbitrary[F[G[A], H[B]]]): Arbitrary[Binested[F, G, H, A, B]] =
+ implicit def catsLawsArbitraryForBinested[F[_, _], G[_], H[_], A, B](
+ implicit F: Arbitrary[F[G[A], H[B]]]
+ ): Arbitrary[Binested[F, G, H, A, B]] =
Arbitrary(F.arbitrary.map(Binested(_)))
implicit def catsLawArbitraryForState[S: Arbitrary: Cogen, A: Arbitrary]: Arbitrary[State[S, A]] =
@@ -257,16 +287,18 @@ object arbitrary extends ArbitraryInstances0 {
implicit def catsLawsCogenForOp[Arr[_, _], A, B](implicit Arr: Cogen[Arr[B, A]]): Cogen[Op[Arr, A, B]] =
Arr.contramap(_.run)
- implicit def catsLawsArbitraryForIRWST[F[_]: Applicative, E, L, SA, SB, A](implicit
- F: Arbitrary[(E, SA) => F[(L, SB, A)]]): Arbitrary[IndexedReaderWriterStateT[F, E, L, SA, SB, A]] =
+ implicit def catsLawsArbitraryForIRWST[F[_]: Applicative, E, L, SA, SB, A](
+ implicit
+ F: Arbitrary[(E, SA) => F[(L, SB, A)]]
+ ): Arbitrary[IndexedReaderWriterStateT[F, E, L, SA, SB, A]] =
Arbitrary(F.arbitrary.map(IndexedReaderWriterStateT(_)))
-
- implicit def catsLawsArbitraryForRepresentableStore[F[_], S, A](implicit
+ implicit def catsLawsArbitraryForRepresentableStore[F[_], S, A](
+ implicit
R: Representable.Aux[F, S],
ArbS: Arbitrary[S],
ArbFA: Arbitrary[F[A]]
- ): Arbitrary[RepresentableStore[F, S, A]] = {
+ ): Arbitrary[RepresentableStore[F, S, A]] =
Arbitrary {
for {
fa <- ArbFA.arbitrary
@@ -275,11 +307,11 @@ object arbitrary extends ArbitraryInstances0 {
RepresentableStore[F, S, A](fa, s)
}
}
- }
- implicit def catsLawsCogenForRepresentableStore[F[_]: Representable, S, A](implicit CA: Cogen[A]): Cogen[RepresentableStore[F, S, A]] = {
+ implicit def catsLawsCogenForRepresentableStore[F[_]: Representable, S, A](
+ implicit CA: Cogen[A]
+ ): Cogen[RepresentableStore[F, S, A]] =
CA.contramap(_.extract)
- }
implicit def catsLawsArbitraryForAndThen[A, B](implicit F: Arbitrary[A => B]): Arbitrary[AndThen[A, B]] =
Arbitrary(F.arbitrary.map(AndThen(_)))
@@ -299,7 +331,7 @@ object arbitrary extends ArbitraryInstances0 {
case n =>
// Here we concat two chains
for {
- n0 <- Gen.choose(1, n-1)
+ n0 <- Gen.choose(1, n - 1)
n1 = n - n0
left <- genSize(n0)
right <- genSize(n1)
@@ -319,9 +351,11 @@ object arbitrary extends ArbitraryInstances0 {
}
-private[discipline] sealed trait ArbitraryInstances0 {
+sealed private[discipline] trait ArbitraryInstances0 {
- implicit def catsLawArbitraryForIndexedStateT[F[_], SA, SB, A](implicit F: Arbitrary[F[SA => F[(SB, A)]]]): Arbitrary[IndexedStateT[F, SA, SB, A]] =
+ implicit def catsLawArbitraryForIndexedStateT[F[_], SA, SB, A](
+ implicit F: Arbitrary[F[SA => F[(SB, A)]]]
+ ): Arbitrary[IndexedStateT[F, SA, SB, A]] =
Arbitrary(F.arbitrary.map(IndexedStateT.applyF))
implicit def catsLawsArbitraryForWriterT[F[_], L, V](implicit F: Arbitrary[F[(L, V)]]): Arbitrary[WriterT[F, L, V]] =
@@ -330,9 +364,13 @@ private[discipline] sealed trait ArbitraryInstances0 {
implicit def catsLawsCogenForWriterT[F[_], L, V](implicit F: Cogen[F[(L, V)]]): Cogen[WriterT[F, L, V]] =
F.contramap(_.run)
- implicit def catsLawsArbitraryForKleisli[F[_], A, B](implicit AA: Arbitrary[A], CA: Cogen[A], F: Arbitrary[F[B]]): Arbitrary[Kleisli[F, A, B]] =
+ implicit def catsLawsArbitraryForKleisli[F[_], A, B](implicit AA: Arbitrary[A],
+ CA: Cogen[A],
+ F: Arbitrary[F[B]]): Arbitrary[Kleisli[F, A, B]] =
Arbitrary(Arbitrary.arbitrary[A => F[B]].map(Kleisli(_)))
- implicit def catsLawsArbitraryForCokleisli[F[_], A, B](implicit AFA: Arbitrary[F[A]], CFA: Cogen[F[A]], B: Arbitrary[B]): Arbitrary[Cokleisli[F, A, B]] =
+ implicit def catsLawsArbitraryForCokleisli[F[_], A, B](implicit AFA: Arbitrary[F[A]],
+ CFA: Cogen[F[A]],
+ B: Arbitrary[B]): Arbitrary[Cokleisli[F, A, B]] =
Arbitrary(Arbitrary.arbitrary[F[A] => B].map(Cokleisli(_)))
}
diff --git a/laws/src/main/scala/cats/laws/discipline/ArrowChoiceTests.scala b/laws/src/main/scala/cats/laws/discipline/ArrowChoiceTests.scala
index 8a2c61f181..234ef9889a 100644
--- a/laws/src/main/scala/cats/laws/discipline/ArrowChoiceTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ArrowChoiceTests.scala
@@ -10,7 +10,8 @@ import Prop._
trait ArrowChoiceTests[F[_, _]] extends ArrowTests[F] with ChoiceTests[F] {
def laws: ArrowChoiceLaws[F]
- def arrowChoice[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](implicit
+ def arrowChoice[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](
+ implicit
ArbFAB: Arbitrary[F[A, B]],
ArbFBC: Arbitrary[F[B, C]],
ArbFAC: Arbitrary[F[A, C]],
diff --git a/laws/src/main/scala/cats/laws/discipline/ArrowTests.scala b/laws/src/main/scala/cats/laws/discipline/ArrowTests.scala
index 0f215cc706..26db8bac4b 100644
--- a/laws/src/main/scala/cats/laws/discipline/ArrowTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ArrowTests.scala
@@ -9,7 +9,8 @@ import Prop._
trait ArrowTests[F[_, _]] extends CategoryTests[F] with StrongTests[F] {
def laws: ArrowLaws[F]
- def arrow[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](implicit
+ def arrow[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](
+ implicit
ArbFAB: Arbitrary[F[A, B]],
ArbFBC: Arbitrary[F[B, C]],
ArbFAC: Arbitrary[F[A, C]],
diff --git a/laws/src/main/scala/cats/laws/discipline/BifoldableTests.scala b/laws/src/main/scala/cats/laws/discipline/BifoldableTests.scala
index 2e391109f1..c53e83db48 100644
--- a/laws/src/main/scala/cats/laws/discipline/BifoldableTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/BifoldableTests.scala
@@ -10,10 +10,9 @@ trait BifoldableTests[F[_, _]] extends Laws {
def laws: BifoldableLaws[F]
def bifoldable[A: Arbitrary, B: Arbitrary, C: Arbitrary: Monoid: Eq](implicit
- ArbFAB: Arbitrary[F[A, B]],
- CogenA: Cogen[A],
- CogenB: Cogen[B]
- ): RuleSet =
+ ArbFAB: Arbitrary[F[A, B]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B]): RuleSet =
new DefaultRuleSet(
name = "bifoldable",
parent = None,
diff --git a/laws/src/main/scala/cats/laws/discipline/BifunctorTests.scala b/laws/src/main/scala/cats/laws/discipline/BifunctorTests.scala
index 58b8bd4f8b..a8f5c35119 100644
--- a/laws/src/main/scala/cats/laws/discipline/BifunctorTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/BifunctorTests.scala
@@ -10,16 +10,15 @@ trait BifunctorTests[F[_, _]] extends Laws {
def laws: BifunctorLaws[F]
def bifunctor[A, A2, A3, B, B2, B3](implicit
- ArbFAB: Arbitrary[F[A, B]],
- ArbA2: Arbitrary[A => A2],
- ArbA3: Arbitrary[A2 => A3],
- ArbB2: Arbitrary[B => B2],
- ArbB3: Arbitrary[B2 => B3],
- EqFAB: Eq[F[A, B]],
- EqFCZ: Eq[F[A3, B3]],
- EqFA3B: Eq[F[A3, B]],
- EqFAB3: Eq[F[A, B3]]
- ): RuleSet = {
+ ArbFAB: Arbitrary[F[A, B]],
+ ArbA2: Arbitrary[A => A2],
+ ArbA3: Arbitrary[A2 => A3],
+ ArbB2: Arbitrary[B => B2],
+ ArbB3: Arbitrary[B2 => B3],
+ EqFAB: Eq[F[A, B]],
+ EqFCZ: Eq[F[A3, B3]],
+ EqFA3B: Eq[F[A3, B]],
+ EqFAB3: Eq[F[A, B3]]): RuleSet =
new DefaultRuleSet(
name = "Bifunctor",
parent = None,
@@ -28,11 +27,10 @@ trait BifunctorTests[F[_, _]] extends Laws {
"Bifunctor leftMap Identity" -> forAll(laws.bifunctorLeftMapIdentity[A, B] _),
"Bifunctor leftMap associativity" -> forAll(laws.bifunctorLeftMapComposition[A, B, A2, A3] _)
)
- }
}
object BifunctorTests {
- def apply[F[_, _] : Bifunctor]: BifunctorTests[F] =
+ def apply[F[_, _]: Bifunctor]: BifunctorTests[F] =
new BifunctorTests[F] {
def laws: BifunctorLaws[F] = BifunctorLaws[F]
}
diff --git a/laws/src/main/scala/cats/laws/discipline/BimonadTests.scala b/laws/src/main/scala/cats/laws/discipline/BimonadTests.scala
index a8f3dd21fc..85e6713b3d 100644
--- a/laws/src/main/scala/cats/laws/discipline/BimonadTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/BimonadTests.scala
@@ -10,26 +10,25 @@ trait BimonadTests[F[_]] extends MonadTests[F] with ComonadTests[F] {
def laws: BimonadLaws[F]
def bimonad[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFFA: Arbitrary[F[F[A]]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- CogenFA: Cogen[F[A]],
- CogenFB: Cogen[F[B]],
- EqFFFA: Eq[F[F[A]]],
- EqFFA: Eq[F[F[F[A]]]],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFFA: Arbitrary[F[F[A]]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ CogenFA: Cogen[F[A]],
+ CogenFB: Cogen[F[B]],
+ EqFFFA: Eq[F[F[A]]],
+ EqFFA: Eq[F[F[F[A]]]],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "bimonad"
def bases: Seq[(String, RuleSet)] = Nil
@@ -40,7 +39,6 @@ trait BimonadTests[F[_]] extends MonadTests[F] with ComonadTests[F] {
"pure/coflatMap entwining" -> forAll(laws.pureCoflatMapEntwining[A] _)
)
}
- }
}
object BimonadTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/BitraverseTests.scala b/laws/src/main/scala/cats/laws/discipline/BitraverseTests.scala
index 706077f7a9..a8083298d2 100644
--- a/laws/src/main/scala/cats/laws/discipline/BitraverseTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/BitraverseTests.scala
@@ -9,32 +9,31 @@ trait BitraverseTests[F[_, _]] extends BifoldableTests[F] with BifunctorTests[F]
def laws: BitraverseLaws[F]
def bitraverse[G[_], A, B, C, D, E, H](implicit
- G: Applicative[G],
- C: Monoid[C],
- ArbFAB: Arbitrary[F[A, B]],
- ArbFAD: Arbitrary[F[A, D]],
- ArbGC: Arbitrary[G[C]],
- ArbGD: Arbitrary[G[D]],
- ArbGE: Arbitrary[G[E]],
- ArbGH: Arbitrary[G[H]],
- ArbA: Arbitrary[A],
- ArbB: Arbitrary[B],
- ArbC: Arbitrary[C],
- ArbE: Arbitrary[E],
- ArbH: Arbitrary[H],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- CogenD: Cogen[D],
- CogenE: Cogen[E],
- EqFAB: Eq[F[A, B]],
- EqFAD: Eq[F[A, D]],
- EqFAH: Eq[F[A, H]],
- EqFCD: Eq[F[C, D]],
- EqFCH: Eq[F[C, H]],
- EqGGFEH: Eq[G[G[F[E, H]]]],
- EqC: Eq[C]
- ): RuleSet =
+ G: Applicative[G],
+ C: Monoid[C],
+ ArbFAB: Arbitrary[F[A, B]],
+ ArbFAD: Arbitrary[F[A, D]],
+ ArbGC: Arbitrary[G[C]],
+ ArbGD: Arbitrary[G[D]],
+ ArbGE: Arbitrary[G[E]],
+ ArbGH: Arbitrary[G[H]],
+ ArbA: Arbitrary[A],
+ ArbB: Arbitrary[B],
+ ArbC: Arbitrary[C],
+ ArbE: Arbitrary[E],
+ ArbH: Arbitrary[H],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ CogenD: Cogen[D],
+ CogenE: Cogen[E],
+ EqFAB: Eq[F[A, B]],
+ EqFAD: Eq[F[A, D]],
+ EqFAH: Eq[F[A, H]],
+ EqFCD: Eq[F[C, D]],
+ EqFCH: Eq[F[C, H]],
+ EqGGFEH: Eq[G[G[F[E, H]]]],
+ EqC: Eq[C]): RuleSet =
new RuleSet {
val name = "bitraverse"
val parents = Seq(bifoldable[A, B, C], bifunctor[A, B, C, D, E, H])
diff --git a/laws/src/main/scala/cats/laws/discipline/CategoryTests.scala b/laws/src/main/scala/cats/laws/discipline/CategoryTests.scala
index bf397fea1a..013420d3dc 100644
--- a/laws/src/main/scala/cats/laws/discipline/CategoryTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CategoryTests.scala
@@ -11,17 +11,17 @@ trait CategoryTests[F[_, _]] extends ComposeTests[F] {
def laws: CategoryLaws[F]
def category[A, B, C, D](implicit
- ArbFAB: Arbitrary[F[A, B]],
- ArbFBC: Arbitrary[F[B, C]],
- ArbFCD: Arbitrary[F[C, D]],
- EqFAB: Eq[F[A, B]],
- EqFAD: Eq[F[A, D]]
- ): RuleSet =
+ ArbFAB: Arbitrary[F[A, B]],
+ ArbFBC: Arbitrary[F[B, C]],
+ ArbFCD: Arbitrary[F[C, D]],
+ EqFAB: Eq[F[A, B]],
+ EqFAD: Eq[F[A, D]]): RuleSet =
new DefaultRuleSet(
name = "category",
parent = Some(compose[A, B, C, D]),
"category left identity" -> forAll(laws.categoryLeftIdentity[A, B] _),
- "category right identity" -> forAll(laws.categoryRightIdentity[A, B] _))
+ "category right identity" -> forAll(laws.categoryRightIdentity[A, B] _)
+ )
}
object CategoryTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ChoiceTests.scala b/laws/src/main/scala/cats/laws/discipline/ChoiceTests.scala
index 0244679d67..97f0ebcc26 100644
--- a/laws/src/main/scala/cats/laws/discipline/ChoiceTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ChoiceTests.scala
@@ -10,18 +10,18 @@ trait ChoiceTests[F[_, _]] extends CategoryTests[F] {
def laws: ChoiceLaws[F]
def choice[A, B, C, D](implicit
- ArbFAB: Arbitrary[F[A, B]],
- ArbFAC: Arbitrary[F[A, C]],
- ArbFBC: Arbitrary[F[B, C]],
- ArbFCD: Arbitrary[F[C, D]],
- EqFAB: Eq[F[A, B]],
- EqFAD: Eq[F[A, D]],
- EqFEitherABD: Eq[F[Either[A, B], D]]
- ): RuleSet =
+ ArbFAB: Arbitrary[F[A, B]],
+ ArbFAC: Arbitrary[F[A, C]],
+ ArbFBC: Arbitrary[F[B, C]],
+ ArbFCD: Arbitrary[F[C, D]],
+ EqFAB: Eq[F[A, B]],
+ EqFAD: Eq[F[A, D]],
+ EqFEitherABD: Eq[F[Either[A, B], D]]): RuleSet =
new DefaultRuleSet(
name = "choice",
parent = Some(category[A, B, C, D]),
- "choice composition distributivity" -> forAll(laws.choiceCompositionDistributivity[A, B, C, D] _))
+ "choice composition distributivity" -> forAll(laws.choiceCompositionDistributivity[A, B, C, D] _)
+ )
}
object ChoiceTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/CoflatMapTests.scala b/laws/src/main/scala/cats/laws/discipline/CoflatMapTests.scala
index 91b05182cb..e9f067fe47 100644
--- a/laws/src/main/scala/cats/laws/discipline/CoflatMapTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CoflatMapTests.scala
@@ -10,18 +10,17 @@ trait CoflatMapTests[F[_]] extends Laws with FunctorTests[F] {
def laws: CoflatMapLaws[F]
def coflatMap[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- CogenFA: Cogen[F[A]],
- CogenFB: Cogen[F[B]],
- EqFA: Eq[F[A]],
- EqFC: Eq[F[C]],
- EqFFA: Eq[F[F[A]]],
- EqFB: Eq[F[B]],
- EqFFFA: Eq[F[F[F[A]]]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ CogenFA: Cogen[F[A]],
+ CogenFB: Cogen[F[B]],
+ EqFA: Eq[F[A]],
+ EqFC: Eq[F[C]],
+ EqFFA: Eq[F[F[A]]],
+ EqFB: Eq[F[B]],
+ EqFFFA: Eq[F[F[F[A]]]]): RuleSet =
new DefaultRuleSet(
name = "coflatMap",
parent = Some(functor[A, B, C]),
@@ -30,7 +29,6 @@ trait CoflatMapTests[F[_]] extends Laws with FunctorTests[F] {
"coflatten coherence" -> forAll(laws.coflattenCoherence[A, B] _),
"coflatten throughMap" -> forAll(laws.coflattenThroughMap[A] _)
)
- }
}
object CoflatMapTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/CommutativeApplicativeTests.scala b/laws/src/main/scala/cats/laws/discipline/CommutativeApplicativeTests.scala
index 8c6cc54f2c..0f453416a6 100644
--- a/laws/src/main/scala/cats/laws/discipline/CommutativeApplicativeTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CommutativeApplicativeTests.scala
@@ -10,32 +10,30 @@ trait CommutativeApplicativeTests[F[_]] extends CommutativeApplyTests[F] with Ap
def laws: CommutativeApplicativeLaws[F]
def commutativeApplicative[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "commutative applicative"
def bases: Seq[(String, RuleSet)] = Nil
def parents: Seq[RuleSet] = Seq(applicative[A, B, C], commutativeApply[A, B, C])
def props: Seq[(String, Prop)] = Nil
}
- }
}
object CommutativeApplicativeTests {
- def apply[F[_]: CommutativeApplicative]: CommutativeApplicativeTests[F] =
+ def apply[F[_]: CommutativeApplicative]: CommutativeApplicativeTests[F] =
new CommutativeApplicativeTests[F] {
def laws: CommutativeApplicativeLaws[F] = CommutativeApplicativeLaws[F]
}
diff --git a/laws/src/main/scala/cats/laws/discipline/CommutativeApplyTests.scala b/laws/src/main/scala/cats/laws/discipline/CommutativeApplyTests.scala
index aec569c1ee..9daa9fd309 100644
--- a/laws/src/main/scala/cats/laws/discipline/CommutativeApplyTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CommutativeApplyTests.scala
@@ -10,21 +10,20 @@ trait CommutativeApplyTests[F[_]] extends ApplyTests[F] {
def laws: CommutativeApplyLaws[F]
def commutativeApply[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "commutative apply"
def bases: Seq[(String, RuleSet)] = Nil
@@ -33,12 +32,11 @@ trait CommutativeApplyTests[F[_]] extends ApplyTests[F] {
"apply commutativity" -> forAll(laws.applyCommutative[A, B, C] _)
)
}
- }
}
object CommutativeApplyTests {
- def apply[F[_]: CommutativeApply]: CommutativeApplyTests[F] =
+ def apply[F[_]: CommutativeApply]: CommutativeApplyTests[F] =
new CommutativeApplyTests[F] {
def laws: CommutativeApplyLaws[F] = CommutativeApplyLaws[F]
}
diff --git a/laws/src/main/scala/cats/laws/discipline/CommutativeArrowTests.scala b/laws/src/main/scala/cats/laws/discipline/CommutativeArrowTests.scala
index 044af01a25..0185d7ff8b 100644
--- a/laws/src/main/scala/cats/laws/discipline/CommutativeArrowTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CommutativeArrowTests.scala
@@ -9,7 +9,8 @@ import Prop._
trait CommutativeArrowTests[F[_, _]] extends ArrowTests[F] {
def laws: CommutativeArrowLaws[F]
- def commutativeArrow[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](implicit
+ def commutativeArrow[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](
+ implicit
ArbFAB: Arbitrary[F[A, B]],
ArbFAC: Arbitrary[F[A, C]],
ArbFBC: Arbitrary[F[B, C]],
@@ -36,10 +37,9 @@ trait CommutativeArrowTests[F[_, _]] extends ArrowTests[F] {
EqFEAED: Eq[F[(E, A), (E, D)]],
EqFACDBCD: Eq[F[((A, C), D), (B, (C, D))]]
): RuleSet =
- new DefaultRuleSet(
- name = "commutative arrow",
- parent = Some(arrow[A, B, C, D, E, G]),
- "arrow commutativity" -> forAll(laws.arrowCommutative[A, B, C, D] _))
+ new DefaultRuleSet(name = "commutative arrow",
+ parent = Some(arrow[A, B, C, D, E, G]),
+ "arrow commutativity" -> forAll(laws.arrowCommutative[A, B, C, D] _))
}
object CommutativeArrowTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/CommutativeFlatMapTests.scala b/laws/src/main/scala/cats/laws/discipline/CommutativeFlatMapTests.scala
index 028b00efa3..15a763b1ae 100644
--- a/laws/src/main/scala/cats/laws/discipline/CommutativeFlatMapTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CommutativeFlatMapTests.scala
@@ -10,21 +10,20 @@ trait CommutativeFlatMapTests[F[_]] extends FlatMapTests[F] with CommutativeAppl
def laws: CommutativeFlatMapLaws[F]
def commutativeFlatMap[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "commutative flatMap"
def bases: Seq[(String, RuleSet)] = Nil
@@ -33,12 +32,11 @@ trait CommutativeFlatMapTests[F[_]] extends FlatMapTests[F] with CommutativeAppl
"flatmap commutativity" -> forAll(laws.flatmapCommutative[A, B, C] _)
)
}
- }
}
object CommutativeFlatMapTests {
- def apply[F[_]: CommutativeFlatMap]: CommutativeFlatMapTests[F] =
+ def apply[F[_]: CommutativeFlatMap]: CommutativeFlatMapTests[F] =
new CommutativeFlatMapTests[F] {
def laws: CommutativeFlatMapLaws[F] = CommutativeFlatMapLaws[F]
}
diff --git a/laws/src/main/scala/cats/laws/discipline/CommutativeMonadTests.scala b/laws/src/main/scala/cats/laws/discipline/CommutativeMonadTests.scala
index e654691470..3ae9a5c694 100644
--- a/laws/src/main/scala/cats/laws/discipline/CommutativeMonadTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/CommutativeMonadTests.scala
@@ -5,37 +5,38 @@ package discipline
import cats.laws.discipline.SemigroupalTests.Isomorphisms
import org.scalacheck.{Arbitrary, Cogen, Prop}
-trait CommutativeMonadTests[F[_]] extends MonadTests[F] with CommutativeFlatMapTests[F] with CommutativeApplicativeTests[F] {
+trait CommutativeMonadTests[F[_]]
+ extends MonadTests[F]
+ with CommutativeFlatMapTests[F]
+ with CommutativeApplicativeTests[F] {
def laws: CommutativeMonadLaws[F]
def commutativeMonad[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "commutative monad"
def bases: Seq[(String, RuleSet)] = Nil
def parents: Seq[RuleSet] = Seq(monad[A, B, C], commutativeFlatMap[A, B, C], commutativeApplicative[A, B, C])
def props: Seq[(String, Prop)] = Nil
}
- }
}
object CommutativeMonadTests {
- def apply[F[_]: CommutativeMonad]: CommutativeMonadTests[F] =
+ def apply[F[_]: CommutativeMonad]: CommutativeMonadTests[F] =
new CommutativeMonadTests[F] {
def laws: CommutativeMonadLaws[F] = CommutativeMonadLaws[F]
}
diff --git a/laws/src/main/scala/cats/laws/discipline/ComonadTests.scala b/laws/src/main/scala/cats/laws/discipline/ComonadTests.scala
index d3b5aa405c..9fa4c9b2ab 100644
--- a/laws/src/main/scala/cats/laws/discipline/ComonadTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ComonadTests.scala
@@ -10,33 +10,29 @@ trait ComonadTests[F[_]] extends CoflatMapTests[F] {
def laws: ComonadLaws[F]
def comonad[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- CogenFA: Cogen[F[A]],
- CogenFB: Cogen[F[B]],
- EqFA: Eq[F[A]],
- EqFFA: Eq[F[F[A]]],
- EqFFFA: Eq[F[F[F[A]]]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ CogenFA: Cogen[F[A]],
+ CogenFB: Cogen[F[B]],
+ EqFA: Eq[F[A]],
+ EqFFA: Eq[F[F[A]]],
+ EqFFFA: Eq[F[F[F[A]]]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]]): RuleSet =
new DefaultRuleSet(
name = "comonad",
parent = Some(coflatMap[A, B, C]),
-
"extractCoflattenIdentity" -> forAll(laws.extractCoflattenIdentity[A] _),
"mapCoflattenIdentity" -> forAll(laws.mapCoflattenIdentity[A] _),
"coflattenThroughMap" -> forAll(laws.coflattenThroughMap[A] _),
-
"coflattenCoherence" -> forAll(laws.coflattenCoherence[A, B] _),
"coflatMapIdentity" -> forAll(laws.coflatMapIdentity[A, B] _),
"mapCoflatMapCoherence" -> forAll(laws.mapCoflatMapCoherence[A, B] _),
-
"comonad left identity" -> forAll(laws.comonadLeftIdentity[A] _),
- "comonad right identity" -> forAll(laws.comonadRightIdentity[A, B] _))
- }
+ "comonad right identity" -> forAll(laws.comonadRightIdentity[A, B] _)
+ )
}
object ComonadTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ComposeTests.scala b/laws/src/main/scala/cats/laws/discipline/ComposeTests.scala
index 13d14b3e4e..335f5dfd0a 100644
--- a/laws/src/main/scala/cats/laws/discipline/ComposeTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ComposeTests.scala
@@ -12,15 +12,13 @@ trait ComposeTests[F[_, _]] extends Laws {
def laws: ComposeLaws[F]
def compose[A, B, C, D](implicit
- ArbFAB: Arbitrary[F[A, B]],
- ArbFBC: Arbitrary[F[B, C]],
- ArbFCD: Arbitrary[F[C, D]],
- EqFAD: Eq[F[A, D]]
- ): RuleSet =
- new DefaultRuleSet(
- name = "compose",
- parent = None,
- "compose associativity" -> forAll(laws.composeAssociativity[A, B, C, D] _))
+ ArbFAB: Arbitrary[F[A, B]],
+ ArbFBC: Arbitrary[F[B, C]],
+ ArbFCD: Arbitrary[F[C, D]],
+ EqFAD: Eq[F[A, D]]): RuleSet =
+ new DefaultRuleSet(name = "compose",
+ parent = None,
+ "compose associativity" -> forAll(laws.composeAssociativity[A, B, C, D] _))
}
object ComposeTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ContravariantMonoidalTests.scala b/laws/src/main/scala/cats/laws/discipline/ContravariantMonoidalTests.scala
index 21b30dc860..bf5c9101c0 100644
--- a/laws/src/main/scala/cats/laws/discipline/ContravariantMonoidalTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ContravariantMonoidalTests.scala
@@ -11,34 +11,32 @@ trait ContravariantMonoidalTests[F[_]] extends ContravariantSemigroupalTests[F]
def laws: ContravariantMonoidalLaws[F]
def contravariantMonoidal[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- arbFA: Arbitrary[F[A]],
- arbFB: Arbitrary[F[B]],
- arbFC: Arbitrary[F[C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = {
- new RuleSet {
- val name = "contravariantMonoidal"
- val parents = Seq(contravariantSemigroupal[A, B, C])
- val bases = Seq.empty
- val props = Seq(
- "contravariantMonoidal right unit" ->
- forAll(laws.contravariantMonoidalUnitRight[A] _),
- "contravariantMonoidal left unit" ->
- forAll(laws.contravariantMonoidalUnitLeft[A] _),
- "contravariantMonoidal contramap2 compatible contramap left" ->
- forAll(laws.contravariantMonoidalContramap2CompatibleContramapLeft[A, B, C] _),
- "contravariantMonoidal contramap2 compatible contramap right" ->
- forAll(laws.contravariantMonoidalContramap2CompatibleContramapRight[A, B, C] _)
- )
- }
- }
+ arbFA: Arbitrary[F[A]],
+ arbFB: Arbitrary[F[B]],
+ arbFC: Arbitrary[F[C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet =
+ new RuleSet {
+ val name = "contravariantMonoidal"
+ val parents = Seq(contravariantSemigroupal[A, B, C])
+ val bases = Seq.empty
+ val props = Seq(
+ "contravariantMonoidal right unit" ->
+ forAll(laws.contravariantMonoidalUnitRight[A] _),
+ "contravariantMonoidal left unit" ->
+ forAll(laws.contravariantMonoidalUnitLeft[A] _),
+ "contravariantMonoidal contramap2 compatible contramap left" ->
+ forAll(laws.contravariantMonoidalContramap2CompatibleContramapLeft[A, B, C] _),
+ "contravariantMonoidal contramap2 compatible contramap right" ->
+ forAll(laws.contravariantMonoidalContramap2CompatibleContramapRight[A, B, C] _)
+ )
+ }
}
object ContravariantMonoidalTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ContravariantSemigroupalTests.scala b/laws/src/main/scala/cats/laws/discipline/ContravariantSemigroupalTests.scala
index 581fd34225..5394409591 100644
--- a/laws/src/main/scala/cats/laws/discipline/ContravariantSemigroupalTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ContravariantSemigroupalTests.scala
@@ -11,28 +11,26 @@ trait ContravariantSemigroupalTests[F[_]] extends ContravariantTests[F] with Sem
def laws: ContravariantSemigroupalLaws[F]
def contravariantSemigroupal[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- arbFA: Arbitrary[F[A]],
- arbFB: Arbitrary[F[B]],
- arbFC: Arbitrary[F[C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = {
- new RuleSet {
- val name = "contravariantSemigroupal"
- val parents = Seq(contravariant[A, B, C], semigroupal[A, B, C])
- val bases = Seq.empty
- val props = Seq(
- "contravariantSemigroupal contramap2 delta associates" ->
- forAll(laws.contravariantSemigroupalContramap2DiagonalAssociates[A] _)
- )
- }
- }
+ arbFA: Arbitrary[F[A]],
+ arbFB: Arbitrary[F[B]],
+ arbFC: Arbitrary[F[C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet =
+ new RuleSet {
+ val name = "contravariantSemigroupal"
+ val parents = Seq(contravariant[A, B, C], semigroupal[A, B, C])
+ val bases = Seq.empty
+ val props = Seq(
+ "contravariantSemigroupal contramap2 delta associates" ->
+ forAll(laws.contravariantSemigroupalContramap2DiagonalAssociates[A] _)
+ )
+ }
}
object ContravariantSemigroupalTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ContravariantTests.scala b/laws/src/main/scala/cats/laws/discipline/ContravariantTests.scala
index 2cb1c333df..35be0addc0 100644
--- a/laws/src/main/scala/cats/laws/discipline/ContravariantTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ContravariantTests.scala
@@ -10,19 +10,18 @@ trait ContravariantTests[F[_]] extends InvariantTests[F] {
def laws: ContravariantLaws[F]
def contravariant[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFC: Eq[F[C]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFC: Eq[F[C]]): RuleSet =
new DefaultRuleSet(
name = "contravariant",
parent = Some(invariant[A, B, C]),
"contravariant identity" -> forAll(laws.contravariantIdentity[A] _),
- "contravariant composition" -> forAll(laws.contravariantComposition[A, B, C] _))
- }
+ "contravariant composition" -> forAll(laws.contravariantComposition[A, B, C] _)
+ )
}
object ContravariantTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/DeferTests.scala b/laws/src/main/scala/cats/laws/discipline/DeferTests.scala
index 63e679e7ba..d90bf87193 100644
--- a/laws/src/main/scala/cats/laws/discipline/DeferTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/DeferTests.scala
@@ -10,17 +10,16 @@ trait DeferTests[F[_]] extends Laws {
def laws: DeferLaws[F]
def defer[A: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- EqFA: Eq[F[A]],
- EqBool: Eq[Boolean]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ EqFA: Eq[F[A]],
+ EqBool: Eq[Boolean]): RuleSet =
new DefaultRuleSet(
name = "defer",
parent = None,
"defer Identity" -> forAll(laws.deferIdentity[A] _),
"defer does not evaluate" -> forAll(laws.deferDoesNotEvaluate[A] _),
- "defer is stack safe" -> forAll(laws.deferIsStackSafe[A] _))
- }
+ "defer is stack safe" -> forAll(laws.deferIsStackSafe[A] _)
+ )
}
object DeferTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/DistributiveTests.scala b/laws/src/main/scala/cats/laws/discipline/DistributiveTests.scala
index c4a54479d8..5f7da0243f 100644
--- a/laws/src/main/scala/cats/laws/discipline/DistributiveTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/DistributiveTests.scala
@@ -8,7 +8,8 @@ import Prop._
trait DistributiveTests[F[_]] extends FunctorTests[F] {
def laws: DistributiveLaws[F]
- def distributive[A: Arbitrary, B: Arbitrary, C: Arbitrary, X[_]: Functor, Y[_]: Distributive](implicit
+ def distributive[A: Arbitrary, B: Arbitrary, C: Arbitrary, X[_]: Functor, Y[_]: Distributive](
+ implicit
ArbFA: Arbitrary[F[A]],
ArbFB: Arbitrary[F[B]],
ArbXA: Arbitrary[X[A]],
@@ -24,7 +25,7 @@ trait DistributiveTests[F[_]] extends FunctorTests[F] {
EqFYXC: Eq[F[Y[X[C]]]],
EqFYA: Eq[F[Y[A]]],
EqYFB: Eq[Y[F[B]]]
- ): RuleSet = {
+ ): RuleSet =
new RuleSet {
def name: String = "distributive"
def bases: Seq[(String, RuleSet)] = Nil
@@ -36,7 +37,6 @@ trait DistributiveTests[F[_]] extends FunctorTests[F] {
"distributive double cosequence identity" -> forAll(laws.cosequenceTwiceIsId[A, Y] _)
)
}
- }
}
object DistributiveTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/Eq.scala b/laws/src/main/scala/cats/laws/discipline/Eq.scala
index 6c7b7c6098..feb05bd692 100644
--- a/laws/src/main/scala/cats/laws/discipline/Eq.scala
+++ b/laws/src/main/scala/cats/laws/discipline/Eq.scala
@@ -24,11 +24,11 @@ object eq {
val sampleCnt: Int = if (Platform.isJvm) 50 else 30
def eqv(f: A => B, g: A => B): Boolean = {
- val samples = List.fill(sampleCnt)(A.arbitrary.sample).collect{
+ val samples = List.fill(sampleCnt)(A.arbitrary.sample).collect {
case Some(a) => a
- case None => sys.error("Could not generate arbitrary values to compare two functions")
+ case None => sys.error("Could not generate arbitrary values to compare two functions")
}
- samples.forall(s => B.eqv(f(s), g(s)) )
+ samples.forall(s => B.eqv(f(s), g(s)))
}
}
@@ -40,24 +40,24 @@ object eq {
* Create an approximation of Eq[(A, B) => C] by generating 100 values for A and B
* and comparing the application of the two functions.
*/
- implicit def catsLawsEqForFn2[A, B, C](implicit A: Arbitrary[A], B: Arbitrary[B], C: Eq[C]): Eq[(A, B) => C] = new Eq[(A, B) => C] {
- val sampleCnt: Int = if (Platform.isJvm) 50 else 5
-
- def eqv(f: (A, B) => C, g: (A, B) => C): Boolean = {
- val samples = List.fill(sampleCnt)((A.arbitrary.sample, B.arbitrary.sample)).collect{
- case (Some(a), Some(b)) => (a, b)
- case _ => sys.error("Could not generate arbitrary values to compare two functions")
+ implicit def catsLawsEqForFn2[A, B, C](implicit A: Arbitrary[A], B: Arbitrary[B], C: Eq[C]): Eq[(A, B) => C] =
+ new Eq[(A, B) => C] {
+ val sampleCnt: Int = if (Platform.isJvm) 50 else 5
+
+ def eqv(f: (A, B) => C, g: (A, B) => C): Boolean = {
+ val samples = List.fill(sampleCnt)((A.arbitrary.sample, B.arbitrary.sample)).collect {
+ case (Some(a), Some(b)) => (a, b)
+ case _ => sys.error("Could not generate arbitrary values to compare two functions")
+ }
+ samples.forall { case (a, b) => C.eqv(f(a, b), g(a, b)) }
}
- samples.forall { case (a, b) => C.eqv(f(a, b), g(a, b)) }
}
- }
/** Create an approximation of Eq[Show[A]] by using catsLawsEqForFn1[A, String] */
- implicit def catsLawsEqForShow[A: Arbitrary]: Eq[Show[A]] = {
- Eq.by[Show[A], A => String] { showInstance =>
- (a: A) => showInstance.show(a)
+ implicit def catsLawsEqForShow[A: Arbitrary]: Eq[Show[A]] =
+ Eq.by[Show[A], A => String] { showInstance => (a: A) =>
+ showInstance.show(a)
}
- }
/**
* Create an approximate Eq instance for some type A, by comparing
@@ -67,10 +67,13 @@ object eq {
new Eq[A] {
val gen = Arbitrary.arbitrary[B]
def eqv(x: A, y: A): Boolean =
- Iterator.range(1, samples)
+ Iterator
+ .range(1, samples)
.map(_ => gen.sample)
.map(_.getOrElse(sys.error(s"generator $gen failed")))
- .forall { b => f(x, b) === f(y, b) }
+ .forall { b =>
+ f(x, b) === f(y, b)
+ }
}
implicit def catsLawsEqForEq[A](implicit arbA: Arbitrary[(A, A)]): Eq[Eq[A]] =
@@ -79,10 +82,12 @@ object eq {
implicit def catsLawsEqForEquiv[A](implicit arbA: Arbitrary[(A, A)]): Eq[Equiv[A]] =
sampledEq[Equiv[A], (A, A), Boolean](100) { case (e, (l, r)) => e.equiv(l, r) }
- implicit def catsLawsEqForPartialOrder[A](implicit arbA: Arbitrary[(A, A)], optIntEq: Eq[Option[Int]]): Eq[PartialOrder[A]] =
+ implicit def catsLawsEqForPartialOrder[A](implicit arbA: Arbitrary[(A, A)],
+ optIntEq: Eq[Option[Int]]): Eq[PartialOrder[A]] =
sampledEq[PartialOrder[A], (A, A), Option[Int]](100) { case (p, (l, r)) => p.tryCompare(l, r) }
- implicit def catsLawsEqForPartialOrdering[A](implicit arbA: Arbitrary[(A, A)], optIntEq: Eq[Option[Int]]): Eq[PartialOrdering[A]] =
+ implicit def catsLawsEqForPartialOrdering[A](implicit arbA: Arbitrary[(A, A)],
+ optIntEq: Eq[Option[Int]]): Eq[PartialOrdering[A]] =
sampledEq[PartialOrdering[A], (A, A), Option[Int]](100) { case (p, (l, r)) => p.tryCompare(l, r) }
implicit def catsLawsEqForOrder[A](implicit arbA: Arbitrary[(A, A)]): Eq[Order[A]] =
@@ -99,9 +104,11 @@ object eq {
def eqv(f: Hash[A], g: Hash[A]): Boolean = {
val samples = List.fill(100)(arbA.arbitrary.sample).collect {
case Some(a) => a
- case None => sys.error("Could not generate arbitrary values to compare two Hash[A]")
+ case None => sys.error("Could not generate arbitrary values to compare two Hash[A]")
+ }
+ samples.forall { x =>
+ f.hash(x) == g.hash(x)
}
- samples.forall { x => f.hash(x) == g.hash(x) }
}
}
@@ -111,61 +118,76 @@ object eq {
*/
implicit def catsLawsEqForSemigroup[A](implicit arbAA: Arbitrary[(A, A)], eqA: Eq[A]): Eq[Semigroup[A]] = {
val instance: Eq[((A, A)) => A] = catsLawsEqForFn1[(A, A), A]
- Eq.by[Semigroup[A], ((A, A)) => A]( f => Function.tupled((x, y) => f.combine(x, y)))(instance)
+ Eq.by[Semigroup[A], ((A, A)) => A](f => Function.tupled((x, y) => f.combine(x, y)))(instance)
}
- implicit def catsLawsEqForCommutativeSemigroup[A](implicit arbAA: Arbitrary[(A, A)], eqA: Eq[A]): Eq[CommutativeSemigroup[A]] = {
+ implicit def catsLawsEqForCommutativeSemigroup[A](implicit arbAA: Arbitrary[(A, A)],
+ eqA: Eq[A]): Eq[CommutativeSemigroup[A]] = {
implicit val eqABool: Eq[(A, Boolean)] = Eq.instance {
case ((x, boolX), (y, boolY)) => x === y && boolX === boolY
}
- Eq.by[CommutativeSemigroup[A], ((A, A)) => (A, Boolean)](f =>
- Function.tupled((x, y) => (f.combine(x, y), f.combine(x, y) === f.combine(y, x)))
+ Eq.by[CommutativeSemigroup[A], ((A, A)) => (A, Boolean)](
+ f => Function.tupled((x, y) => (f.combine(x, y), f.combine(x, y) === f.combine(y, x)))
)(catsLawsEqForFn1[(A, A), (A, Boolean)])
}
- implicit def catsLawsEqForBand[A](implicit arbAA: Arbitrary[(A, A)], eqSA: Eq[Semigroup[A]], eqA: Eq[A]): Eq[Band[A]] = {
- Eq.by[Band[A], ((A, A)) => Boolean](f =>
- Function.tupled((x, y) => f.combine(x, y) === f.combine(f.combine(x, y), y))
+ implicit def catsLawsEqForBand[A](implicit arbAA: Arbitrary[(A, A)],
+ eqSA: Eq[Semigroup[A]],
+ eqA: Eq[A]): Eq[Band[A]] =
+ Eq.by[Band[A], ((A, A)) => Boolean](
+ f => Function.tupled((x, y) => f.combine(x, y) === f.combine(f.combine(x, y), y))
)(catsLawsEqForFn1[(A, A), Boolean])
- }
implicit def catsLawsEqForMonoid[A](implicit eqSA: Eq[Semigroup[A]], eqA: Eq[A]): Eq[Monoid[A]] = new Eq[Monoid[A]] {
- def eqv(f: Monoid[A], g: Monoid[A]): Boolean = {
+ def eqv(f: Monoid[A], g: Monoid[A]): Boolean =
eqSA.eqv(f, g) && eqA.eqv(f.empty, g.empty)
- }
}
- implicit def catsLawsEqForSemilattice[A](implicit eqBA: Eq[Band[A]], eqCA: Eq[CommutativeSemigroup[A]], eqA: Eq[A]): Eq[Semilattice[A]] =
+ implicit def catsLawsEqForSemilattice[A](implicit eqBA: Eq[Band[A]],
+ eqCA: Eq[CommutativeSemigroup[A]],
+ eqA: Eq[A]): Eq[Semilattice[A]] =
Eq.instance((f, g) => eqBA.eqv(f, g) && eqCA.eqv(f, g))
- implicit def catsLawsEqForCommutativeMonoid[A](implicit eqSA: Eq[CommutativeSemigroup[A]], eqMA: Eq[Monoid[A]], eqA: Eq[A]): Eq[CommutativeMonoid[A]] =
+ implicit def catsLawsEqForCommutativeMonoid[A](implicit eqSA: Eq[CommutativeSemigroup[A]],
+ eqMA: Eq[Monoid[A]],
+ eqA: Eq[A]): Eq[CommutativeMonoid[A]] =
Eq.instance((f, g) => eqSA.eqv(f, g) && eqMA.eqv(f, g))
- implicit def catsLawsEqForBoundedSemilattice[A](implicit eqSA: Eq[Semilattice[A]], eqCA: Eq[CommutativeMonoid[A]], eqA: Eq[A]): Eq[BoundedSemilattice[A]] =
+ implicit def catsLawsEqForBoundedSemilattice[A](implicit eqSA: Eq[Semilattice[A]],
+ eqCA: Eq[CommutativeMonoid[A]],
+ eqA: Eq[A]): Eq[BoundedSemilattice[A]] =
Eq.instance((f, g) => eqSA.eqv(f, g) && eqCA.eqv(f, g))
- implicit def catsLawsEqForGroup[A](implicit arbAA: Arbitrary[(A, A)], eqMA: Eq[Monoid[A]], eqA: Eq[A]): Eq[Group[A]] = {
+ implicit def catsLawsEqForGroup[A](implicit arbAA: Arbitrary[(A, A)],
+ eqMA: Eq[Monoid[A]],
+ eqA: Eq[A]): Eq[Group[A]] = {
implicit val eqABool: Eq[(A, Boolean)] = Eq.instance {
case ((x, boolX), (y, boolY)) => x === y && boolX === boolY
}
- val inverseEq = Eq.by[Group[A], ((A, A)) => (A, Boolean)](f =>
- Function.tupled((x, y) => (
- f.combine(x, y),
- f.combine(f.inverse(x), x) === f.empty && f.combine(x, f.inverse(x)) === f.empty &&
- f.combine(f.inverse(y), y) === f.empty && f.combine(y, f.inverse(y)) === f.empty &&
- f.inverse(f.empty) == f.empty
+ val inverseEq = Eq.by[Group[A], ((A, A)) => (A, Boolean)](
+ f =>
+ Function.tupled(
+ (x, y) =>
+ (
+ f.combine(x, y),
+ f.combine(f.inverse(x), x) === f.empty && f.combine(x, f.inverse(x)) === f.empty &&
+ f.combine(f.inverse(y), y) === f.empty && f.combine(y, f.inverse(y)) === f.empty &&
+ f.inverse(f.empty) == f.empty
+ )
)
- ))(catsLawsEqForFn1[(A, A), (A, Boolean)])
+ )(catsLawsEqForFn1[(A, A), (A, Boolean)])
Eq.instance((f, g) => eqMA.eqv(f, g) && inverseEq.eqv(f, g))
}
- implicit def catsLawsEqForCommutativeGroup[A](implicit eqMA: Eq[CommutativeMonoid[A]], eqGA: Eq[Group[A]], eqA: Eq[A]): Eq[CommutativeGroup[A]] =
+ implicit def catsLawsEqForCommutativeGroup[A](implicit eqMA: Eq[CommutativeMonoid[A]],
+ eqGA: Eq[Group[A]],
+ eqA: Eq[A]): Eq[CommutativeGroup[A]] =
Eq.instance((f, g) => eqMA.eqv(f, g) && eqGA.eqv(f, g))
- implicit def catsLawsEqForRepresentableStore[F[_]: Representable, S, A](implicit eqFA: Eq[F[A]], eqS: Eq[S]): Eq[RepresentableStore[F, S, A]] = {
+ implicit def catsLawsEqForRepresentableStore[F[_]: Representable, S, A](implicit eqFA: Eq[F[A]],
+ eqS: Eq[S]): Eq[RepresentableStore[F, S, A]] =
Eq.instance((s1, s2) => eqFA.eqv(s1.fa, s2.fa) && eqS.eqv(s1.index, s2.index))
- }
}
diff --git a/laws/src/main/scala/cats/laws/discipline/FlatMapTests.scala b/laws/src/main/scala/cats/laws/discipline/FlatMapTests.scala
index 834fadcb27..57a9f17602 100644
--- a/laws/src/main/scala/cats/laws/discipline/FlatMapTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/FlatMapTests.scala
@@ -12,20 +12,19 @@ trait FlatMapTests[F[_]] extends ApplyTests[F] {
def laws: FlatMapLaws[F]
def flatMap[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet = {
implicit def functorF: Functor[F] = laws.F
implicit val EqFAB: Eq[F[(A, B)]] =
ContravariantSemigroupal[Eq].composeFunctor[F].product(EqFA, EqFB)
@@ -37,7 +36,8 @@ trait FlatMapTests[F[_]] extends ApplyTests[F] {
"flatMap consistent apply" -> forAll(laws.flatMapConsistentApply[A, B] _),
"flatMap from tailRecM consistency" -> forAll(laws.flatMapFromTailRecMConsistency[A, B] _),
"mproduct consistent flatMap" -> forAll(laws.mproductConsistency[A, B] _),
- "tailRecM consistent flatMap" -> forAll(laws.tailRecMConsistentFlatMap[A] _))
+ "tailRecM consistent flatMap" -> forAll(laws.tailRecMConsistentFlatMap[A] _)
+ )
}
}
diff --git a/laws/src/main/scala/cats/laws/discipline/FoldableTests.scala b/laws/src/main/scala/cats/laws/discipline/FoldableTests.scala
index ebc68c82d5..65d10b2081 100644
--- a/laws/src/main/scala/cats/laws/discipline/FoldableTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/FoldableTests.scala
@@ -12,17 +12,16 @@ trait FoldableTests[F[_]] extends UnorderedFoldableTests[F] {
def laws: FoldableLaws[F]
def foldable[A: Arbitrary, B: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- A: CommutativeMonoid[A],
- B: CommutativeMonoid[B],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- EqA: Eq[A],
- EqFA: Eq[F[A]],
- EqB: Eq[B],
- EqOptionB: Eq[Option[B]],
- EqOptionA: Eq[Option[A]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ A: CommutativeMonoid[A],
+ B: CommutativeMonoid[B],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ EqA: Eq[A],
+ EqFA: Eq[F[A]],
+ EqB: Eq[B],
+ EqOptionB: Eq[Option[B]],
+ EqOptionA: Eq[Option[A]]): RuleSet =
new DefaultRuleSet(
name = "foldable",
parent = Some(unorderedFoldable[A, B]),
@@ -46,10 +45,8 @@ trait FoldableTests[F[_]] extends UnorderedFoldableTests[F] {
"collectFirstSome reference" -> forAll(laws.collectFirstSome_Ref[A, B] _),
"collectFirst reference" -> forAll(laws.collectFirst_Ref[A, B] _)
)
- }
}
-
object FoldableTests {
def apply[F[_]: Foldable]: FoldableTests[F] =
new FoldableTests[F] { def laws: FoldableLaws[F] = FoldableLaws[F] }
diff --git a/laws/src/main/scala/cats/laws/discipline/FunctorFilterTests.scala b/laws/src/main/scala/cats/laws/discipline/FunctorFilterTests.scala
index 01fead48a2..5e746c60e9 100644
--- a/laws/src/main/scala/cats/laws/discipline/FunctorFilterTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/FunctorFilterTests.scala
@@ -10,17 +10,16 @@ trait FunctorFilterTests[F[_]] extends Laws {
def laws: FunctorFilterLaws[F]
def functorFilter[A, B, C](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFABoo: Arbitrary[PartialFunction[A, B]],
- ArbFOA: Arbitrary[F[Option[A]]],
- ArbAOB: Arbitrary[A => Option[B]],
- ArbBOC: Arbitrary[B => Option[C]],
- ArbAB: Arbitrary[A => B],
- ArbABoo: Arbitrary[A => Boolean],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFABoo: Arbitrary[PartialFunction[A, B]],
+ ArbFOA: Arbitrary[F[Option[A]]],
+ ArbAOB: Arbitrary[A => Option[B]],
+ ArbBOC: Arbitrary[B => Option[C]],
+ ArbAB: Arbitrary[A => B],
+ ArbABoo: Arbitrary[A => Boolean],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]]): RuleSet =
new DefaultRuleSet(
name = "functorFilter",
parent = None,
@@ -30,7 +29,6 @@ trait FunctorFilterTests[F[_]] extends Laws {
"flattenOption mapFilter consistency" -> forAll(laws.flattenOptionConsistentWithMapFilter[A] _),
"filter mapFilter consistency" -> forAll(laws.filterConsistentWithMapFilter[A] _)
)
- }
}
object FunctorFilterTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/FunctorTests.scala b/laws/src/main/scala/cats/laws/discipline/FunctorTests.scala
index c2a9542a08..7cf0d085a8 100644
--- a/laws/src/main/scala/cats/laws/discipline/FunctorTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/FunctorTests.scala
@@ -9,19 +9,18 @@ trait FunctorTests[F[_]] extends InvariantTests[F] {
def laws: FunctorLaws[F]
def functor[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFC: Eq[F[C]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFC: Eq[F[C]]): RuleSet =
new DefaultRuleSet(
name = "functor",
parent = Some(invariant[A, B, C]),
"covariant identity" -> forAll(laws.covariantIdentity[A] _),
- "covariant composition" -> forAll(laws.covariantComposition[A, B, C] _))
- }
+ "covariant composition" -> forAll(laws.covariantComposition[A, B, C] _)
+ )
}
object FunctorTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/InjectKTests.scala b/laws/src/main/scala/cats/laws/discipline/InjectKTests.scala
index a6eed7fe61..a2f0b50041 100644
--- a/laws/src/main/scala/cats/laws/discipline/InjectKTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/InjectKTests.scala
@@ -11,11 +11,10 @@ trait InjectKTests[F[_], G[_]] extends Laws {
def laws: InjectKLaws[F, G]
def injectK[A](implicit
- ArbFA: Arbitrary[F[A]],
- EqOptionFA: Eq[Option[F[A]]],
- ArbGA: Arbitrary[G[A]],
- EqOptionGA: Eq[Option[G[A]]]
- ): RuleSet =
+ ArbFA: Arbitrary[F[A]],
+ EqOptionFA: Eq[Option[F[A]]],
+ ArbGA: Arbitrary[G[A]],
+ EqOptionGA: Eq[Option[G[A]]]): RuleSet =
new DefaultRuleSet(
"injectK",
None,
diff --git a/laws/src/main/scala/cats/laws/discipline/InjectTests.scala b/laws/src/main/scala/cats/laws/discipline/InjectTests.scala
index 8619d84cb9..3f3f001601 100644
--- a/laws/src/main/scala/cats/laws/discipline/InjectTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/InjectTests.scala
@@ -11,11 +11,10 @@ trait InjectTests[A, B] extends Laws {
def laws: InjectLaws[A, B]
def inject(implicit
- ArbA: Arbitrary[A],
- EqOptionA: Eq[Option[A]],
- ArbB: Arbitrary[B],
- EqOptionB: Eq[Option[B]]
- ): RuleSet =
+ ArbA: Arbitrary[A],
+ EqOptionA: Eq[Option[A]],
+ ArbB: Arbitrary[B],
+ EqOptionB: Eq[Option[B]]): RuleSet =
new DefaultRuleSet(
"inject",
None,
diff --git a/laws/src/main/scala/cats/laws/discipline/InvariantMonoidalTests.scala b/laws/src/main/scala/cats/laws/discipline/InvariantMonoidalTests.scala
index 0f868c1ebd..2b956abf4a 100644
--- a/laws/src/main/scala/cats/laws/discipline/InvariantMonoidalTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/InvariantMonoidalTests.scala
@@ -10,18 +10,17 @@ trait InvariantMonoidalTests[F[_]] extends InvariantSemigroupalTests[F] {
def laws: InvariantMonoidalLaws[F]
def invariantMonoidal[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFABC: Eq[F[(A, (B, C))]],
- EqFABC2: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F],
- EqFA: Eq[F[A]],
- EqFC: Eq[F[C]]
- ): RuleSet =
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFABC: Eq[F[(A, (B, C))]],
+ EqFABC2: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F],
+ EqFA: Eq[F[A]],
+ EqFC: Eq[F[C]]): RuleSet =
new RuleSet {
val name = "invariantMonoidal"
val parents = Seq(invariant[A, B, C], semigroupal[A, B, C])
@@ -29,7 +28,9 @@ trait InvariantMonoidalTests[F[_]] extends InvariantSemigroupalTests[F] {
val props = Seq(
"invariant monoidal left identity" -> forAll((fa: F[A]) => laws.invariantMonoidalLeftIdentity(fa)),
"invariant monoidal right identity" -> forAll((fa: F[A]) => laws.invariantMonoidalRightIdentity(fa)),
- "invariant monoidal associativity" -> forAll((fa: F[A], fb: F[B], fc: F[C]) => laws.invariantMonoidalAssociativity(fa, fb, fc))
+ "invariant monoidal associativity" -> forAll(
+ (fa: F[A], fb: F[B], fc: F[C]) => laws.invariantMonoidalAssociativity(fa, fb, fc)
+ )
)
}
}
diff --git a/laws/src/main/scala/cats/laws/discipline/InvariantSemigroupalTests.scala b/laws/src/main/scala/cats/laws/discipline/InvariantSemigroupalTests.scala
index 3eae12a930..d6a5318f8e 100644
--- a/laws/src/main/scala/cats/laws/discipline/InvariantSemigroupalTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/InvariantSemigroupalTests.scala
@@ -10,17 +10,17 @@ trait InvariantSemigroupalTests[F[_]] extends InvariantTests[F] with Semigroupal
def laws: InvariantSemigroupalLaws[F]
def invariantSemigroupal[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- arbFA: Arbitrary[F[A]],
- arbFB: Arbitrary[F[B]],
- arbFC: Arbitrary[F[C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- iso: Isomorphisms[F]): RuleSet = new RuleSet {
+ arbFA: Arbitrary[F[A]],
+ arbFB: Arbitrary[F[B]],
+ arbFC: Arbitrary[F[C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ iso: Isomorphisms[F]): RuleSet = new RuleSet {
val name = "invariantSemigroupal"
val parents = Seq(invariant[A, B, C], semigroupal[A, B, C])
val bases = Nil
diff --git a/laws/src/main/scala/cats/laws/discipline/InvariantTests.scala b/laws/src/main/scala/cats/laws/discipline/InvariantTests.scala
index a801ba99e0..4594eed29c 100644
--- a/laws/src/main/scala/cats/laws/discipline/InvariantTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/InvariantTests.scala
@@ -11,19 +11,18 @@ trait InvariantTests[F[_]] extends Laws {
def laws: InvariantLaws[F]
def invariant[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFC: Eq[F[C]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFC: Eq[F[C]]): RuleSet =
new DefaultRuleSet(
name = "invariant",
parent = None,
"invariant identity" -> forAll(laws.invariantIdentity[A] _),
- "invariant composition" -> forAll(laws.invariantComposition[A, B, C] _))
- }
+ "invariant composition" -> forAll(laws.invariantComposition[A, B, C] _)
+ )
}
object InvariantTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/MonadErrorTests.scala b/laws/src/main/scala/cats/laws/discipline/MonadErrorTests.scala
index 53e23ca65d..5d74eeef45 100644
--- a/laws/src/main/scala/cats/laws/discipline/MonadErrorTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/MonadErrorTests.scala
@@ -11,28 +11,27 @@ trait MonadErrorTests[F[_], E] extends ApplicativeErrorTests[F, E] with MonadTes
def laws: MonadErrorLaws[F, E]
def monadError[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFU: Arbitrary[F[Unit]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- ArbE: Arbitrary[E],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- CogenE: Cogen[E],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqE: Eq[E],
- EqFEitherEU: Eq[F[Either[E, Unit]]],
- EqFEitherEA: Eq[F[Either[E, A]]],
- EqEitherTFEA: Eq[EitherT[F, E, A]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFU: Arbitrary[F[Unit]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ ArbE: Arbitrary[E],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ CogenE: Cogen[E],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqE: Eq[E],
+ EqFEitherEU: Eq[F[Either[E, Unit]]],
+ EqFEitherEA: Eq[F[Either[E, A]]],
+ EqEitherTFEA: Eq[EitherT[F, E, A]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "monadError"
def bases: Seq[(String, RuleSet)] = Nil
@@ -46,7 +45,6 @@ trait MonadErrorTests[F[_], E] extends ApplicativeErrorTests[F, E] with MonadTes
"monadError rethrow attempt" -> forAll(laws.rethrowAttempt[A] _)
)
}
- }
}
object MonadErrorTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/MonadTests.scala b/laws/src/main/scala/cats/laws/discipline/MonadTests.scala
index 2ac2aa16e2..506591edcf 100644
--- a/laws/src/main/scala/cats/laws/discipline/MonadTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/MonadTests.scala
@@ -11,49 +11,48 @@ trait MonadTests[F[_]] extends ApplicativeTests[F] with FlatMapTests[F] {
def laws: MonadLaws[F]
def monad[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "monad"
def bases: Seq[(String, RuleSet)] = Nil
def parents: Seq[RuleSet] = Seq(applicative[A, B, C], flatMap[A, B, C])
- def props: Seq[(String, Prop)] = Seq(
- "monad left identity" -> forAll(laws.monadLeftIdentity[A, B] _),
- "monad right identity" -> forAll(laws.monadRightIdentity[A] _),
- "map flatMap coherence" -> forAll(laws.mapFlatMapCoherence[A, B] _)
- ) ++ (if (Platform.isJvm) Seq[(String, Prop)]("tailRecM stack safety" -> Prop.lzy(laws.tailRecMStackSafety)) else Seq.empty)
+ def props: Seq[(String, Prop)] =
+ Seq(
+ "monad left identity" -> forAll(laws.monadLeftIdentity[A, B] _),
+ "monad right identity" -> forAll(laws.monadRightIdentity[A] _),
+ "map flatMap coherence" -> forAll(laws.mapFlatMapCoherence[A, B] _)
+ ) ++ (if (Platform.isJvm) Seq[(String, Prop)]("tailRecM stack safety" -> Prop.lzy(laws.tailRecMStackSafety))
+ else Seq.empty)
}
- }
def stackUnsafeMonad[A: Arbitrary: Eq, B: Arbitrary: Eq, C: Arbitrary: Eq](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- ArbFAtoB: Arbitrary[F[A => B]],
- ArbFBtoC: Arbitrary[F[B => C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- CogenC: Cogen[C],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqFABC: Eq[F[(A, B, C)]],
- EqFInt: Eq[F[Int]],
- iso: Isomorphisms[F]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ ArbFAtoB: Arbitrary[F[A => B]],
+ ArbFBtoC: Arbitrary[F[B => C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ CogenC: Cogen[C],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqFABC: Eq[F[(A, B, C)]],
+ EqFInt: Eq[F[Int]],
+ iso: Isomorphisms[F]): RuleSet =
new RuleSet {
def name: String = "monad (stack-unsafe)"
def bases: Seq[(String, RuleSet)] = Nil
@@ -64,7 +63,6 @@ trait MonadTests[F[_]] extends ApplicativeTests[F] with FlatMapTests[F] {
"map flatMap coherence" -> forAll(laws.mapFlatMapCoherence[A, B] _)
)
}
- }
}
object MonadTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/MonoidKTests.scala b/laws/src/main/scala/cats/laws/discipline/MonoidKTests.scala
index 3ea259d0d0..5cabd7f048 100644
--- a/laws/src/main/scala/cats/laws/discipline/MonoidKTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/MonoidKTests.scala
@@ -9,17 +9,17 @@ trait MonoidKTests[F[_]] extends SemigroupKTests[F] {
def laws: MonoidKLaws[F]
def monoidK[A: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- EqFA: Eq[F[A]]
- ): RuleSet =
+ ArbFA: Arbitrary[F[A]],
+ EqFA: Eq[F[A]]): RuleSet =
new DefaultRuleSet(
"monoidK",
Some(semigroupK[A]),
"monoidK left identity" -> forAll(laws.monoidKLeftIdentity[A] _),
- "monoidK right identity" -> forAll(laws.monoidKRightIdentity[A] _))
+ "monoidK right identity" -> forAll(laws.monoidKRightIdentity[A] _)
+ )
}
object MonoidKTests {
- def apply[F[_] : MonoidK]: MonoidKTests[F] =
+ def apply[F[_]: MonoidK]: MonoidKTests[F] =
new MonoidKTests[F] { def laws: MonoidKLaws[F] = MonoidKLaws[F] }
}
diff --git a/laws/src/main/scala/cats/laws/discipline/NonEmptyParallelTests.scala b/laws/src/main/scala/cats/laws/discipline/NonEmptyParallelTests.scala
index 0112b8d894..0dc268cb7b 100644
--- a/laws/src/main/scala/cats/laws/discipline/NonEmptyParallelTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/NonEmptyParallelTests.scala
@@ -9,8 +9,14 @@ import org.typelevel.discipline.Laws
trait NonEmptyParallelTests[M[_], F[_]] extends Laws {
def laws: NonEmptyParallelLaws[M, F]
- def nonEmptyParallel[A, B]
- (implicit ArbA: Arbitrary[A], ArbM: Arbitrary[M[A]], ArbMb: Arbitrary[M[B]], Arbf: Arbitrary[A => B], EqMa: Eq[M[A]], EqMb: Eq[M[B]], ArbF: Arbitrary[F[A]], EqFa: Eq[F[A]]): RuleSet =
+ def nonEmptyParallel[A, B](implicit ArbA: Arbitrary[A],
+ ArbM: Arbitrary[M[A]],
+ ArbMb: Arbitrary[M[B]],
+ Arbf: Arbitrary[A => B],
+ EqMa: Eq[M[A]],
+ EqMb: Eq[M[B]],
+ ArbF: Arbitrary[F[A]],
+ EqFa: Eq[F[A]]): RuleSet =
new DefaultRuleSet(
"parallel",
None,
diff --git a/laws/src/main/scala/cats/laws/discipline/NonEmptyTraverseTests.scala b/laws/src/main/scala/cats/laws/discipline/NonEmptyTraverseTests.scala
index 86e2438b6c..7603236a83 100644
--- a/laws/src/main/scala/cats/laws/discipline/NonEmptyTraverseTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/NonEmptyTraverseTests.scala
@@ -1,17 +1,16 @@
package cats.laws.discipline
-
import org.scalacheck.{Arbitrary, Cogen, Prop}
import Prop.forAll
import cats.kernel.CommutativeMonoid
import cats.{Applicative, CommutativeApplicative, Eq, NonEmptyTraverse}
import cats.laws.NonEmptyTraverseLaws
-
trait NonEmptyTraverseTests[F[_]] extends TraverseTests[F] with ReducibleTests[F] {
def laws: NonEmptyTraverseLaws[F]
- def nonEmptyTraverse[G[_]: Applicative, A: Arbitrary, B: Arbitrary, C: Arbitrary, M: Arbitrary, X[_], Y[_]](implicit
+ def nonEmptyTraverse[G[_]: Applicative, A: Arbitrary, B: Arbitrary, C: Arbitrary, M: Arbitrary, X[_], Y[_]](
+ implicit
ArbFA: Arbitrary[F[A]],
ArbXB: Arbitrary[X[B]],
ArbYB: Arbitrary[Y[B]],
@@ -46,7 +45,7 @@ trait NonEmptyTraverseTests[F[_]] extends TraverseTests[F] with ReducibleTests[F
EqYFM: Eq[Y[F[M]]],
EqOptionA: Eq[Option[A]]
): RuleSet = {
- implicit def EqXFBYFB : Eq[(X[F[B]], Y[F[B]])] = new Eq[(X[F[B]], Y[F[B]])] {
+ implicit def EqXFBYFB: Eq[(X[F[B]], Y[F[B]])] = new Eq[(X[F[B]], Y[F[B]])] {
override def eqv(x: (X[F[B]], Y[F[B]]), y: (X[F[B]], Y[F[B]])): Boolean =
EqXFB.eqv(x._1, y._1) && EqYFB.eqv(x._2, y._2)
}
@@ -56,7 +55,9 @@ trait NonEmptyTraverseTests[F[_]] extends TraverseTests[F] with ReducibleTests[F
def parents: Seq[RuleSet] = Seq(traverse[A, B, C, M, X, Y], reducible[G, A, B])
def props: Seq[(String, Prop)] = Seq(
"nonEmptyTraverse identity" -> forAll(laws.nonEmptyTraverseIdentity[A, C] _),
- "nonEmptyTraverse sequential composition" -> forAll(laws.nonEmptyTraverseSequentialComposition[A, B, C, X, Y] _),
+ "nonEmptyTraverse sequential composition" -> forAll(
+ laws.nonEmptyTraverseSequentialComposition[A, B, C, X, Y] _
+ ),
"nonEmptyTraverse parallel composition" -> forAll(laws.nonEmptyTraverseParallelComposition[A, B, X, Y] _),
"nonEmptyTraverse derive reduceMap" -> forAll(laws.reduceMapDerived[A, M] _)
)
diff --git a/laws/src/main/scala/cats/laws/discipline/ParallelTests.scala b/laws/src/main/scala/cats/laws/discipline/ParallelTests.scala
index 7c66bdfeb8..4b1cba0b9d 100644
--- a/laws/src/main/scala/cats/laws/discipline/ParallelTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ParallelTests.scala
@@ -8,8 +8,14 @@ import org.scalacheck.Prop.forAll
trait ParallelTests[M[_], F[_]] extends NonEmptyParallelTests[M, F] {
def laws: ParallelLaws[M, F]
- def parallel[A, B]
- (implicit ArbA: Arbitrary[A], ArbM: Arbitrary[M[A]], ArbMb: Arbitrary[M[B]], Arbf: Arbitrary[A => B], EqMa: Eq[M[A]], EqMb: Eq[M[B]], ArbF: Arbitrary[F[A]], EqFa: Eq[F[A]]): RuleSet =
+ def parallel[A, B](implicit ArbA: Arbitrary[A],
+ ArbM: Arbitrary[M[A]],
+ ArbMb: Arbitrary[M[B]],
+ Arbf: Arbitrary[A => B],
+ EqMa: Eq[M[A]],
+ EqMb: Eq[M[B]],
+ ArbF: Arbitrary[F[A]],
+ EqFa: Eq[F[A]]): RuleSet =
new DefaultRuleSet(
"parallel",
Some(nonEmptyParallel[A, B]),
diff --git a/laws/src/main/scala/cats/laws/discipline/ProfunctorTests.scala b/laws/src/main/scala/cats/laws/discipline/ProfunctorTests.scala
index 5d94255c70..30d08656ba 100644
--- a/laws/src/main/scala/cats/laws/discipline/ProfunctorTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ProfunctorTests.scala
@@ -10,7 +10,8 @@ import org.typelevel.discipline.Laws
trait ProfunctorTests[F[_, _]] extends Laws {
def laws: ProfunctorLaws[F]
- def profunctor[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](implicit
+ def profunctor[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](
+ implicit
ArbFAB: Arbitrary[F[A, B]],
ArbFCD: Arbitrary[F[C, D]],
CogenA: Cogen[A],
@@ -30,7 +31,8 @@ trait ProfunctorTests[F[_, _]] extends Laws {
"profunctor lmap identity" -> forAll(laws.profunctorLmapIdentity[A, B] _),
"profunctor rmap identity" -> forAll(laws.profunctorRmapIdentity[A, B] _),
"profunctor lmap composition" -> forAll(laws.profunctorLmapComposition[A, B, C, D] _),
- "profunctor rmap composition" -> forAll(laws.profunctorRmapComposition[A, D, C, B] _))
+ "profunctor rmap composition" -> forAll(laws.profunctorRmapComposition[A, D, C, B] _)
+ )
}
object ProfunctorTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/ReducibleTests.scala b/laws/src/main/scala/cats/laws/discipline/ReducibleTests.scala
index 5a61a88601..0b260bef23 100644
--- a/laws/src/main/scala/cats/laws/discipline/ReducibleTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/ReducibleTests.scala
@@ -12,20 +12,19 @@ trait ReducibleTests[F[_]] extends FoldableTests[F] {
def laws: ReducibleLaws[F]
def reducible[G[_]: Applicative, A: Arbitrary, B: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFGA: Arbitrary[F[G[A]]],
- ArbGB: Arbitrary[G[B]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- EqG: Eq[G[Unit]],
- EqA: Eq[A],
- EqB: Eq[B],
- EqFA: Eq[F[A]],
- EqOptionA: Eq[Option[A]],
- MonoidA: CommutativeMonoid[A],
- MonoidB: CommutativeMonoid[B]
- ): RuleSet =
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFGA: Arbitrary[F[G[A]]],
+ ArbGB: Arbitrary[G[B]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ EqG: Eq[G[Unit]],
+ EqA: Eq[A],
+ EqB: Eq[B],
+ EqFA: Eq[F[A]],
+ EqOptionA: Eq[Option[A]],
+ MonoidA: CommutativeMonoid[A],
+ MonoidB: CommutativeMonoid[B]): RuleSet =
new DefaultRuleSet(
name = "reducible",
parent = Some(foldable[A, B]),
@@ -44,6 +43,6 @@ trait ReducibleTests[F[_]] extends FoldableTests[F] {
}
object ReducibleTests {
- def apply[F[_] : Reducible]: ReducibleTests[F] =
+ def apply[F[_]: Reducible]: ReducibleTests[F] =
new ReducibleTests[F] { def laws: ReducibleLaws[F] = ReducibleLaws[F] }
}
diff --git a/laws/src/main/scala/cats/laws/discipline/RepresentableTests.scala b/laws/src/main/scala/cats/laws/discipline/RepresentableTests.scala
index f62bd9e53f..2630f379fa 100644
--- a/laws/src/main/scala/cats/laws/discipline/RepresentableTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/RepresentableTests.scala
@@ -8,25 +8,24 @@ import org.scalacheck.Prop._
trait RepresentableTests[F[_], R] extends Laws {
- val laws: RepresentableLaws[F, R]
+ val laws: RepresentableLaws[F, R]
- def representable[A](implicit
- ArbA: Arbitrary[A],
- ArbFA: Arbitrary[F[A]],
- ArbRep: Arbitrary[R],
- ArbRepFn: Arbitrary[R => A],
- EqFA: Eq[F[A]],
- EqA: Eq[A]
- ): RuleSet = new DefaultRuleSet(
- name = "representable",
- parent = None,
- "index andThen tabulate = id" -> forAll(laws.indexTabulateIsId[A] _),
- "tabulate andThen index = id" -> forAll(laws.tabulateIndexIsId[A] _)
- )
+ def representable[A](implicit
+ ArbA: Arbitrary[A],
+ ArbFA: Arbitrary[F[A]],
+ ArbRep: Arbitrary[R],
+ ArbRepFn: Arbitrary[R => A],
+ EqFA: Eq[F[A]],
+ EqA: Eq[A]): RuleSet = new DefaultRuleSet(
+ name = "representable",
+ parent = None,
+ "index andThen tabulate = id" -> forAll(laws.indexTabulateIsId[A] _),
+ "tabulate andThen index = id" -> forAll(laws.tabulateIndexIsId[A] _)
+ )
}
object RepresentableTests {
def apply[F[_], R](implicit RF: Representable.Aux[F, R]): RepresentableTests[F, R] = new RepresentableTests[F, R] {
- override implicit val laws: RepresentableLaws[F, R] = RepresentableLaws[F, R]
+ implicit override val laws: RepresentableLaws[F, R] = RepresentableLaws[F, R]
}
}
diff --git a/laws/src/main/scala/cats/laws/discipline/SemigroupKTests.scala b/laws/src/main/scala/cats/laws/discipline/SemigroupKTests.scala
index ca4525eea8..54c9e569f7 100644
--- a/laws/src/main/scala/cats/laws/discipline/SemigroupKTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/SemigroupKTests.scala
@@ -10,13 +10,9 @@ trait SemigroupKTests[F[_]] extends Laws {
def laws: SemigroupKLaws[F]
def semigroupK[A: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- EqFA: Eq[F[A]]
- ): RuleSet =
- new DefaultRuleSet(
- "semigroupK",
- None,
- "semigroupK associative" -> forAll(laws.semigroupKAssociative[A] _))
+ ArbFA: Arbitrary[F[A]],
+ EqFA: Eq[F[A]]): RuleSet =
+ new DefaultRuleSet("semigroupK", None, "semigroupK associative" -> forAll(laws.semigroupKAssociative[A] _))
}
object SemigroupKTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/SemigroupalTests.scala b/laws/src/main/scala/cats/laws/discipline/SemigroupalTests.scala
index 228d8e9cad..7ec8c88ec4 100644
--- a/laws/src/main/scala/cats/laws/discipline/SemigroupalTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/SemigroupalTests.scala
@@ -11,24 +11,24 @@ import org.typelevel.discipline.Laws
trait SemigroupalTests[F[_]] extends Laws {
def laws: SemigroupalLaws[F]
- def semigroupal[A : Arbitrary, B : Arbitrary, C : Arbitrary](implicit
- iso: Isomorphisms[F],
- ArbFA: Arbitrary[F[A]],
- ArbFB: Arbitrary[F[B]],
- ArbFC: Arbitrary[F[C]],
- EqFA: Eq[F[A]],
- EqFABC: Eq[F[(A, B, C)]]
- ): RuleSet = {
+ def semigroupal[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
+ iso: Isomorphisms[F],
+ ArbFA: Arbitrary[F[A]],
+ ArbFB: Arbitrary[F[B]],
+ ArbFC: Arbitrary[F[C]],
+ EqFA: Eq[F[A]],
+ EqFABC: Eq[F[(A, B, C)]]): RuleSet =
new DefaultRuleSet(
name = "semigroupal",
parent = None,
- "semigroupal associativity" -> forAll((fa: F[A], fb: F[B], fc: F[C]) => iso.associativity(laws.semigroupalAssociativity(fa, fb, fc)))
+ "semigroupal associativity" -> forAll(
+ (fa: F[A], fb: F[B], fc: F[C]) => iso.associativity(laws.semigroupalAssociativity(fa, fb, fc))
+ )
)
- }
}
object SemigroupalTests {
- def apply[F[_] : Semigroupal](implicit ev: Isomorphisms[F]): SemigroupalTests[F] =
+ def apply[F[_]: Semigroupal](implicit ev: Isomorphisms[F]): SemigroupalTests[F] =
new SemigroupalTests[F] { val laws: SemigroupalLaws[F] = SemigroupalLaws[F] }
trait Isomorphisms[F[_]] {
@@ -43,14 +43,18 @@ object SemigroupalTests {
implicit def invariant[F[_]](implicit F: Invariant[F]): Isomorphisms[F] =
new Isomorphisms[F] {
def associativity[A, B, C](fs: (F[(A, (B, C))], F[((A, B), C)])): IsEq[F[(A, B, C)]] =
- F.imap(fs._1) { case (a, (b, c)) => (a, b, c) } { case (a, b, c) => (a, (b, c)) } <->
- F.imap(fs._2) { case ((a, b), c) => (a, b, c) } { case (a, b, c) => ((a, b), c) }
+ F.imap(fs._1) { case (a, (b, c)) => (a, b, c) } { case (a, b, c) => (a, (b, c)) } <->
+ F.imap(fs._2) { case ((a, b), c) => (a, b, c) } { case (a, b, c) => ((a, b), c) }
def leftIdentity[A](fs: (F[(Unit, A)], F[A])): IsEq[F[A]] =
- F.imap(fs._1) { case (_, a) => a } { a => ((), a) } <-> fs._2
+ F.imap(fs._1) { case (_, a) => a } { a =>
+ ((), a)
+ } <-> fs._2
def rightIdentity[A](fs: (F[(A, Unit)], F[A])): IsEq[F[A]] =
- F.imap(fs._1) { case (a, _) => a } { a => (a, ()) } <-> fs._2
+ F.imap(fs._1) { case (a, _) => a } { a =>
+ (a, ())
+ } <-> fs._2
}
}
diff --git a/laws/src/main/scala/cats/laws/discipline/StrongTests.scala b/laws/src/main/scala/cats/laws/discipline/StrongTests.scala
index 83fb8279bc..d6d4c7fa02 100644
--- a/laws/src/main/scala/cats/laws/discipline/StrongTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/StrongTests.scala
@@ -9,7 +9,8 @@ import cats.arrow.Strong
trait StrongTests[F[_, _]] extends ProfunctorTests[F] {
def laws: StrongLaws[F]
- def strong[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](implicit
+ def strong[A: Arbitrary, B: Arbitrary, C: Arbitrary, D: Arbitrary, E: Arbitrary, G: Arbitrary](
+ implicit
ArbFAB: Arbitrary[F[A, B]],
ArbFBC: Arbitrary[F[B, C]],
ArbFCD: Arbitrary[F[C, D]],
@@ -28,7 +29,8 @@ trait StrongTests[F[_, _]] extends ProfunctorTests[F] {
name = "strong",
parent = Some(profunctor[A, B, C, D, E, G]),
"strong first distributivity" -> forAll(laws.strongFirstDistributivity[A, B, C, D, E] _),
- "strong second distributivity" -> forAll(laws.strongSecondDistributivity[A, B, C, D, E] _))
+ "strong second distributivity" -> forAll(laws.strongSecondDistributivity[A, B, C, D, E] _)
+ )
}
object StrongTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/TraverseFilterTests.scala b/laws/src/main/scala/cats/laws/discipline/TraverseFilterTests.scala
index 77dc281eec..342bf10b79 100644
--- a/laws/src/main/scala/cats/laws/discipline/TraverseFilterTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/TraverseFilterTests.scala
@@ -11,23 +11,22 @@ trait TraverseFilterTests[F[_]] extends FunctorFilterTests[F] {
def laws: TraverseFilterLaws[F]
def traverseFilter[A, B, C](implicit
- ArbFA: Arbitrary[F[A]],
- ArbFOA: Arbitrary[F[Option[A]]],
- ArbFABoo: Arbitrary[PartialFunction[A, B]],
- ArbAOB: Arbitrary[A => Option[B]],
- ArbAOA: Arbitrary[A => Option[A]],
- ArbAOOB: Arbitrary[A => Option[Option[B]]],
- ArbBOC: Arbitrary[B => Option[C]],
- ArbBOOC: Arbitrary[B => Option[Option[C]]],
- ArbAB: Arbitrary[A => B],
- ArbABoo: Arbitrary[A => Boolean],
- ArbAOBoo: Arbitrary[A => Option[Boolean]],
- EqFA: Eq[F[A]],
- EqFB: Eq[F[B]],
- EqFC: Eq[F[C]],
- EqGFA: Eq[Option[F[A]]],
- EqMNFC: Eq[Nested[Option, Option, F[C]]]
- ): RuleSet = {
+ ArbFA: Arbitrary[F[A]],
+ ArbFOA: Arbitrary[F[Option[A]]],
+ ArbFABoo: Arbitrary[PartialFunction[A, B]],
+ ArbAOB: Arbitrary[A => Option[B]],
+ ArbAOA: Arbitrary[A => Option[A]],
+ ArbAOOB: Arbitrary[A => Option[Option[B]]],
+ ArbBOC: Arbitrary[B => Option[C]],
+ ArbBOOC: Arbitrary[B => Option[Option[C]]],
+ ArbAB: Arbitrary[A => B],
+ ArbABoo: Arbitrary[A => Boolean],
+ ArbAOBoo: Arbitrary[A => Option[Boolean]],
+ EqFA: Eq[F[A]],
+ EqFB: Eq[F[B]],
+ EqFC: Eq[F[C]],
+ EqGFA: Eq[Option[F[A]]],
+ EqMNFC: Eq[Nested[Option, Option, F[C]]]): RuleSet =
new DefaultRuleSet(
name = "traverseFilter",
parent = Some(functorFilter[A, B, C]),
@@ -36,7 +35,6 @@ trait TraverseFilterTests[F[_]] extends FunctorFilterTests[F] {
"traverseFilter consistent with traverse" -> forAll(laws.traverseFilterConsistentWithTraverse[Option, A] _),
"filterA consistent with traverseFilter" -> forAll(laws.filterAConsistentWithTraverseFilter[Option, A] _)
)
- }
}
object TraverseFilterTests {
diff --git a/laws/src/main/scala/cats/laws/discipline/TraverseTests.scala b/laws/src/main/scala/cats/laws/discipline/TraverseTests.scala
index 6171e64a03..41455de701 100644
--- a/laws/src/main/scala/cats/laws/discipline/TraverseTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/TraverseTests.scala
@@ -10,8 +10,8 @@ import Prop._
trait TraverseTests[F[_]] extends FunctorTests[F] with FoldableTests[F] with UnorderedTraverseTests[F] {
def laws: TraverseLaws[F]
-
- def traverse[A: Arbitrary, B: Arbitrary, C: Arbitrary, M: Arbitrary, X[_]: CommutativeApplicative, Y[_]: CommutativeApplicative](implicit
+ def traverse[A: Arbitrary, B: Arbitrary, C: Arbitrary, M: Arbitrary, X[_]: CommutativeApplicative, Y[_]: CommutativeApplicative](
+ implicit
ArbFA: Arbitrary[F[A]],
ArbFB: Arbitrary[F[B]],
ArbXB: Arbitrary[X[B]],
@@ -37,7 +37,7 @@ trait TraverseTests[F[_]] extends FunctorTests[F] with FoldableTests[F] with Uno
EqYFM: Eq[Y[F[M]]],
EqOptionA: Eq[Option[A]]
): RuleSet = {
- implicit def EqXFBYFB : Eq[(X[F[B]], Y[F[B]])] = new Eq[(X[F[B]], Y[F[B]])] {
+ implicit def EqXFBYFB: Eq[(X[F[B]], Y[F[B]])] = new Eq[(X[F[B]], Y[F[B]])] {
override def eqv(x: (X[F[B]], Y[F[B]]), y: (X[F[B]], Y[F[B]])): Boolean =
EqXFB.eqv(x._1, y._1) && EqYFB.eqv(x._2, y._2)
}
diff --git a/laws/src/main/scala/cats/laws/discipline/UnorderedFoldableTests.scala b/laws/src/main/scala/cats/laws/discipline/UnorderedFoldableTests.scala
index bdbd5c8a88..321e84a5f0 100644
--- a/laws/src/main/scala/cats/laws/discipline/UnorderedFoldableTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/UnorderedFoldableTests.scala
@@ -11,16 +11,14 @@ import cats.instances.boolean._
trait UnorderedFoldableTests[F[_]] extends Laws {
def laws: UnorderedFoldableLaws[F]
-
def unorderedFoldable[A: Arbitrary, B: Arbitrary](implicit
- ArbFA: Arbitrary[F[A]],
- ArbF: Arbitrary[A => B],
- CogenA: Cogen[A],
- A: CommutativeMonoid[A],
- B: CommutativeMonoid[B],
- EqFA: Eq[A],
- EqFB: Eq[B]
- ): RuleSet =
+ ArbFA: Arbitrary[F[A]],
+ ArbF: Arbitrary[A => B],
+ CogenA: Cogen[A],
+ A: CommutativeMonoid[A],
+ B: CommutativeMonoid[B],
+ EqFA: Eq[A],
+ EqFB: Eq[B]): RuleSet =
new DefaultRuleSet(
name = "unorderedFoldable",
parent = None,
diff --git a/laws/src/main/scala/cats/laws/discipline/UnorderedTraverseTests.scala b/laws/src/main/scala/cats/laws/discipline/UnorderedTraverseTests.scala
index 161354fabf..9edc6bdb33 100644
--- a/laws/src/main/scala/cats/laws/discipline/UnorderedTraverseTests.scala
+++ b/laws/src/main/scala/cats/laws/discipline/UnorderedTraverseTests.scala
@@ -9,34 +9,35 @@ import cats.kernel.CommutativeMonoid
trait UnorderedTraverseTests[F[_]] extends UnorderedFoldableTests[F] {
def laws: UnorderedTraverseLaws[F]
-
- def unorderedTraverse[A: Arbitrary, B: Arbitrary, C: Arbitrary, X[_]: CommutativeApplicative, Y[_]: CommutativeApplicative]
- (implicit ArbFA: Arbitrary[F[A]],
- ArbFXB: Arbitrary[F[X[B]]],
- ArbXB: Arbitrary[X[B]],
- ArbYB: Arbitrary[Y[B]],
- ArbYC: Arbitrary[Y[C]],
- CogenA: Cogen[A],
- CogenB: Cogen[B],
- Ca: CommutativeMonoid[A],
- Cb: CommutativeMonoid[B],
- EqA: Eq[A],
- EqB: Eq[B],
- EqXYFC: Eq[X[Y[F[C]]]],
- EqXFB: Eq[X[F[B]]],
- EqYFB: Eq[Y[F[B]]]
+ def unorderedTraverse[A: Arbitrary, B: Arbitrary, C: Arbitrary, X[_]: CommutativeApplicative, Y[_]: CommutativeApplicative](
+ implicit ArbFA: Arbitrary[F[A]],
+ ArbFXB: Arbitrary[F[X[B]]],
+ ArbXB: Arbitrary[X[B]],
+ ArbYB: Arbitrary[Y[B]],
+ ArbYC: Arbitrary[Y[C]],
+ CogenA: Cogen[A],
+ CogenB: Cogen[B],
+ Ca: CommutativeMonoid[A],
+ Cb: CommutativeMonoid[B],
+ EqA: Eq[A],
+ EqB: Eq[B],
+ EqXYFC: Eq[X[Y[F[C]]]],
+ EqXFB: Eq[X[F[B]]],
+ EqYFB: Eq[Y[F[B]]]
): RuleSet = {
- implicit def EqXFBYFB : Eq[(X[F[B]], Y[F[B]])] = new Eq[(X[F[B]], Y[F[B]])] {
+ implicit def EqXFBYFB: Eq[(X[F[B]], Y[F[B]])] = new Eq[(X[F[B]], Y[F[B]])] {
override def eqv(x: (X[F[B]], Y[F[B]]), y: (X[F[B]], Y[F[B]])): Boolean =
EqXFB.eqv(x._1, y._1) && EqYFB.eqv(x._2, y._2)
}
new DefaultRuleSet(
name = "unorderedTraverse",
parent = Some(unorderedFoldable[A, B]),
- "unordered traverse sequential composition" -> forAll(laws.unorderedTraverseSequentialComposition[A, B, C, X, Y] _),
- "unordered traverse parallel composition" -> forAll(laws.unorderedTraverseParallelComposition[A, B, X, Y] _),
- "unordered traverse consistent with sequence" -> forAll(laws.unorderedSequenceConsistent[B, X] _)
- )
+ "unordered traverse sequential composition" -> forAll(
+ laws.unorderedTraverseSequentialComposition[A, B, C, X, Y] _
+ ),
+ "unordered traverse parallel composition" -> forAll(laws.unorderedTraverseParallelComposition[A, B, X, Y] _),
+ "unordered traverse consistent with sequence" -> forAll(laws.unorderedSequenceConsistent[B, X] _)
+ )
}
}
diff --git a/macros/src/main/scala/cats/macros/Ops.scala b/macros/src/main/scala/cats/macros/Ops.scala
index 7dfadc892b..0a832019bb 100644
--- a/macros/src/main/scala/cats/macros/Ops.scala
+++ b/macros/src/main/scala/cats/macros/Ops.scala
@@ -15,7 +15,8 @@ object Ops extends machinist.Ops {
("<=", "lteqv"),
("|+|", "combine"),
("|-|", "remove")
- ).map{ case (k, v) =>
- (NameTransformer.encode(k), v)
+ ).map {
+ case (k, v) =>
+ (NameTransformer.encode(k), v)
}.toMap
}
diff --git a/project/Boilerplate.scala b/project/Boilerplate.scala
index e84f06a225..8812df4165 100644
--- a/project/Boilerplate.scala
+++ b/project/Boilerplate.scala
@@ -9,21 +9,18 @@ import sbt._
* @author Miles Sabin
* @author Kevin Wright
*/
-
-
object Boilerplate {
import scala.StringContext._
implicit final class BlockHelper(val sc: StringContext) extends AnyVal {
def block(args: Any*): String = {
val interpolated = sc.standardInterpolator(treatEscapes, args)
- val rawLines = interpolated split '\n'
- val trimmedLines = rawLines map { _ dropWhile (_.isWhitespace) }
- trimmedLines mkString "\n"
+ val rawLines = interpolated.split('\n')
+ val trimmedLines = rawLines.map { _.dropWhile(_.isWhitespace) }
+ trimmedLines.mkString("\n")
}
}
-
val templates: Seq[Template] = Seq(
GenSemigroupalBuilders,
GenSemigroupalArityFunctions,
@@ -36,9 +33,8 @@ object Boilerplate {
val header = "// auto-generated boilerplate by /project/Boilerplate.scala" // TODO: put something meaningful here?
-
/** Returns a seq of the generated files. As a side-effect, it actually generates them... */
- def gen(dir : File) = for(t <- templates) yield {
+ def gen(dir: File) = for (t <- templates) yield {
val tgtFile = t.filename(dir)
IO.write(tgtFile, t.body)
tgtFile
@@ -47,42 +43,43 @@ object Boilerplate {
val maxArity = 22
final class TemplateVals(val arity: Int) {
- val synTypes = (0 until arity) map (n => s"A$n")
- val synVals = (0 until arity) map (n => s"a$n")
- val synTypedVals = (synVals zip synTypes) map { case (v,t) => v + ":" + t}
- val `A..N` = synTypes.mkString(", ")
- val `a..n` = synVals.mkString(", ")
- val `_.._` = Seq.fill(arity)("_").mkString(", ")
- val `(A..N)` = if (arity == 1) "Tuple1[A]" else synTypes.mkString("(", ", ", ")")
- val `(_.._)` = if (arity == 1) "Tuple1[_]" else Seq.fill(arity)("_").mkString("(", ", ", ")")
- val `(a..n)` = if (arity == 1) "Tuple1(a)" else synVals.mkString("(", ", ", ")")
- val `a:A..n:N` = synTypedVals mkString ", "
+ val synTypes = (0 until arity).map(n => s"A$n")
+ val synVals = (0 until arity).map(n => s"a$n")
+ val synTypedVals = (synVals.zip(synTypes)).map { case (v, t) => v + ":" + t }
+ val `A..N` = synTypes.mkString(", ")
+ val `a..n` = synVals.mkString(", ")
+ val `_.._` = Seq.fill(arity)("_").mkString(", ")
+ val `(A..N)` = if (arity == 1) "Tuple1[A]" else synTypes.mkString("(", ", ", ")")
+ val `(_.._)` = if (arity == 1) "Tuple1[_]" else Seq.fill(arity)("_").mkString("(", ", ", ")")
+ val `(a..n)` = if (arity == 1) "Tuple1(a)" else synVals.mkString("(", ", ", ")")
+ val `a:A..n:N` = synTypedVals.mkString(", ")
}
trait Template {
- def filename(root: File):File
+ def filename(root: File): File
def content(tv: TemplateVals): String
def range = 1 to maxArity
def body: String = {
def expandInstances(contents: IndexedSeq[Array[String]], acc: Array[String] = Array.empty): Array[String] =
- if (!contents.exists(_ exists(_ startsWith "-")))
- acc map (_.tail)
+ if (!contents.exists(_.exists(_.startsWith("-"))))
+ acc.map(_.tail)
else {
- val pre = contents.head takeWhile (_ startsWith "|")
- val instances = contents flatMap {_ dropWhile (_ startsWith "|") takeWhile (_ startsWith "-") }
- val next = contents map {_ dropWhile (_ startsWith "|") dropWhile (_ startsWith "-") }
+ val pre = contents.head.takeWhile(_.startsWith("|"))
+ val instances = contents.flatMap { _.dropWhile(_.startsWith("|")).takeWhile(_.startsWith("-")) }
+ val next = contents.map { _.dropWhile(_.startsWith("|")).dropWhile(_.startsWith("-")) }
expandInstances(next, acc ++ pre ++ instances)
}
- val rawContents = range map { n => content(new TemplateVals(n)) split '\n' filterNot (_.isEmpty) }
- val headerLines = header split '\n'
+ val rawContents = range.map { n =>
+ content(new TemplateVals(n)).split('\n').filterNot(_.isEmpty)
+ }
+ val headerLines = header.split('\n')
val instances = expandInstances(rawContents)
- val footerLines = rawContents.head.reverse.takeWhile(_ startsWith "|").map(_.tail).reverse
- (headerLines ++ instances ++ footerLines) mkString "\n"
+ val footerLines = rawContents.head.reverse.takeWhile(_.startsWith("|")).map(_.tail).reverse
+ (headerLines ++ instances ++ footerLines).mkString("\n")
}
}
-
/*
Blocks in the templates below use a custom interpolator, combined with post-processing to produce the body
@@ -96,17 +93,19 @@ object Boilerplate {
- Then the last block of lines prefixed with '|'
The block otherwise behaves as a standard interpolated string with regards to variable substitution.
- */
+ */
object GenSemigroupalBuilders extends Template {
- def filename(root: File) = root / "cats" / "syntax" / "SemigroupalBuilder.scala"
+ def filename(root: File) = root / "cats" / "syntax" / "SemigroupalBuilder.scala"
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"F[$tpe]" }
- val tpesString = synTypes mkString ", "
- val params = (synVals zip tpes) map { case (v,t) => s"$v:$t"} mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"F[$tpe]"
+ }
+ val tpesString = synTypes.mkString(", ")
+ val params = (synVals.zip(tpes)).map { case (v, t) => s"$v:$t" }.mkString(", ")
val next = if (arity + 1 <= maxArity) {
s"def |@|[Z](z: F[Z]) = new SemigroupalBuilder${arity + 1}(${`a..n`}, z)"
} else {
@@ -116,16 +115,22 @@ object Boilerplate {
val n = if (arity == 1) { "" } else { arity.toString }
val map =
- if (arity == 1) s"def map[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F]): F[Z] = functor.map(${`a..n`})(f)"
- else s"def map[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.map$n(${`a..n`})(f)"
+ if (arity == 1)
+ s"def map[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F]): F[Z] = functor.map(${`a..n`})(f)"
+ else
+ s"def map[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.map$n(${`a..n`})(f)"
val contramap =
- if (arity == 1) s"def contramap[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F]): F[Z] = contravariant.contramap(${`a..n`})(f)"
- else s"def contramap[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.contramap$n(${`a..n`})(f)"
+ if (arity == 1)
+ s"def contramap[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F]): F[Z] = contravariant.contramap(${`a..n`})(f)"
+ else
+ s"def contramap[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.contramap$n(${`a..n`})(f)"
val imap =
- if (arity == 1) s"def imap[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F]): F[Z] = invariant.imap(${`a..n`})(f)(g)"
- else s"def imap[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.imap$n(${`a..n`})(f)(g)"
+ if (arity == 1)
+ s"def imap[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F]): F[Z] = invariant.imap(${`a..n`})(f)(g)"
+ else
+ s"def imap[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.imap$n(${`a..n`})(f)(g)"
val tupled = if (arity != 1) {
s"def tupled(implicit invariant: Invariant[F], semigroupal: Semigroupal[F]): F[(${`A..N`})] = Semigroupal.tuple$n(${`a..n`})"
@@ -134,15 +139,15 @@ object Boilerplate {
}
block"""
- |package cats
- |package syntax
- |
- |
- |
- |@deprecated("replaced by apply syntax", "1.0.0-MF")
- |private[syntax] final class SemigroupalBuilder[F[_]] {
- | def |@|[A](a: F[A]) = new SemigroupalBuilder1(a)
- |
+ |package cats
+ |package syntax
+ |
+ |
+ |
+ |@deprecated("replaced by apply syntax", "1.0.0-MF")
+ |private[syntax] final class SemigroupalBuilder[F[_]] {
+ | def |@|[A](a: F[A]) = new SemigroupalBuilder1(a)
+ |
- private[syntax] final class SemigroupalBuilder$arity[${`A..N`}]($params) {
- $next
- def apWith[Z](f: F[(${`A..N`}) => Z])(implicit apply: Apply[F]): F[Z] = apply.ap$n(f)(${`a..n`})
@@ -151,7 +156,7 @@ object Boilerplate {
- $imap
- $tupled
- }
- |}
+ |}
"""
}
}
@@ -162,19 +167,29 @@ object Boilerplate {
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"F[$tpe]" }
- val fargs = (0 until arity) map { "f" + _ }
- val fparams = (fargs zip tpes) map { case (v,t) => s"$v:$t"} mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"F[$tpe]"
+ }
+ val fargs = (0 until arity).map { "f" + _ }
+ val fparams = (fargs.zip(tpes)).map { case (v, t) => s"$v:$t" }.mkString(", ")
val a = arity / 2
val b = arity - a
- val fArgsA = (0 until a) map { "f" + _ } mkString ","
- val fArgsB = (a until arity) map { "f" + _ } mkString ","
- val argsA = (0 until a) map { n => "a" + n + ":A" + n } mkString ","
- val argsB = (a until arity) map { n => "a" + n + ":A" + n } mkString ","
+ val fArgsA = (0 until a).map { "f" + _ }.mkString(",")
+ val fArgsB = (a until arity).map { "f" + _ }.mkString(",")
+ val argsA = (0 until a)
+ .map { n =>
+ "a" + n + ":A" + n
+ }
+ .mkString(",")
+ val argsB = (a until arity)
+ .map { n =>
+ "a" + n + ":A" + n
+ }
+ .mkString(",")
def apN(n: Int) = if (n == 1) { "ap" } else { s"ap$n" }
- def allArgs = (0 until arity) map { "a" + _ } mkString ","
+ def allArgs = (0 until arity).map { "a" + _ }.mkString(",")
val apply =
block"""
@@ -184,38 +199,39 @@ object Boilerplate {
"""
block"""
- |package cats
- |
- |/**
- | * @groupprio Ungrouped 0
- | *
- | * @groupname ApArity ap arity
- | * @groupdesc ApArity Higher-arity ap methods
- | * @groupprio ApArity 999
- | *
- | * @groupname MapArity map arity
- | * @groupdesc MapArity Higher-arity map methods
- | * @groupprio MapArity 999
- | *
- | * @groupname TupleArity tuple arity
- | * @groupdesc TupleArity Higher-arity tuple methods
- | * @groupprio TupleArity 999
- | */
- |trait ApplyArityFunctions[F[_]] { self: Apply[F] =>
- | def tuple2[A, B](f1: F[A], f2: F[B]): F[(A, B)] = Semigroupal.tuple2(f1, f2)(self, self)
+ |package cats
+ |
+ |/**
+ | * @groupprio Ungrouped 0
+ | *
+ | * @groupname ApArity ap arity
+ | * @groupdesc ApArity Higher-arity ap methods
+ | * @groupprio ApArity 999
+ | *
+ | * @groupname MapArity map arity
+ | * @groupdesc MapArity Higher-arity map methods
+ | * @groupprio MapArity 999
+ | *
+ | * @groupname TupleArity tuple arity
+ | * @groupdesc TupleArity Higher-arity tuple methods
+ | * @groupprio TupleArity 999
+ | */
+ |trait ApplyArityFunctions[F[_]] { self: Apply[F] =>
+ | def tuple2[A, B](f1: F[A], f2: F[B]): F[(A, B)] = Semigroupal.tuple2(f1, f2)(self, self)
- /** @group ApArity */
- def ap$arity[${`A..N`}, Z](f: F[(${`A..N`}) => Z])($fparams):F[Z] = $apply
- /** @group MapArity */
- def map$arity[${`A..N`}, Z]($fparams)(f: (${`A..N`}) => Z): F[Z] = Semigroupal.map$arity($fparams)(f)(self, self)
- /** @group TupleArity */
- def tuple$arity[${`A..N`}, Z]($fparams): F[(${`A..N`})] = Semigroupal.tuple$arity($fparams)(self, self)
- |}
+ |}
"""
}
}
final case class ParallelNestedExpansions(arity: Int) {
- val products = (0 until (arity - 2)).foldRight(s"Parallel.parProduct(m${arity - 2}, m${arity - 1})")((i, acc) => s"Parallel.parProduct(m$i, $acc)")
+ val products = (0 until (arity - 2))
+ .foldRight(s"Parallel.parProduct(m${arity - 2}, m${arity - 1})")((i, acc) => s"Parallel.parProduct(m$i, $acc)")
val `(a..n)` = (0 until (arity - 2)).foldRight(s"(a${arity - 2}, a${arity - 1})")((i, acc) => s"(a$i, $acc)")
}
@@ -225,27 +241,29 @@ object Boilerplate {
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"M[$tpe]" }
- val fargs = (0 until arity) map { "m" + _ }
- val fparams = (fargs zip tpes) map { case (v,t) => s"$v:$t"} mkString ", "
- val fargsS = fargs mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"M[$tpe]"
+ }
+ val fargs = (0 until arity).map { "m" + _ }
+ val fparams = (fargs.zip(tpes)).map { case (v, t) => s"$v:$t" }.mkString(", ")
+ val fargsS = fargs.mkString(", ")
val nestedExpansion = ParallelNestedExpansions(arity)
block"""
- |package cats
- |
- |/**
- | * @groupprio Ungrouped 0
- | *
- | * @groupname ParMapArity parMap arity
- | * @groupdesc ParMapArity Higher-arity parMap methods
- | * @groupprio ParMapArity 999
- | */
- |trait ParallelArityFunctions {
+ |package cats
+ |
+ |/**
+ | * @groupprio Ungrouped 0
+ | *
+ | * @groupname ParMapArity parMap arity
+ | * @groupdesc ParMapArity Higher-arity parMap methods
+ | * @groupprio ParMapArity 999
+ | */
+ |trait ParallelArityFunctions {
- /** @group ParMapArity */
- def parMap$arity[M[_], F[_], ${`A..N`}, Z]($fparams)(f: (${`A..N`}) => Z)(implicit p: NonEmptyParallel[M, F]): M[Z] =
- p.flatMap.map(${nestedExpansion.products}) { case ${nestedExpansion.`(a..n)`} => f(${`a..n`}) }
- |}
+ |}
"""
}
}
@@ -256,27 +274,29 @@ object Boilerplate {
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"M[$tpe]" }
- val fargs = (0 until arity) map { "m" + _ }
- val fparams = (fargs zip tpes) map { case (v,t) => s"$v:$t"} mkString ", "
- val fargsS = fargs mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"M[$tpe]"
+ }
+ val fargs = (0 until arity).map { "m" + _ }
+ val fparams = (fargs.zip(tpes)).map { case (v, t) => s"$v:$t" }.mkString(", ")
+ val fargsS = fargs.mkString(", ")
val nestedExpansion = ParallelNestedExpansions(arity)
block"""
- |package cats
- |
- |/**
- | * @groupprio Ungrouped 0
- | *
- | * @groupname ParTupleArity parTuple arity
- | * @groupdesc ParTupleArity Higher-arity parTuple methods
- | * @groupprio ParTupleArity 999
- | */
- |abstract class ParallelArityFunctions2 extends ParallelArityFunctions {
+ |package cats
+ |
+ |/**
+ | * @groupprio Ungrouped 0
+ | *
+ | * @groupname ParTupleArity parTuple arity
+ | * @groupdesc ParTupleArity Higher-arity parTuple methods
+ | * @groupprio ParTupleArity 999
+ | */
+ |abstract class ParallelArityFunctions2 extends ParallelArityFunctions {
- /** @group ParTupleArity */
- def parTuple$arity[M[_], F[_], ${`A..N`}]($fparams)(implicit p: NonEmptyParallel[M, F]): M[(${`A..N`})] =
- p.flatMap.map(${nestedExpansion.products}) { case ${nestedExpansion.`(a..n)`} => (${`a..n`}) }
- |}
+ |}
"""
}
}
@@ -287,41 +307,45 @@ object Boilerplate {
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"F[$tpe]" }
- val fargs = (0 until arity) map { "f" + _ }
- val fparams = (fargs zip tpes) map { case (v,t) => s"$v:$t"} mkString ", "
- val fargsS = fargs mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"F[$tpe]"
+ }
+ val fargs = (0 until arity).map { "f" + _ }
+ val fparams = (fargs.zip(tpes)).map { case (v, t) => s"$v:$t" }.mkString(", ")
+ val fargsS = fargs.mkString(", ")
- val nestedProducts = (0 until (arity - 2)).foldRight(s"semigroupal.product(f${arity - 2}, f${arity - 1})")((i, acc) => s"semigroupal.product(f$i, $acc)")
- val `nested (a..n)` = (0 until (arity - 2)).foldRight(s"(a${arity - 2}, a${arity - 1})")((i, acc) => s"(a$i, $acc)")
+ val nestedProducts = (0 until (arity - 2))
+ .foldRight(s"semigroupal.product(f${arity - 2}, f${arity - 1})")((i, acc) => s"semigroupal.product(f$i, $acc)")
+ val `nested (a..n)` =
+ (0 until (arity - 2)).foldRight(s"(a${arity - 2}, a${arity - 1})")((i, acc) => s"(a$i, $acc)")
block"""
- |package cats
- |
- |/**
- | * @groupprio Ungrouped 0
- | *
- | * @groupname MapArity map arity
- | * @groupdesc MapArity Higher-arity map methods
- | * @groupprio MapArity 999
- | *
- | * @groupname ContramapArity contramap arity
- | * @groupdesc ContramapArity Higher-arity contramap methods
- | * @groupprio ContramapArity 999
- | *
- | * @groupname ImapArity imap arity
- | * @groupdesc ImapArity Higher-arity imap methods
- | * @groupprio ImapArity 999
- | *
- | * @groupname TupleArity tuple arity
- | * @groupdesc TupleArity Higher-arity tuple methods
- | * @groupprio TupleArity 999
- | *
- | * @groupname TraverseArity traverse arity
- | * @groupdesc TraverseArity Higher-arity traverse methods
- | * @groupprio TraverseArity 999
- | */
- |trait SemigroupalArityFunctions {
+ |package cats
+ |
+ |/**
+ | * @groupprio Ungrouped 0
+ | *
+ | * @groupname MapArity map arity
+ | * @groupdesc MapArity Higher-arity map methods
+ | * @groupprio MapArity 999
+ | *
+ | * @groupname ContramapArity contramap arity
+ | * @groupdesc ContramapArity Higher-arity contramap methods
+ | * @groupprio ContramapArity 999
+ | *
+ | * @groupname ImapArity imap arity
+ | * @groupdesc ImapArity Higher-arity imap methods
+ | * @groupprio ImapArity 999
+ | *
+ | * @groupname TupleArity tuple arity
+ | * @groupdesc TupleArity Higher-arity tuple methods
+ | * @groupprio TupleArity 999
+ | *
+ | * @groupname TraverseArity traverse arity
+ | * @groupdesc TraverseArity Higher-arity traverse methods
+ | * @groupprio TraverseArity 999
+ | */
+ |trait SemigroupalArityFunctions {
- /** @group MapArity */
- def map$arity[F[_], ${`A..N`}, Z]($fparams)(f: (${`A..N`}) => Z)(implicit semigroupal: Semigroupal[F], functor: Functor[F]): F[Z] =
- functor.map($nestedProducts) { case ${`nested (a..n)`} => f(${`a..n`}) }
@@ -337,79 +361,92 @@ object Boilerplate {
- /** @group TraverseArity */
- def traverse$arity[F[_], G[_], ${`A..N`}, Z]($fparams)(f: (${`A..N`}) => G[Z])(implicit semigroupal: Semigroupal[F], traverse: Traverse[F], applicative: Applicative[G]): G[F[Z]] =
- traverse.traverse($nestedProducts) { case ${`nested (a..n)`} => f(${`a..n`}) }
- |}
+ |}
"""
}
}
object GenTupleParallelSyntax extends Template {
- def filename(root: File) = root / "cats" / "syntax" / "TupleParallelSyntax.scala"
+ def filename(root: File) = root / "cats" / "syntax" / "TupleParallelSyntax.scala"
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"M[$tpe]" }
- val tpesString = tpes mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"M[$tpe]"
+ }
+ val tpesString = tpes.mkString(", ")
val tuple = s"Tuple$arity[$tpesString]"
val tupleTpe = s"t$arity: $tuple"
- val tupleArgs = (1 to arity) map { case n => s"t$arity._$n" } mkString ", "
+ val tupleArgs = (1 to arity).map { case n => s"t$arity._$n" }.mkString(", ")
val n = if (arity == 1) { "" } else { arity.toString }
val parMap =
- if (arity == 1) s"def parMap[F[_], Z](f: (${`A..N`}) => Z)(implicit p: NonEmptyParallel[M, F]): M[Z] = p.flatMap.map($tupleArgs)(f)"
- else s"def parMapN[F[_], Z](f: (${`A..N`}) => Z)(implicit p: NonEmptyParallel[M, F]): M[Z] = Parallel.parMap$arity($tupleArgs)(f)"
+ if (arity == 1)
+ s"def parMap[F[_], Z](f: (${`A..N`}) => Z)(implicit p: NonEmptyParallel[M, F]): M[Z] = p.flatMap.map($tupleArgs)(f)"
+ else
+ s"def parMapN[F[_], Z](f: (${`A..N`}) => Z)(implicit p: NonEmptyParallel[M, F]): M[Z] = Parallel.parMap$arity($tupleArgs)(f)"
val parTupled =
if (arity == 1) ""
- else s"def parTupled[F[_]](implicit p: NonEmptyParallel[M, F]): M[(${`A..N`})] = Parallel.parTuple$arity($tupleArgs)"
+ else
+ s"def parTupled[F[_]](implicit p: NonEmptyParallel[M, F]): M[(${`A..N`})] = Parallel.parTuple$arity($tupleArgs)"
block"""
- |package cats
- |package syntax
- |
- |import cats.Parallel
- |
- |trait TupleParallelSyntax {
+ |package cats
+ |package syntax
+ |
+ |import cats.Parallel
+ |
+ |trait TupleParallelSyntax {
- implicit def catsSyntaxTuple${arity}Parallel[M[_], ${`A..N`}]($tupleTpe): Tuple${arity}ParallelOps[M, ${`A..N`}] = new Tuple${arity}ParallelOps(t$arity)
- |}
- |
+ |}
+ |
-private[syntax] final class Tuple${arity}ParallelOps[M[_], ${`A..N`}]($tupleTpe) {
- $parMap
- $parTupled
-}
- |
+ |
"""
}
}
object GenTupleSemigroupalSyntax extends Template {
- def filename(root: File) = root / "cats" / "syntax" / "TupleSemigroupalSyntax.scala"
+ def filename(root: File) = root / "cats" / "syntax" / "TupleSemigroupalSyntax.scala"
def content(tv: TemplateVals) = {
import tv._
- val tpes = synTypes map { tpe => s"F[$tpe]" }
- val tpesString = tpes mkString ", "
+ val tpes = synTypes.map { tpe =>
+ s"F[$tpe]"
+ }
+ val tpesString = tpes.mkString(", ")
val tuple = s"Tuple$arity[$tpesString]"
val tupleTpe = s"t$arity: $tuple"
- val tupleArgs = (1 to arity) map { case n => s"t$arity._$n" } mkString ", "
+ val tupleArgs = (1 to arity).map { case n => s"t$arity._$n" }.mkString(", ")
val n = if (arity == 1) { "" } else { arity.toString }
val map =
- if (arity == 1) s"def map[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F]): F[Z] = functor.map($tupleArgs)(f)"
- else s"def mapN[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.map$arity($tupleArgs)(f)"
+ if (arity == 1)
+ s"def map[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F]): F[Z] = functor.map($tupleArgs)(f)"
+ else
+ s"def mapN[Z](f: (${`A..N`}) => Z)(implicit functor: Functor[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.map$arity($tupleArgs)(f)"
val contramap =
- if (arity == 1) s"def contramap[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F]): F[Z] = contravariant.contramap($tupleArgs)(f)"
- else s"def contramapN[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.contramap$arity($tupleArgs)(f)"
+ if (arity == 1)
+ s"def contramap[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F]): F[Z] = contravariant.contramap($tupleArgs)(f)"
+ else
+ s"def contramapN[Z](f: Z => (${`A..N`}))(implicit contravariant: Contravariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.contramap$arity($tupleArgs)(f)"
val imap =
- if (arity == 1) s"def imap[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F]): F[Z] = invariant.imap($tupleArgs)(f)(g)"
- else s"def imapN[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.imap$arity($tupleArgs)(f)(g)"
+ if (arity == 1)
+ s"def imap[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F]): F[Z] = invariant.imap($tupleArgs)(f)(g)"
+ else
+ s"def imapN[Z](f: (${`A..N`}) => Z)(g: Z => (${`A..N`}))(implicit invariant: Invariant[F], semigroupal: Semigroupal[F]): F[Z] = Semigroupal.imap$arity($tupleArgs)(f)(g)"
val tupled = if (arity != 1) {
s"def tupled(implicit invariant: Invariant[F], semigroupal: Semigroupal[F]): F[(${`A..N`})] = Semigroupal.tuple$n($tupleArgs)"
@@ -418,20 +455,21 @@ object Boilerplate {
}
val traverse =
- if (arity == 1) s"def traverse[G[_]: Applicative, Z](f: (${`A..N`}) => G[Z])(implicit traverse: Traverse[F]): G[F[Z]] = traverse.traverse($tupleArgs)(f)"
- else s"def traverseN[G[_]: Applicative, Z](f: (${`A..N`}) => G[Z])(implicit traverse: Traverse[F], semigroupal: Semigroupal[F]): G[F[Z]] = Semigroupal.traverse$arity($tupleArgs)(f)"
-
+ if (arity == 1)
+ s"def traverse[G[_]: Applicative, Z](f: (${`A..N`}) => G[Z])(implicit traverse: Traverse[F]): G[F[Z]] = traverse.traverse($tupleArgs)(f)"
+ else
+ s"def traverseN[G[_]: Applicative, Z](f: (${`A..N`}) => G[Z])(implicit traverse: Traverse[F], semigroupal: Semigroupal[F]): G[F[Z]] = Semigroupal.traverse$arity($tupleArgs)(f)"
block"""
- |package cats
- |package syntax
- |
- |
- |
- |trait TupleSemigroupalSyntax {
+ |package cats
+ |package syntax
+ |
+ |
+ |
+ |trait TupleSemigroupalSyntax {
- implicit def catsSyntaxTuple${arity}Semigroupal[F[_], ${`A..N`}]($tupleTpe): Tuple${arity}SemigroupalOps[F, ${`A..N`}] = new Tuple${arity}SemigroupalOps(t$arity)
- |}
- |
+ |}
+ |
-private[syntax] final class Tuple${arity}SemigroupalOps[F[_], ${`A..N`}]($tupleTpe) {
- $map
- $contramap
@@ -440,7 +478,7 @@ object Boilerplate {
- $traverse
- def apWith[Z](f: F[(${`A..N`}) => Z])(implicit apply: Apply[F]): F[Z] = apply.ap$n(f)($tupleArgs)
-}
- |
+ |
"""
}
}
diff --git a/project/KernelBoiler.scala b/project/KernelBoiler.scala
index 16c64d3471..95efe25eb5 100644
--- a/project/KernelBoiler.scala
+++ b/project/KernelBoiler.scala
@@ -40,10 +40,10 @@ object KernelBoiler {
class TemplateVals(val arity: Int) {
val synTypes = (0 until arity).map(n => s"A$n")
- val synVals = (0 until arity).map(n => s"a$n")
- val `A..N` = synTypes.mkString(", ")
- val `a..n` = synVals.mkString(", ")
- val `_.._` = Seq.fill(arity)("_").mkString(", ")
+ val synVals = (0 until arity).map(n => s"a$n")
+ val `A..N` = synTypes.mkString(", ")
+ val `a..n` = synVals.mkString(", ")
+ val `_.._` = Seq.fill(arity)("_").mkString(", ")
val `(A..N)` = if (arity == 1) "Tuple1[A0]" else synTypes.mkString("(", ", ", ")")
val `(_.._)` = if (arity == 1) "Tuple1[_]" else Seq.fill(arity)("_").mkString("(", ", ", ")")
val `(a..n)` = if (arity == 1) "Tuple1(a)" else synVals.mkString("(", ", ", ")")
@@ -74,11 +74,10 @@ object KernelBoiler {
}
}
- case class InstanceDef(start: String, methods: TemplateVals => TemplatedBlock, end: String = "}") {
+ 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)
}
-
abstract class TemplatedBlock(tv: TemplateVals) {
import tv._
@@ -111,8 +110,9 @@ object KernelBoiler {
}
def unaryMethod(name: String) =
- synTypes.zipWithIndex.iterator.map { case (tpe, i) =>
- s"$tpe.$name(x._${i + 1})"
+ synTypes.zipWithIndex.iterator.map {
+ case (tpe, i) =>
+ s"$tpe.$name(x._${i + 1})"
}
def nullaryTuple(name: String) = {
@@ -134,15 +134,18 @@ object KernelBoiler {
package instances
"""
- def instances: Seq[InstanceDef] = {
-
+ 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)`}] =
+ 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")}
@@ -155,7 +158,9 @@ object KernelBoiler {
${binMethod("compare").mkString("Array(", ", ", ")")}.find(_ != 0).getOrElse(0)
}
- implicit def catsKernelStdBoundedSemilatticeForTuple${arity}[${`A..N`}](implicit ${constraints("BoundedSemilattice")}): BoundedSemilattice[${`(A..N)`}] =
+ 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")}
@@ -163,18 +168,21 @@ object KernelBoiler {
"""
}
),
-
- InstanceDef("trait TupleInstances1 extends TupleInstances2 {",
- tv => new TemplatedBlock(tv) {
- import tv._
- def content =
- block"""
+ 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)`}] =
+ 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")}
@@ -189,7 +197,8 @@ object KernelBoiler {
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 hash(x: ${`(A..N)`}): Int = ${unaryMethod("hash")
+ .mkString(s"$tupleNHeader(", ", ", ")")}.hashCode()
def eqv(x: ${`(A..N)`}, y: ${`(A..N)`}): Boolean = ${binMethod("eqv").mkString(" && ")}
}
@@ -198,19 +207,24 @@ object KernelBoiler {
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"""
+ """
+ }
+ ),
+ 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)`}] =
+ 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")}
}
@@ -220,13 +234,16 @@ object KernelBoiler {
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"""
+ """
+ }
+ ),
+ 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")}
@@ -236,8 +253,10 @@ object KernelBoiler {
new Eq[${`(A..N)`}] {
def eqv(x: ${`(A..N)`}, y: ${`(A..N)`}): Boolean = ${binMethod("eqv").mkString(" && ")}
}
- """}))
- }
+ """
+ }
+ )
+ )
}
}
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 04b66786a8..0045761012 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1,19 +1,20 @@
addSbtCoursier
-addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.2")
-addSbtPlugin("com.github.gseitz" %% "sbt-release" % "1.0.9")
-addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2")
-addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.3.0")
-addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.3.4")
-addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % "1.0.0")
-addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0-M3")
-addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
-addSbtPlugin("com.github.tkawachi" % "sbt-doctest" % "0.8.0")
-addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.0")
-addSbtPlugin("com.47deg" % "sbt-microsites" % "0.7.20")
-addSbtPlugin("com.dwijnand" % "sbt-travisci" % "1.1.3")
-addSbtPlugin("org.lyranthe.sbt" % "partial-unification" % "1.1.2")
-addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.6.7")
-addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.6.0")
-addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "0.6.0")
-addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.24")
-addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.3.8")
+addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.2")
+addSbtPlugin("com.github.gseitz" %% "sbt-release" % "1.0.9")
+addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2")
+addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.3.0")
+addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.3.4")
+addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % "1.0.0")
+addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0-M3")
+addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
+addSbtPlugin("com.github.tkawachi" % "sbt-doctest" % "0.8.0")
+addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.0")
+addSbtPlugin("com.47deg" % "sbt-microsites" % "0.7.20")
+addSbtPlugin("com.dwijnand" % "sbt-travisci" % "1.1.3")
+addSbtPlugin("org.lyranthe.sbt" % "partial-unification" % "1.1.2")
+addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.6.7")
+addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.6.0")
+addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "0.6.0")
+addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.24")
+addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.3.8")
+addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.5.1")
diff --git a/scalastyle-config.xml b/scalastyle-config.xml
index 081d009534..9b6c1c39c5 100644
--- a/scalastyle-config.xml
+++ b/scalastyle-config.xml
@@ -49,7 +49,7 @@
-
+
@@ -65,11 +65,6 @@
...]).]]>
-
-
- PACKAGE, WHILE, CASE, NEW, DO, EQUALS, SUBTYPE, SEALED, TYPE, FINAL, IMPORT, RETURN, VAL, VAR, ELSE, MATCH, TRY, SUPERTYPE, OP, CATCH, THROW, CLASS, DEF, FOR, LARROW, ABSTRACT, IF, OBJECT, COMMA, YIELD, PIPE, IMPLICIT, LAZY, TRAIT, FORSOME, FINALLY, OVERRIDE, ARROW, EXTENDS
-
-
OP, PIPE, FORSOME
@@ -85,10 +80,4 @@
-
-
-
-
-
-
diff --git a/testkit/src/main/scala/cats/tests/CatsEquality.scala b/testkit/src/main/scala/cats/tests/CatsEquality.scala
index a45dc9a4e6..dcd550a495 100644
--- a/testkit/src/main/scala/cats/tests/CatsEquality.scala
+++ b/testkit/src/main/scala/cats/tests/CatsEquality.scala
@@ -21,7 +21,8 @@ trait LowPriorityStrictCatsConstraints extends TripleEquals {
trait StrictCatsEquality extends LowPriorityStrictCatsConstraints {
override def convertToEqualizer[T](left: T): Equalizer[T] = super.convertToEqualizer[T](left)
implicit override def convertToCheckingEqualizer[T](left: T): CheckingEqualizer[T] = new CheckingEqualizer(left)
- override def unconstrainedEquality[A, B](implicit equalityOfA: Equality[A]): CanEqual[A, B] = super.unconstrainedEquality[A, B]
+ override def unconstrainedEquality[A, B](implicit equalityOfA: Equality[A]): CanEqual[A, B] =
+ super.unconstrainedEquality[A, B]
implicit def catsCanEqual[A, B](implicit A: Eq[A], ev: B <:< A): CanEqual[A, B] =
new BToAEquivalenceConstraint[A, B](new CatsEquivalence(A), ev)
}
diff --git a/testkit/src/main/scala/cats/tests/CatsSuite.scala b/testkit/src/main/scala/cats/tests/CatsSuite.scala
index baf8d0b687..6f881244a1 100644
--- a/testkit/src/main/scala/cats/tests/CatsSuite.scala
+++ b/testkit/src/main/scala/cats/tests/CatsSuite.scala
@@ -4,7 +4,14 @@ package tests
import catalysts.Platform
import cats.instances.{AllInstances, AllInstancesBinCompat0, AllInstancesBinCompat1, AllInstancesBinCompat2}
-import cats.syntax.{AllSyntax, AllSyntaxBinCompat0, AllSyntaxBinCompat1, AllSyntaxBinCompat2, AllSyntaxBinCompat3, EqOps}
+import cats.syntax.{
+ AllSyntax,
+ AllSyntaxBinCompat0,
+ AllSyntaxBinCompat1,
+ AllSyntaxBinCompat2,
+ AllSyntaxBinCompat3,
+ EqOps
+}
import org.scalactic.anyvals.{PosInt, PosZDouble, PosZInt}
import org.scalatest.{FunSuite, FunSuiteLike, Matchers}
import org.scalatest.prop.{Configuration, GeneratorDrivenPropertyChecks}
@@ -18,7 +25,8 @@ trait TestSettings extends Configuration with Matchers {
maxDiscardedFactor = if (Platform.isJvm) PosZDouble(5.0) else PosZDouble(50.0),
minSize = PosZInt(0),
sizeRange = if (Platform.isJvm) PosZInt(10) else PosZInt(5),
- workers = if (Platform.isJvm) PosInt(2) else PosInt(1))
+ workers = if (Platform.isJvm) PosInt(2) else PosInt(1)
+ )
lazy val slowCheckConfiguration: PropertyCheckConfiguration =
if (Platform.isJvm) checkConfiguration
@@ -29,14 +37,21 @@ trait TestSettings extends Configuration with Matchers {
* An opinionated stack of traits to improve consistency and reduce
* boilerplate in Cats tests.
*/
-trait CatsSuite extends FunSuite
+trait CatsSuite
+ extends FunSuite
with Matchers
with GeneratorDrivenPropertyChecks
with Discipline
with TestSettings
- with AllInstances with AllInstancesBinCompat0 with AllInstancesBinCompat1 with AllInstancesBinCompat2
- with AllSyntax with AllSyntaxBinCompat0 with AllSyntaxBinCompat1
- with AllSyntaxBinCompat2 with AllSyntaxBinCompat3
+ with AllInstances
+ with AllInstancesBinCompat0
+ with AllInstancesBinCompat1
+ with AllInstancesBinCompat2
+ with AllSyntax
+ with AllSyntaxBinCompat0
+ with AllSyntaxBinCompat1
+ with AllSyntaxBinCompat2
+ with AllSyntaxBinCompat3
with StrictCatsEquality { self: FunSuiteLike =>
implicit override val generatorDrivenConfig: PropertyCheckConfiguration =
diff --git a/testkit/src/main/scala/cats/tests/Helpers.scala b/testkit/src/main/scala/cats/tests/Helpers.scala
index 6a222cde8f..fc1607eb4c 100644
--- a/testkit/src/main/scala/cats/tests/Helpers.scala
+++ b/testkit/src/main/scala/cats/tests/Helpers.scala
@@ -4,8 +4,8 @@ package tests
import org.scalacheck.{Arbitrary, Cogen}
import Arbitrary.arbitrary
-import cats.kernel.{ CommutativeSemigroup, CommutativeMonoid, CommutativeGroup }
-import cats.kernel.{ Band, Semilattice, BoundedSemilattice }
+import cats.kernel.{CommutativeGroup, CommutativeMonoid, CommutativeSemigroup}
+import cats.kernel.{Band, BoundedSemilattice, Semilattice}
/**
* Helpers provides new concrete types where we control exactly which
@@ -45,8 +45,8 @@ object Helpers {
object POrd extends Arb(new POrd(_)) {
implicit object O extends PartialOrder[POrd] {
def partialCompare(x: POrd, y: POrd): Double =
- if (x.n >= 0 && y.n >= 0) (x.n compare y.n).toDouble
- else if (x.n <= 0 && y.n <= 0) (y.n compare x.n).toDouble
+ if (x.n >= 0 && y.n >= 0) x.n.compare(y.n).toDouble
+ else if (x.n <= 0 && y.n <= 0) y.n.compare(x.n).toDouble
else Double.NaN
}
}
@@ -55,7 +55,7 @@ object Helpers {
case class Ord(n: Int) extends N
object Ord extends Arb(new Ord(_)) {
implicit object O extends Order[Ord] {
- def compare(x: Ord, y: Ord): Int = x.n compare y.n
+ def compare(x: Ord, y: Ord): Int = x.n.compare(y.n)
}
}
@@ -113,7 +113,7 @@ object Helpers {
object Mono extends Companion(new Mono(_)) {
implicit object Alg extends Monoid[Mono] {
def empty: Mono = Mono(Int.MaxValue)
- def combine(x: Mono, y: Mono): Mono = Mono(x.n min y.n)
+ def combine(x: Mono, y: Mono): Mono = Mono(x.n.min(y.n))
}
}
@@ -122,7 +122,7 @@ object Helpers {
object CMono extends Companion(new CMono(_)) {
implicit object Alg extends CommutativeMonoid[CMono] {
def empty: CMono = CMono(Int.MaxValue)
- def combine(x: CMono, y: CMono): CMono = CMono(x.n min y.n)
+ def combine(x: CMono, y: CMono): CMono = CMono(x.n.min(y.n))
}
}
diff --git a/tests/src/test/scala/cats/tests/AlgebraInvariantSuite.scala b/tests/src/test/scala/cats/tests/AlgebraInvariantSuite.scala
index 01a1ed62db..329ebcc56c 100644
--- a/tests/src/test/scala/cats/tests/AlgebraInvariantSuite.scala
+++ b/tests/src/test/scala/cats/tests/AlgebraInvariantSuite.scala
@@ -4,7 +4,7 @@ package tests
import cats.Invariant
import cats.kernel._
import cats.kernel.laws.discipline.{SemigroupTests, MonoidTests, GroupTests, _}
-import cats.laws.discipline.{InvariantMonoidalTests, InvariantTests, SerializableTests, InvariantSemigroupalTests}
+import cats.laws.discipline.{InvariantMonoidalTests, InvariantSemigroupalTests, InvariantTests, SerializableTests}
import cats.laws.discipline.eq._
import org.scalacheck.{Arbitrary, Gen}
@@ -59,14 +59,12 @@ class AlgebraInvariantSuite extends CatsSuite {
implicit val arbCommutativeGroupInt: Arbitrary[CommutativeGroup[Int]] =
Arbitrary(genCommutativeGroupInt)
-
-
checkAll("InvariantMonoidal[Semigroup]", SemigroupTests[Int](InvariantMonoidal[Semigroup].point(0)).semigroup)
- checkAll("InvariantMonoidal[CommutativeSemigroup]", CommutativeSemigroupTests[Int](InvariantMonoidal[CommutativeSemigroup].point(0)).commutativeSemigroup)
+ checkAll("InvariantMonoidal[CommutativeSemigroup]",
+ CommutativeSemigroupTests[Int](InvariantMonoidal[CommutativeSemigroup].point(0)).commutativeSemigroup)
checkAll("InvariantSemigroupal[Monoid]", InvariantSemigroupalTests[Monoid].invariantSemigroupal[Int, Int, Int])
-
{
val S: Semigroup[Int] = Semigroup[Int].imap(identity)(identity)
checkAll("Semigroup[Int]", SemigroupTests[Int](S).semigroup)
@@ -92,13 +90,11 @@ class AlgebraInvariantSuite extends CatsSuite {
checkAll("CommutativeMonoid[Int]", CommutativeMonoidTests[Int](S).commutativeMonoid)
}
-
{
val S: CommutativeGroup[Int] = CommutativeGroup[Int].imap(identity)(identity)
checkAll("CommutativeGroup[Int]", CommutativeGroupTests[Int](S).commutativeGroup)
}
-
{
val S: Band[Set[Int]] = Band[Set[Int]].imap(identity)(identity)
checkAll("Band[Set[Int]]", BandTests[Set[Int]](S).band)
@@ -114,7 +110,6 @@ class AlgebraInvariantSuite extends CatsSuite {
checkAll("BoundedSemilattice[Set[Int]]", BoundedSemilatticeTests[Set[Int]](S).boundedSemilattice)
}
-
checkAll("Invariant[Semigroup]", InvariantTests[Semigroup].invariant[Int, Int, Int])
checkAll("Invariant[Semigroup]", SerializableTests.serializable(Invariant[Semigroup]))
@@ -145,7 +140,9 @@ class AlgebraInvariantSuite extends CatsSuite {
checkAll("InvariantMonoidal[Semigroup]", InvariantMonoidalTests[Semigroup].invariantMonoidal[Int, Int, Int])
checkAll("InvariantMonoidal[Semigroup]", SerializableTests.serializable(InvariantMonoidal[Semigroup]))
- checkAll("InvariantMonoidal[CommutativeSemigroup]", InvariantMonoidalTests[CommutativeSemigroup].invariantMonoidal[Int, Int, Int])
- checkAll("InvariantMonoidal[CommutativeSemigroup]", SerializableTests.serializable(InvariantMonoidal[CommutativeSemigroup]))
+ checkAll("InvariantMonoidal[CommutativeSemigroup]",
+ InvariantMonoidalTests[CommutativeSemigroup].invariantMonoidal[Int, Int, Int])
+ checkAll("InvariantMonoidal[CommutativeSemigroup]",
+ SerializableTests.serializable(InvariantMonoidal[CommutativeSemigroup]))
}
diff --git a/tests/src/test/scala/cats/tests/AlternativeSuite.scala b/tests/src/test/scala/cats/tests/AlternativeSuite.scala
index 7298600a36..eb46f102a3 100644
--- a/tests/src/test/scala/cats/tests/AlternativeSuite.scala
+++ b/tests/src/test/scala/cats/tests/AlternativeSuite.scala
@@ -6,17 +6,17 @@ class AlternativeSuite extends CatsSuite {
forAll { (list: List[Option[String]]) =>
val expected = list.collect { case Some(s) => s }
- Alternative[List].unite(list) should === (expected)
+ Alternative[List].unite(list) should ===(expected)
}
}
test("separate") {
forAll { (list: List[Either[Int, String]]) =>
- val ints = list.collect { case Left(i) => i }
+ val ints = list.collect { case Left(i) => i }
val strings = list.collect { case Right(s) => s }
val expected = (ints, strings)
- Alternative[List].separate(list) should === (expected)
+ Alternative[List].separate(list) should ===(expected)
}
}
diff --git a/tests/src/test/scala/cats/tests/AndThenSuite.scala b/tests/src/test/scala/cats/tests/AndThenSuite.scala
index a1825f9d09..60f9509eca 100644
--- a/tests/src/test/scala/cats/tests/AndThenSuite.scala
+++ b/tests/src/test/scala/cats/tests/AndThenSuite.scala
@@ -19,7 +19,8 @@ class AndThenSuite extends CatsSuite {
{
implicit val iso = SemigroupalTests.Isomorphisms.invariant[AndThen[?, Int]]
checkAll("AndThen[Int, Int]", ContravariantMonoidalTests[AndThen[?, Int]].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[AndThen[?, Int]]", SerializableTests.serializable(ContravariantMonoidal[AndThen[?, Int]]))
+ checkAll("ContravariantMonoidal[AndThen[?, Int]]",
+ SerializableTests.serializable(ContravariantMonoidal[AndThen[?, Int]]))
}
checkAll("AndThen[Int, Int]", MonadTests[AndThen[Int, ?]].monad[Int, Int, Int])
@@ -57,7 +58,9 @@ class AndThenSuite extends CatsSuite {
test("andThen is stack safe") {
val count = if (Platform.isJvm) 500000 else 1000
- val fs = (0 until count).map(_ => { i: Int => i + 1 })
+ val fs = (0 until count).map(_ => { i: Int =>
+ i + 1
+ })
val result = fs.foldLeft(AndThen((x: Int) => x))(_.andThen(_))(42)
result shouldEqual (count + 42)
@@ -65,7 +68,9 @@ class AndThenSuite extends CatsSuite {
test("compose is stack safe") {
val count = if (Platform.isJvm) 500000 else 1000
- val fs = (0 until count).map(_ => { i: Int => i + 1 })
+ val fs = (0 until count).map(_ => { i: Int =>
+ i + 1
+ })
val result = fs.foldLeft(AndThen((x: Int) => x))(_.compose(_))(42)
result shouldEqual (count + 42)
@@ -83,4 +88,4 @@ class AndThenSuite extends CatsSuite {
test("toString") {
AndThen((x: Int) => x).toString should startWith("AndThen$")
}
-}
\ No newline at end of file
+}
diff --git a/tests/src/test/scala/cats/tests/ApplicativeErrorSuite.scala b/tests/src/test/scala/cats/tests/ApplicativeErrorSuite.scala
index bcd3e73dee..658bd97e8d 100644
--- a/tests/src/test/scala/cats/tests/ApplicativeErrorSuite.scala
+++ b/tests/src/test/scala/cats/tests/ApplicativeErrorSuite.scala
@@ -8,37 +8,39 @@ class ApplicativeErrorSuite extends CatsSuite {
(()).raiseError[Option, Int]
test("raiseError syntax creates an Option with the correct value") {
- failed should === (None: Option[Int])
+ failed should ===(None: Option[Int])
}
test("handleError syntax transforms an error to a success") {
- failed.handleError(_ => 7) should === (Some(7))
+ failed.handleError(_ => 7) should ===(Some(7))
}
test("handleErrorWith transforms an error to a success") {
- failed.handleErrorWith(_ => Some(7)) should === (Some(7))
+ failed.handleErrorWith(_ => Some(7)) should ===(Some(7))
}
test("attempt syntax creates a wrapped Either") {
- failed.attempt should === (Option(Left(())))
+ failed.attempt should ===(Option(Left(())))
}
test("attemptT syntax creates an EitherT") {
- failed.attemptT should === (EitherT[Option, Unit, Int](Option(Left(()))))
+ failed.attemptT should ===(EitherT[Option, Unit, Int](Option(Left(()))))
}
test("recover syntax transforms an error to a success") {
- failed.recover { case _ => 7 } should === (Some(7))
+ failed.recover { case _ => 7 } should ===(Some(7))
}
test("recoverWith transforms an error to a success") {
- failed.recoverWith { case _ => Some(7) } should === (Some(7))
+ failed.recoverWith { case _ => Some(7) } should ===(Some(7))
}
{
final case class OptionWrapper[A](option: Option[A])
- implicit def mayBeApplicativeError[E](implicit ev: ApplicativeError[Option, E]): ApplicativeError[OptionWrapper, E] =
+ implicit def mayBeApplicativeError[E](
+ implicit ev: ApplicativeError[Option, E]
+ ): ApplicativeError[OptionWrapper, E] =
new ApplicativeError[OptionWrapper, E] {
def raiseError[A](e: E): OptionWrapper[A] =
@@ -55,11 +57,11 @@ class ApplicativeErrorSuite extends CatsSuite {
}
test("orElse leaves a success unchanged") {
- (OptionWrapper(17.some) orElse OptionWrapper(None)).option should === (OptionWrapper(17.some).option)
+ OptionWrapper(17.some).orElse(OptionWrapper(None)).option should ===(OptionWrapper(17.some).option)
}
test("orElse transforms an error to the alternative") {
- (().raiseError[OptionWrapper, Int] orElse OptionWrapper(17.some)).option should === (OptionWrapper(17.some).option)
+ ().raiseError[OptionWrapper, Int].orElse(OptionWrapper(17.some)).option should ===(OptionWrapper(17.some).option)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/ApplicativeSuite.scala b/tests/src/test/scala/cats/tests/ApplicativeSuite.scala
index 4d2c4559b0..e882b708ef 100644
--- a/tests/src/test/scala/cats/tests/ApplicativeSuite.scala
+++ b/tests/src/test/scala/cats/tests/ApplicativeSuite.scala
@@ -3,41 +3,39 @@ package tests
import cats.Applicative
import cats.kernel.laws.discipline.{MonoidTests, SemigroupTests}
-import cats.data.{Validated, Const}
+import cats.data.{Const, Validated}
import cats.laws.discipline.arbitrary._
import cats.laws.discipline.CoflatMapTests
-
-
class ApplicativeSuite extends CatsSuite {
test("replicateA creates a List of 'n' copies of given Applicative 'fa'") {
val A = Applicative[Option]
val fa = A.pure(1)
- fa.replicateA(5) should === (Some(List(1,1,1,1,1)))
+ fa.replicateA(5) should ===(Some(List(1, 1, 1, 1, 1)))
}
test("whenA return given argument when cond is true") {
forAll { (l: List[Int]) =>
- l.whenA(true) should === (List.fill(l.length)(()))
+ l.whenA(true) should ===(List.fill(l.length)(()))
}
}
test("whenA lift Unit to F when cond is false") {
forAll { (l: List[Int]) =>
- l.whenA(false) should === (List(()))
+ l.whenA(false) should ===(List(()))
}
}
test("unlessA return given argument when cond is false") {
forAll { (l: List[Int]) =>
- l.unlessA(false) should === (List.fill(l.length)(()))
+ l.unlessA(false) should ===(List.fill(l.length)(()))
}
}
test("unlessA lift Unit to F when cond is true") {
forAll { (l: List[Int]) =>
- l.unlessA(true) should === (List(()))
+ l.unlessA(true) should ===(List(()))
}
}
diff --git a/tests/src/test/scala/cats/tests/AsSuite.scala b/tests/src/test/scala/cats/tests/AsSuite.scala
index 33a9742a96..ead924adcc 100644
--- a/tests/src/test/scala/cats/tests/AsSuite.scala
+++ b/tests/src/test/scala/cats/tests/AsSuite.scala
@@ -7,18 +7,16 @@ import cats.arrow.Category
class AsSuite extends CatsSuite {
import evidence._
- def toMap[A, B, X](fa: List[X])(implicit ev: X <~< (A,B)): Map[A,B] = {
+ def toMap[A, B, X](fa: List[X])(implicit ev: X <~< (A, B)): Map[A, B] = {
type RequiredFunc = (Map[A, B], X) => Map[A, B]
type GivenFunc = (Map[A, B], (A, B)) => Map[A, B]
val subst: GivenFunc <~< RequiredFunc = As.contra2_3(ev) //introduced because inference failed on scalajs on 2.10.6
- fa.foldLeft(Map.empty[A,B])(subst(_ + _))
+ fa.foldLeft(Map.empty[A, B])(subst(_ + _))
}
implicit def arbAs[A, B](implicit ev: A <~< B) = Arbitrary(Gen.const(ev))
implicit def eq[A, B]: Eq[As[A, B]] = Eq.fromUniversalEquals
-
-
test("narrow an input of a function2") {
// scala's GenTraversableOnce#toMap has a similar <:< constraint
@@ -40,7 +38,7 @@ class AsSuite extends CatsSuite {
implicitly[String <~< Any]
implicitly[String <~< AnyRef]
implicitly[String <~< AnyRef]
- implicitly[(String,Int) <~< (AnyRef,Any)]
+ implicitly[(String, Int) <~< (AnyRef, Any)]
implicitly[scala.collection.immutable.List[String] <~< scala.collection.Seq[Any]]
}
@@ -55,11 +53,11 @@ class AsSuite extends CatsSuite {
test("subtyping relationships compose") {
- val cAsB: Bottom As Middle = As.reify[Bottom,Middle]
+ val cAsB: Bottom As Middle = As.reify[Bottom, Middle]
val bAsA: Middle As Top = As.fromPredef(implicitly)
- val one: Bottom As Top = cAsB andThen bAsA
- val two: Bottom As Top = bAsA compose cAsB
+ val one: Bottom As Top = cAsB.andThen(bAsA)
+ val two: Bottom As Top = bAsA.compose(cAsB)
}
test("we can use As to coerce a value") {
@@ -79,7 +77,7 @@ class AsSuite extends CatsSuite {
val co3: ((Bottom, Unit, Unit) As (Top, Unit, Unit)) = As.co3(cAsA)
val co3_2: ((Unit, Bottom, Unit) As (Unit, Top, Unit)) = As.co3_2(cAsA)
val co3_3: ((Unit, Unit, Bottom) As (Unit, Unit, Top)) = As.co3_3(cAsA)
- val lift2: ((Bottom, String) As (Top,Any)) = As.lift2(cAsA,implicitly)
+ val lift2: ((Bottom, String) As (Top, Any)) = As.lift2(cAsA, implicitly)
}
test("we can lift subtyping to contravariant type constructors") {
@@ -92,9 +90,9 @@ class AsSuite extends CatsSuite {
val cAsA: (Bottom As Top) = implicitly
val contra: Eat[Top] As Eat[Bottom] = As.contra(cAsA)
- val contra1_2: EatF[Top, Unit] As EatF[Bottom,Unit] = As.contra1_2(cAsA)
- val contra2_2: Eatꟻ[Unit, Top] As Eatꟻ[Unit,Bottom] = As.contra2_2(cAsA)
- val contra1_3: EatF13[Top, Unit,Unit] As EatF13[Bottom, Unit, Unit] = As.contra1_3(cAsA)
+ val contra1_2: EatF[Top, Unit] As EatF[Bottom, Unit] = As.contra1_2(cAsA)
+ val contra2_2: Eatꟻ[Unit, Top] As Eatꟻ[Unit, Bottom] = As.contra2_2(cAsA)
+ val contra1_3: EatF13[Top, Unit, Unit] As EatF13[Bottom, Unit, Unit] = As.contra1_3(cAsA)
val contra2_3: EatF23[Unit, Top, Unit] As EatF23[Unit, Bottom, Unit] = As.contra2_3(cAsA)
val contra3_3: EatF33[Unit, Unit, Top] As EatF33[Unit, Unit, Bottom] = As.contra3_3(cAsA)
}
diff --git a/tests/src/test/scala/cats/tests/BifunctorSuite.scala b/tests/src/test/scala/cats/tests/BifunctorSuite.scala
index e30fda97b6..e2a9409f5a 100644
--- a/tests/src/test/scala/cats/tests/BifunctorSuite.scala
+++ b/tests/src/test/scala/cats/tests/BifunctorSuite.scala
@@ -9,7 +9,8 @@ class BifunctorSuite extends CatsSuite {
val tuple2ComposeEither: Bifunctor[Tuple2Either] =
Bifunctor[Tuple2].compose[Either]
- checkAll("Tuple2 compose Either", BifunctorTests(tuple2ComposeEither).bifunctor[Int, Int, Int, String, String, String])
+ checkAll("Tuple2 compose Either",
+ BifunctorTests(tuple2ComposeEither).bifunctor[Int, Int, Int, String, String, String])
checkAll("Bifunctor[Tuple2 compose Either]", SerializableTests.serializable(tuple2ComposeEither))
{
diff --git a/tests/src/test/scala/cats/tests/BinestedSuite.scala b/tests/src/test/scala/cats/tests/BinestedSuite.scala
index 96e3d5b85b..88e5caa860 100644
--- a/tests/src/test/scala/cats/tests/BinestedSuite.scala
+++ b/tests/src/test/scala/cats/tests/BinestedSuite.scala
@@ -18,29 +18,48 @@ class BinestedSuite extends CatsSuite {
{
// Bifunctor + Functor + Functor = Bifunctor
implicit val instance = ListWrapper.functor
- checkAll("Binested[Either, ListWrapper, Option, ?, ?]", BifunctorTests[Binested[Either, ListWrapper, Option, ?, ?]].bifunctor[Int, Int, Int, String, String, String])
- checkAll("Bifunctor[Binested[Either, ListWrapper, Option, ?, ?]]", SerializableTests.serializable(Bifunctor[Binested[Either, ListWrapper, Option, ?, ?]]))
+ checkAll(
+ "Binested[Either, ListWrapper, Option, ?, ?]",
+ BifunctorTests[Binested[Either, ListWrapper, Option, ?, ?]].bifunctor[Int, Int, Int, String, String, String]
+ )
+ checkAll("Bifunctor[Binested[Either, ListWrapper, Option, ?, ?]]",
+ SerializableTests.serializable(Bifunctor[Binested[Either, ListWrapper, Option, ?, ?]]))
}
{
// Profunctor + Functor + Functor = Profunctor
implicit val instance = ListWrapper.functor
- checkAll("Binested[Function1, ListWrapper, Option, ?, ?]", ProfunctorTests[Binested[Function1, ListWrapper, Option, ?, ?]].profunctor[Int, Int, Int, String, String, String])
- checkAll("Profunctor[Binested[Function1, ListWrapper, Option, ?, ?]]", SerializableTests.serializable(Profunctor[Binested[Function1, ListWrapper, Option, ?, ?]]))
+ checkAll(
+ "Binested[Function1, ListWrapper, Option, ?, ?]",
+ ProfunctorTests[Binested[Function1, ListWrapper, Option, ?, ?]].profunctor[Int, Int, Int, String, String, String]
+ )
+ checkAll("Profunctor[Binested[Function1, ListWrapper, Option, ?, ?]]",
+ SerializableTests.serializable(Profunctor[Binested[Function1, ListWrapper, Option, ?, ?]]))
}
{
// Bifoldable + foldable + foldable = Bifoldable
implicit val instance = ListWrapper.foldable
- checkAll("Binested[Either, ListWrapper, ListWrapper, ?, ?]", BifoldableTests[Binested[Either, ListWrapper, ListWrapper, ?, ?]].bifoldable[Int, Int, Int])
- checkAll("Bifoldable[Binested[Either, ListWrapper, ListWrapper, ?, ?]]", SerializableTests.serializable(Bifoldable[Binested[Either, ListWrapper, ListWrapper, ?, ?]]))
+ checkAll("Binested[Either, ListWrapper, ListWrapper, ?, ?]",
+ BifoldableTests[Binested[Either, ListWrapper, ListWrapper, ?, ?]].bifoldable[Int, Int, Int])
+ checkAll(
+ "Bifoldable[Binested[Either, ListWrapper, ListWrapper, ?, ?]]",
+ SerializableTests.serializable(Bifoldable[Binested[Either, ListWrapper, ListWrapper, ?, ?]])
+ )
}
{
// Bitraverse + traverse + traverse = Bitraverse
implicit val instance = ListWrapper.traverse
- checkAll("Binested[Either, ListWrapper, ListWrapper, ?, ?]", BitraverseTests[Binested[Either, ListWrapper, ListWrapper, ?, ?]].bitraverse[Option, Int, Int, Int, String, String, String])
- checkAll("Bitraverse[Binested[Either, ListWrapper, ListWrapper, ?, ?]]", SerializableTests.serializable(Bitraverse[Binested[Either, ListWrapper, ListWrapper, ?, ?]]))
+ checkAll(
+ "Binested[Either, ListWrapper, ListWrapper, ?, ?]",
+ BitraverseTests[Binested[Either, ListWrapper, ListWrapper, ?, ?]]
+ .bitraverse[Option, Int, Int, Int, String, String, String]
+ )
+ checkAll(
+ "Bitraverse[Binested[Either, ListWrapper, ListWrapper, ?, ?]]",
+ SerializableTests.serializable(Bitraverse[Binested[Either, ListWrapper, ListWrapper, ?, ?]])
+ )
}
test("simple syntax-based usage") {
diff --git a/tests/src/test/scala/cats/tests/BitSetSuite.scala b/tests/src/test/scala/cats/tests/BitSetSuite.scala
index de61ad9d35..305149be35 100644
--- a/tests/src/test/scala/cats/tests/BitSetSuite.scala
+++ b/tests/src/test/scala/cats/tests/BitSetSuite.scala
@@ -9,12 +9,12 @@ class BitSetSuite extends CatsSuite {
implicit val arbitraryBitSet: Arbitrary[BitSet] =
Arbitrary(arbitrary[List[Short]].map(ns => BitSet(ns.map(_ & 0xffff): _*)))
- test("show BitSet"){
- BitSet(1, 1, 2, 3).show should === ("BitSet(1, 2, 3)")
- BitSet.empty.show should === ("BitSet()")
+ test("show BitSet") {
+ BitSet(1, 1, 2, 3).show should ===("BitSet(1, 2, 3)")
+ BitSet.empty.show should ===("BitSet()")
forAll { fs: BitSet =>
- fs.show should === (fs.toString)
+ fs.show should ===(fs.toString)
}
}
diff --git a/tests/src/test/scala/cats/tests/BitraverseSuite.scala b/tests/src/test/scala/cats/tests/BitraverseSuite.scala
index 0664bbda0b..8c8c47e401 100644
--- a/tests/src/test/scala/cats/tests/BitraverseSuite.scala
+++ b/tests/src/test/scala/cats/tests/BitraverseSuite.scala
@@ -8,6 +8,7 @@ class BitraverseSuite extends CatsSuite {
val eitherComposeTuple2: Bitraverse[EitherTuple2] =
Bitraverse[Either].compose[Tuple2]
- checkAll("Either compose Tuple2", BitraverseTests(eitherComposeTuple2).bitraverse[Option, Int, Int, Int, String, String, String])
+ checkAll("Either compose Tuple2",
+ BitraverseTests(eitherComposeTuple2).bitraverse[Option, Int, Int, Int, String, String, String])
checkAll("Bitraverse[Either compose Tuple2]", SerializableTests.serializable(eitherComposeTuple2))
}
diff --git a/tests/src/test/scala/cats/tests/ChainSuite.scala b/tests/src/test/scala/cats/tests/ChainSuite.scala
index b776354939..2f2df8f89f 100644
--- a/tests/src/test/scala/cats/tests/ChainSuite.scala
+++ b/tests/src/test/scala/cats/tests/ChainSuite.scala
@@ -2,7 +2,14 @@ package cats
package tests
import cats.data.Chain
-import cats.laws.discipline.{AlternativeTests, CoflatMapTests, MonadTests, SerializableTests, TraverseFilterTests, TraverseTests}
+import cats.laws.discipline.{
+ AlternativeTests,
+ CoflatMapTests,
+ MonadTests,
+ SerializableTests,
+ TraverseFilterTests,
+ TraverseTests
+}
import cats.kernel.laws.discipline.{EqTests, MonoidTests, OrderTests, PartialOrderTests}
import cats.laws.discipline.arbitrary._
@@ -25,110 +32,105 @@ class ChainSuite extends CatsSuite {
checkAll("Chain[Int]", OrderTests[Chain[Int]].order)
checkAll("Order[Chain]", SerializableTests.serializable(Order[Chain[Int]]))
-
checkAll("Chain[Int]", TraverseFilterTests[Chain].traverseFilter[Int, Int, Int])
checkAll("TraverseFilter[Chain]", SerializableTests.serializable(TraverseFilter[Chain]))
{
implicit val partialOrder = ListWrapper.partialOrder[Int]
- checkAll("Chain[ListWrapper[Int]]",
- PartialOrderTests[Chain[ListWrapper[Int]]].partialOrder)
+ checkAll("Chain[ListWrapper[Int]]", PartialOrderTests[Chain[ListWrapper[Int]]].partialOrder)
checkAll("PartialOrder[Chain[ListWrapper[Int]]",
- SerializableTests.serializable(PartialOrder[Chain[ListWrapper[Int]]]))
+ SerializableTests.serializable(PartialOrder[Chain[ListWrapper[Int]]]))
}
{
implicit val eqv = ListWrapper.eqv[Int]
- checkAll("Chain[ListWrapper[Int]]",
- EqTests[Chain[ListWrapper[Int]]].eqv)
- checkAll("Eq[Chain[ListWrapper[Int]]",
- SerializableTests.serializable(Eq[Chain[ListWrapper[Int]]]))
+ checkAll("Chain[ListWrapper[Int]]", EqTests[Chain[ListWrapper[Int]]].eqv)
+ checkAll("Eq[Chain[ListWrapper[Int]]", SerializableTests.serializable(Eq[Chain[ListWrapper[Int]]]))
}
-
- test("show"){
- Show[Chain[Int]].show(Chain(1, 2, 3)) should === ("Chain(1, 2, 3)")
- Chain.empty[Int].show should === ("Chain()")
+ test("show") {
+ Show[Chain[Int]].show(Chain(1, 2, 3)) should ===("Chain(1, 2, 3)")
+ Chain.empty[Int].show should ===("Chain()")
forAll { l: Chain[String] =>
- l.show should === (l.toString)
+ l.show should ===(l.toString)
}
}
test("size is consistent with toList.size") {
forAll { (ci: Chain[Int]) =>
- ci.size.toInt should === (ci.toList.size)
+ ci.size.toInt should ===(ci.toList.size)
}
}
test("filterNot and then exists should always be false") {
forAll { (ci: Chain[Int], f: Int => Boolean) =>
- ci.filterNot(f).exists(f) should === (false)
+ ci.filterNot(f).exists(f) should ===(false)
}
}
test("filter and then forall should always be true") {
forAll { (ci: Chain[Int], f: Int => Boolean) =>
- ci.filter(f).forall(f) should === (true)
+ ci.filter(f).forall(f) should ===(true)
}
}
test("exists should be consistent with find + isDefined") {
forAll { (ci: Chain[Int], f: Int => Boolean) =>
- ci.exists(f) should === (ci.find(f).isDefined)
+ ci.exists(f) should ===(ci.find(f).isDefined)
}
}
test("deleteFirst consistent with find") {
forAll { (ci: Chain[Int], f: Int => Boolean) =>
- ci.find(f) should === (ci.deleteFirst(f).map(_._1))
+ ci.find(f) should ===(ci.deleteFirst(f).map(_._1))
}
}
test("filterNot element and then contains should be false") {
forAll { (ci: Chain[Int], i: Int) =>
- ci.filterNot(_ === i).contains(i) should === (false)
+ ci.filterNot(_ === i).contains(i) should ===(false)
}
}
test("Always nonempty after cons") {
forAll { (ci: Chain[Int], i: Int) =>
- (i +: ci).nonEmpty should === (true)
+ (i +: ci).nonEmpty should ===(true)
}
}
test("fromSeq . toVector is id") {
forAll { (ci: Chain[Int]) =>
- Chain.fromSeq(ci.toVector) should === (ci)
+ Chain.fromSeq(ci.toVector) should ===(ci)
}
}
test("fromSeq . toList . iterator is id") {
forAll { (ci: Chain[Int]) =>
- Chain.fromSeq(ci.iterator.toList) should === (ci)
+ Chain.fromSeq(ci.iterator.toList) should ===(ci)
}
}
test("zipWith consistent with List#zip and then List#map") {
forAll { (a: Chain[String], b: Chain[Int], f: (String, Int) => Int) =>
- a.zipWith(b)(f).toList should === (a.toList.zip(b.toList).map { case (x, y) => f(x, y) })
+ a.zipWith(b)(f).toList should ===(a.toList.zip(b.toList).map { case (x, y) => f(x, y) })
}
}
test("groupBy consistent with List#groupBy") {
forAll { (cs: Chain[String], f: String => Int) =>
- cs.groupBy(f).map { case (k, v) => (k, v.toList) }.toMap should === (cs.toList.groupBy(f).toMap)
+ cs.groupBy(f).map { case (k, v) => (k, v.toList) }.toMap should ===(cs.toList.groupBy(f).toMap)
}
}
test("reverse . reverse is id") {
forAll { (ci: Chain[Int]) =>
- ci.reverse.reverse should === (ci)
+ ci.reverse.reverse should ===(ci)
}
}
test("reverse consistent with List#reverse") {
forAll { (ci: Chain[Int]) =>
- ci.reverse.toList should === (ci.toList.reverse)
+ ci.reverse.toList should ===(ci.toList.reverse)
}
}
@@ -157,7 +159,7 @@ class ChainSuite extends CatsSuite {
forAll { (a: Chain[Int]) =>
val it = a.iterator
- while(it.hasNext) it.next
+ while (it.hasNext) it.next
intercept[java.util.NoSuchElementException] {
it.next
@@ -165,7 +167,7 @@ class ChainSuite extends CatsSuite {
val rit = a.reverseIterator
- while(rit.hasNext) rit.next
+ while (rit.hasNext) rit.next
intercept[java.util.NoSuchElementException] {
rit.next
diff --git a/tests/src/test/scala/cats/tests/CokleisliSuite.scala b/tests/src/test/scala/cats/tests/CokleisliSuite.scala
index 7ffa5f5bad..57e3520c0b 100644
--- a/tests/src/test/scala/cats/tests/CokleisliSuite.scala
+++ b/tests/src/test/scala/cats/tests/CokleisliSuite.scala
@@ -12,9 +12,8 @@ import org.scalacheck.Arbitrary
class CokleisliSuite extends SlowCatsSuite {
implicit override val generatorDrivenConfig: PropertyCheckConfiguration =
- slowCheckConfiguration.copy(
- sizeRange = slowCheckConfiguration.sizeRange.min(5),
- minSuccessful = slowCheckConfiguration.minSuccessful.min(20))
+ slowCheckConfiguration.copy(sizeRange = slowCheckConfiguration.sizeRange.min(5),
+ minSuccessful = slowCheckConfiguration.minSuccessful.min(20))
implicit def cokleisliEq[F[_], A, B](implicit A: Arbitrary[F[A]], FB: Eq[B]): Eq[Cokleisli[F, A, B]] =
Eq.by[Cokleisli[F, A, B], F[A] => B](_.run)
@@ -25,38 +24,45 @@ class CokleisliSuite extends SlowCatsSuite {
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Cokleisli[Option, Int, ?]]
checkAll("Cokleisli[Option, Int, Int]", SemigroupalTests[Cokleisli[Option, Int, ?]].semigroupal[Int, Int, Int])
- checkAll("Semigroupal[Cokleisli[Option, Int, ?]]", SerializableTests.serializable(Semigroupal[Cokleisli[Option, Int, ?]]))
+ checkAll("Semigroupal[Cokleisli[Option, Int, ?]]",
+ SerializableTests.serializable(Semigroupal[Cokleisli[Option, Int, ?]]))
checkAll("Cokleisli[Option, Int, Int]", MonadTests[Cokleisli[Option, Int, ?]].monad[Int, Int, Int])
checkAll("Monad[Cokleisli[Option, Int, ?]]", SerializableTests.serializable(Monad[Cokleisli[Option, Int, ?]]))
- checkAll("Cokleisli[Option, Int, Int]", ProfunctorTests[Cokleisli[Option, ?, ?]].profunctor[Int, Int, Int, Int, Int, Int])
+ checkAll("Cokleisli[Option, Int, Int]",
+ ProfunctorTests[Cokleisli[Option, ?, ?]].profunctor[Int, Int, Int, Int, Int, Int])
checkAll("Profunctor[Cokleisli[Option, ?, ?]]", SerializableTests.serializable(Profunctor[Cokleisli[Option, ?, ?]]))
checkAll("Cokleisli[Option, Int, Int]", ContravariantTests[Cokleisli[Option, ?, Int]].contravariant[Int, Int, Int])
- checkAll("Contravariant[Cokleisli[Option, ?, Int]]", SerializableTests.serializable(Contravariant[Cokleisli[Option, ?, Int]]))
-
+ checkAll("Contravariant[Cokleisli[Option, ?, Int]]",
+ SerializableTests.serializable(Contravariant[Cokleisli[Option, ?, Int]]))
checkAll("Cokleisli[NonEmptyList, Int, Int]", MonoidKTests[λ[α => Cokleisli[NonEmptyList, α, α]]].monoidK[Int])
- checkAll("MonoidK[λ[α => Cokleisli[NonEmptyList, α, α]]]", SerializableTests.serializable(MonoidK[λ[α => Cokleisli[NonEmptyList, α, α]]]))
+ checkAll("MonoidK[λ[α => Cokleisli[NonEmptyList, α, α]]]",
+ SerializableTests.serializable(MonoidK[λ[α => Cokleisli[NonEmptyList, α, α]]]))
checkAll("Cokleisli[List, Int, Int]", SemigroupKTests[λ[α => Cokleisli[List, α, α]]].semigroupK[Int])
- checkAll("SemigroupK[λ[α => Cokleisli[List, α, α]]]", SerializableTests.serializable(SemigroupK[λ[α => Cokleisli[List, α, α]]]))
+ checkAll("SemigroupK[λ[α => Cokleisli[List, α, α]]]",
+ SerializableTests.serializable(SemigroupK[λ[α => Cokleisli[List, α, α]]]))
- checkAll("Cokleisli[NonEmptyList, Int, Int]", ArrowTests[Cokleisli[NonEmptyList, ?, ?]].arrow[Int, Int, Int, Int, Int, Int])
+ checkAll("Cokleisli[NonEmptyList, Int, Int]",
+ ArrowTests[Cokleisli[NonEmptyList, ?, ?]].arrow[Int, Int, Int, Int, Int, Int])
checkAll("Arrow[Cokleisli[NonEmptyList, ?, ?]]", SerializableTests.serializable(Arrow[Cokleisli[NonEmptyList, ?, ?]]))
{
implicit def cokleisliIdEq[A, B](implicit A: Arbitrary[A], FB: Eq[B]): Eq[Cokleisli[Id, A, B]] =
Eq.by[Cokleisli[Id, A, B], A => B](_.run)
- checkAll("Cokleisli[Id, Int, Int]", CommutativeArrowTests[Cokleisli[Id, ?, ?]].commutativeArrow[Int, Int, Int, Int, Int, Int])
- checkAll("CommutativeArrow[Cokleisli[Id, ?, ?]]", SerializableTests.serializable(CommutativeArrow[Cokleisli[Id, ?, ?]]))
+ checkAll("Cokleisli[Id, Int, Int]",
+ CommutativeArrowTests[Cokleisli[Id, ?, ?]].commutativeArrow[Int, Int, Int, Int, Int, Int])
+ checkAll("CommutativeArrow[Cokleisli[Id, ?, ?]]",
+ SerializableTests.serializable(CommutativeArrow[Cokleisli[Id, ?, ?]]))
}
- test("contramapValue with Id consistent with lmap"){
+ test("contramapValue with Id consistent with lmap") {
forAll { (c: Cokleisli[Id, Int, Long], f: Char => Int) =>
- c.contramapValue[Char](f) should === (c.lmap(f))
+ c.contramapValue[Char](f) should ===(c.lmap(f))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/ConstSuite.scala b/tests/src/test/scala/cats/tests/ConstSuite.scala
index 80a658b26e..3b1a10d9b7 100644
--- a/tests/src/test/scala/cats/tests/ConstSuite.scala
+++ b/tests/src/test/scala/cats/tests/ConstSuite.scala
@@ -18,7 +18,8 @@ class ConstSuite extends CatsSuite {
checkAll("Const[String, Int]", ApplicativeTests[Const[String, ?]].applicative[Int, Int, Int])
checkAll("Applicative[Const[String, ?]]", SerializableTests.serializable(Applicative[Const[String, ?]]))
- checkAll("Const[String, Int] with Option", TraverseTests[Const[String, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("Const[String, Int] with Option",
+ TraverseTests[Const[String, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[Const[String, ?]]", SerializableTests.serializable(Traverse[Const[String, ?]]))
checkAll("Const[String, Int]", TraverseFilterTests[Const[String, ?]].traverseFilter[Int, Int, Int])
@@ -27,9 +28,11 @@ class ConstSuite extends CatsSuite {
// Get Apply[Const[C : Semigroup, ?]], not Applicative[Const[C : Monoid, ?]]
{
implicit def nonEmptyListSemigroup[A]: Semigroup[NonEmptyList[A]] = SemigroupK[NonEmptyList].algebra
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[Const[NonEmptyList[String], ?]](Const.catsDataContravariantForConst)
+ implicit val iso =
+ SemigroupalTests.Isomorphisms.invariant[Const[NonEmptyList[String], ?]](Const.catsDataContravariantForConst)
checkAll("Apply[Const[NonEmptyList[String], Int]]", ApplyTests[Const[NonEmptyList[String], ?]].apply[Int, Int, Int])
- checkAll("Apply[Const[NonEmptyList[String], ?]]", SerializableTests.serializable(Apply[Const[NonEmptyList[String], ?]]))
+ checkAll("Apply[Const[NonEmptyList[String], ?]]",
+ SerializableTests.serializable(Apply[Const[NonEmptyList[String], ?]]))
}
// Algebra checks for Serializability of instances as part of the laws
@@ -57,23 +60,25 @@ class ConstSuite extends CatsSuite {
checkAll("Contravariant[Const[String, ?]]", SerializableTests.serializable(Contravariant[Const[String, ?]]))
checkAll("Const[String, Int]", ContravariantMonoidalTests[Const[String, ?]].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Const[String, ?]]", SerializableTests.serializable(ContravariantMonoidal[Const[String, ?]]))
+ checkAll("ContravariantMonoidal[Const[String, ?]]",
+ SerializableTests.serializable(ContravariantMonoidal[Const[String, ?]]))
checkAll("Const[?, ?]", BifoldableTests[Const].bifoldable[Int, Int, Int])
checkAll("Bifoldable[Const]", SerializableTests.serializable(Bifoldable[Const]))
- checkAll("InvariantMonoidal[Const[String, ?]]", InvariantMonoidalTests[Const[String, ?]].invariantMonoidal[Int, Int, Int])
+ checkAll("InvariantMonoidal[Const[String, ?]]",
+ InvariantMonoidalTests[Const[String, ?]].invariantMonoidal[Int, Int, Int])
checkAll("InvariantMonoidal[Const[String, ?]]", SerializableTests.serializable(InvariantMonoidal[Const[String, ?]]))
test("show") {
- Const(1).show should === ("Const(1)")
+ Const(1).show should ===("Const(1)")
forAll { const: Const[Int, String] =>
- const.show.startsWith("Const(") should === (true)
+ const.show.startsWith("Const(") should ===(true)
const.show.contains(const.getConst.show)
- const.show should === (implicitly[Show[Const[Int, String]]].show(const))
- const.show should === (const.retag[Boolean].show)
+ const.show should ===(implicitly[Show[Const[Int, String]]].show(const))
+ const.show should ===(const.retag[Boolean].show)
}
}
@@ -83,7 +88,8 @@ class ConstSuite extends CatsSuite {
{
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Const[CMono, ?]](Const.catsDataFunctorForConst)
checkAll("Const[CMono, Int]", CommutativeApplicativeTests[Const[CMono, ?]].commutativeApplicative[Int, Int, Int])
- checkAll("CommutativeApplicative[Const[CMono, ?]]", SerializableTests.serializable(CommutativeApplicative[Const[CMono, ?]]))
+ checkAll("CommutativeApplicative[Const[CMono, ?]]",
+ SerializableTests.serializable(CommutativeApplicative[Const[CMono, ?]]))
}
checkAll("Const[CSemi, Int]", CommutativeApplyTests[Const[CSemi, ?]].commutativeApply[Int, Int, Int])
diff --git a/tests/src/test/scala/cats/tests/ContravariantSuite.scala b/tests/src/test/scala/cats/tests/ContravariantSuite.scala
index 3524633c45..189005977f 100644
--- a/tests/src/test/scala/cats/tests/ContravariantSuite.scala
+++ b/tests/src/test/scala/cats/tests/ContravariantSuite.scala
@@ -12,12 +12,12 @@ class ContravariantSuite extends CatsSuite {
test("narrow equals contramap(identity)") {
implicit val constInst = Const.catsDataContravariantForConst[Int]
- implicit val canEqual: CanEqual[cats.data.Const[Int,Some[Int]],cats.data.Const[Int,Some[Int]]] =
+ implicit val canEqual: CanEqual[cats.data.Const[Int, Some[Int]], cats.data.Const[Int, Some[Int]]] =
StrictCatsEquality.lowPriorityConversionCheckedConstraint
forAll { (i: Int) =>
val const: Const[Int, Option[Int]] = Const[Int, Option[Int]](i)
val narrowed: Const[Int, Some[Int]] = constInst.narrow[Option[Int], Some[Int]](const)
- narrowed should === (constInst.contramap(const)(identity[Option[Int]](_: Some[Int])))
+ narrowed should ===(constInst.contramap(const)(identity[Option[Int]](_: Some[Int])))
assert(narrowed eq const)
}
}
@@ -30,17 +30,17 @@ class ContravariantSuite extends CatsSuite {
def product[A, B](fa: Predicate[A], fb: Predicate[B]): Predicate[(A, B)] =
Predicate(x => fa.run(x._1) && fb.run(x._2))
def contramap[A, B](fa: Predicate[A])(f: B => A): Predicate[B] =
- Predicate(x => fa.run(f(x)))
+ Predicate(x => fa.run(f(x)))
}
implicit def eqPredicate[A: Arbitrary]: Eq[Predicate[A]] =
Eq.by[Predicate[A], A => Boolean](_.run)
-
implicit def arbPredicate[A: Cogen]: Arbitrary[Predicate[A]] =
Arbitrary(implicitly[Arbitrary[A => Boolean]].arbitrary.map(f => Predicate(f)))
- checkAll("ContravariantMonoidal[Predicate]", ContravariantMonoidalTests[Predicate].contravariantMonoidal[Int, Int, Int])
+ checkAll("ContravariantMonoidal[Predicate]",
+ ContravariantMonoidalTests[Predicate].contravariantMonoidal[Int, Int, Int])
{
implicit val predicateMonoid = ContravariantMonoidal.monoid[Predicate, Int]
diff --git a/tests/src/test/scala/cats/tests/CsvCodecInvariantMonoidalSuite.scala b/tests/src/test/scala/cats/tests/CsvCodecInvariantMonoidalSuite.scala
index 96cbf7d18d..b828cacb0a 100644
--- a/tests/src/test/scala/cats/tests/CsvCodecInvariantMonoidalSuite.scala
+++ b/tests/src/test/scala/cats/tests/CsvCodecInvariantMonoidalSuite.scala
@@ -20,6 +20,7 @@ object CsvCodecInvariantMonoidalSuite {
* `forAll { (a: A) => g(f(a)) == a }`.
*/
trait CsvCodec[A] extends Serializable { self =>
+
/** Reads the first value of a CSV, returning an optional value of type `A` and the remaining CSV. */
def read(s: CSV): (Option[A], CSV)
@@ -43,7 +44,7 @@ object CsvCodecInvariantMonoidalSuite {
def read(s: CSV): (Option[(A, B)], CSV) = {
val (a1, s1) = fa.read(s)
val (a2, s2) = fb.read(s1)
- ((a1, a2).mapN(_ -> _), s2)
+ ((a1, a2).mapN(_ -> _), s2)
}
def write(a: (A, B)): CSV =
@@ -82,7 +83,8 @@ object CsvCodecInvariantMonoidalSuite {
implicit def csvCodecsEq[A](implicit a: Arbitrary[A], e: Eq[A]): Eq[CsvCodec[A]] = {
val writeEq: Eq[CsvCodec[A]] = Eq.by[CsvCodec[A], A => CSV](_.write)(catsLawsEqForFn1[A, CSV])
- val readEq: Eq[CsvCodec[A]] = Eq.by[CsvCodec[A], CSV => (Option[A], CSV)](_.read)(catsLawsEqForFn1[CSV, (Option[A], CSV)])
+ val readEq: Eq[CsvCodec[A]] =
+ Eq.by[CsvCodec[A], CSV => (Option[A], CSV)](_.read)(catsLawsEqForFn1[CSV, (Option[A], CSV)])
Eq.and(writeEq, readEq)
}
}
diff --git a/tests/src/test/scala/cats/tests/DurationSuite.scala b/tests/src/test/scala/cats/tests/DurationSuite.scala
index 693093d26d..dcd6d2a202 100644
--- a/tests/src/test/scala/cats/tests/DurationSuite.scala
+++ b/tests/src/test/scala/cats/tests/DurationSuite.scala
@@ -8,11 +8,11 @@ import scala.concurrent.duration.{Duration, DurationInt}
class DurationSuite extends CatsSuite {
checkAll("Show[Duration]", SerializableTests.serializable(Show[Duration]))
- test("show works for FiniteDuration"){
+ test("show works for FiniteDuration") {
Show[Duration].show(23.minutes) should ===("23 minutes")
}
- test("show works for non-finite durations"){
+ test("show works for non-finite durations") {
Show[Duration].show(Duration.Inf) should ===("Duration.Inf")
Show[Duration].show(Duration.MinusInf) should ===("Duration.MinusInf")
Show[Duration].show(Duration.Undefined) should ===("Duration.Undefined")
diff --git a/tests/src/test/scala/cats/tests/EitherKSuite.scala b/tests/src/test/scala/cats/tests/EitherKSuite.scala
index 9871f8faf0..04b63260ca 100644
--- a/tests/src/test/scala/cats/tests/EitherKSuite.scala
+++ b/tests/src/test/scala/cats/tests/EitherKSuite.scala
@@ -9,13 +9,15 @@ import cats.laws.discipline.eq._
class EitherKSuite extends CatsSuite {
- checkAll("EitherK[Option, Option, ?]", TraverseTests[EitherK[Option, Option, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("EitherK[Option, Option, ?]",
+ TraverseTests[EitherK[Option, Option, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[EitherK[Option, Option, ?]]", SerializableTests.serializable(Traverse[EitherK[Option, Option, ?]]))
{
implicit val foldable = EitherK.catsDataFoldableForEitherK[Option, Option]
checkAll("EitherK[Option, Option, ?]", FoldableTests[EitherK[Option, Option, ?]].foldable[Int, Int])
- checkAll("Foldable[EitherK[Option, Option, ?]]", SerializableTests.serializable(Foldable[EitherK[Option, Option, ?]]))
+ checkAll("Foldable[EitherK[Option, Option, ?]]",
+ SerializableTests.serializable(Foldable[EitherK[Option, Option, ?]]))
}
checkAll("EitherK[Eval, Eval, ?]", ComonadTests[EitherK[Eval, Eval, ?]].comonad[Int, Int, Int])
@@ -31,7 +33,8 @@ class EitherKSuite extends CatsSuite {
checkAll("Eq[EitherK[Option, Option, Int]]", SerializableTests.serializable(Eq[EitherK[Option, Option, Int]]))
checkAll("EitherK[Show, Show, ?]", ContravariantTests[EitherK[Show, Show, ?]].contravariant[Int, Int, Int])
- checkAll("Contravariant[EitherK[Show, Show, ?]]", SerializableTests.serializable(Contravariant[EitherK[Show, Show, ?]]))
+ checkAll("Contravariant[EitherK[Show, Show, ?]]",
+ SerializableTests.serializable(Contravariant[EitherK[Show, Show, ?]]))
test("double swap is identity") {
forAll { (x: EitherK[Option, Option, Int]) =>
@@ -41,20 +44,20 @@ class EitherKSuite extends CatsSuite {
test("swap negates isLeft/isRight") {
forAll { (x: EitherK[Option, Option, Int]) =>
- x.isLeft should !== (x.swap.isLeft)
- x.isRight should !== (x.swap.isRight)
+ x.isLeft should !==(x.swap.isLeft)
+ x.isRight should !==(x.swap.isRight)
}
}
test("isLeft consistent with isRight") {
forAll { (x: EitherK[Option, Option, Int]) =>
- x.isLeft should !== (x.isRight)
+ x.isLeft should !==(x.isRight)
}
}
test("toValidated + toEither is identity") {
forAll { (x: EitherK[Option, List, Int]) =>
- x.toValidated.toEither should === (x.run)
+ x.toValidated.toEither should ===(x.run)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/EitherSuite.scala b/tests/src/test/scala/cats/tests/EitherSuite.scala
index 05e81e073b..ed7c892729 100644
--- a/tests/src/test/scala/cats/tests/EitherSuite.scala
+++ b/tests/src/test/scala/cats/tests/EitherSuite.scala
@@ -1,9 +1,9 @@
package cats
package tests
-import cats.data.{ EitherT, Validated, NonEmptySet, NonEmptyChain, NonEmptyList }
+import cats.data.{EitherT, NonEmptyChain, NonEmptyList, NonEmptySet, Validated}
import cats.laws.discipline._
-import cats.kernel.laws.discipline.{MonoidTests, SemigroupTests, OrderTests, PartialOrderTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, MonoidTests, OrderTests, PartialOrderTests, SemigroupTests}
import scala.util.Try
class EitherSuite extends CatsSuite {
@@ -27,10 +27,12 @@ class EitherSuite extends CatsSuite {
checkAll("Bitraverse[Either]", SerializableTests.serializable(Bitraverse[Either]))
checkAll("Either[ListWrapper[String], ?]", SemigroupKTests[Either[ListWrapper[String], ?]].semigroupK[Int])
- checkAll("SemigroupK[Either[ListWrapper[String], ?]]", SerializableTests.serializable(SemigroupK[Either[ListWrapper[String], ?]]))
+ checkAll("SemigroupK[Either[ListWrapper[String], ?]]",
+ SerializableTests.serializable(SemigroupK[Either[ListWrapper[String], ?]]))
checkAll("Either[ListWrapper[String], Int]", SemigroupTests[Either[ListWrapper[String], Int]].semigroup)
- checkAll("Semigroup[Either[ListWrapper[String], Int]]", SerializableTests.serializable(Semigroup[Either[ListWrapper[String], Int]]))
+ checkAll("Semigroup[Either[ListWrapper[String], Int]]",
+ SerializableTests.serializable(Semigroup[Either[ListWrapper[String], Int]]))
val partialOrder = catsStdPartialOrderForEither[Int, String]
val order = implicitly[Order[Either[Int, String]]]
@@ -40,8 +42,10 @@ class EitherSuite extends CatsSuite {
{
implicit val S = ListWrapper.eqv[String]
implicit val I = ListWrapper.eqv[Int]
- checkAll("Either[ListWrapper[String], ListWrapper[Int]]", EqTests[Either[ListWrapper[String], ListWrapper[Int]]].eqv)
- checkAll("Eq[Either[ListWrapper[String], ListWrapper[Int]]]", SerializableTests.serializable(Eq[Either[ListWrapper[String], ListWrapper[Int]]]))
+ checkAll("Either[ListWrapper[String], ListWrapper[Int]]",
+ EqTests[Either[ListWrapper[String], ListWrapper[Int]]].eqv)
+ checkAll("Eq[Either[ListWrapper[String], ListWrapper[Int]]]",
+ SerializableTests.serializable(Eq[Either[ListWrapper[String], ListWrapper[Int]]]))
}
checkAll("Either[Int, String]", PartialOrderTests[Either[Int, String]](partialOrder).partialOrder)
@@ -50,7 +54,7 @@ class EitherSuite extends CatsSuite {
test("Left/Right cast syntax") {
forAll { (e: Either[Int, String]) =>
e match {
- case l @ Left(_) =>
+ case l @ Left(_) =>
l.rightCast[Double]: Either[Int, Double]
assert(true)
case r @ Right(_) =>
@@ -76,104 +80,106 @@ class EitherSuite extends CatsSuite {
test("show isn't empty") {
forAll { (e: Either[Int, String]) =>
- show.show(e).nonEmpty should === (true)
+ show.show(e).nonEmpty should ===(true)
}
}
test("map2Eval is lazy") {
val bomb: Eval[Either[String, Int]] = Later(sys.error("boom"))
val x: Either[String, Int] = Left("l")
- x.map2Eval(bomb)(_ + _).value should === (x)
+ x.map2Eval(bomb)(_ + _).value should ===(x)
}
test("catchOnly lets non-matching exceptions escape") {
val _ = intercept[NumberFormatException] {
- Either.catchOnly[IndexOutOfBoundsException]{ "foo".toInt }
+ Either.catchOnly[IndexOutOfBoundsException] { "foo".toInt }
}
}
test("catchNonFatal catches non-fatal exceptions") {
- assert(Either.catchNonFatal{ "foo".toInt }.isLeft)
- assert(Either.catchNonFatal{ throw new Throwable("blargh") }.isLeft)
+ assert(Either.catchNonFatal { "foo".toInt }.isLeft)
+ assert(Either.catchNonFatal { throw new Throwable("blargh") }.isLeft)
}
test("fromTry is left for failed Try") {
forAll { t: Try[Int] =>
- t.isFailure should === (Either.fromTry(t).isLeft)
+ t.isFailure should ===(Either.fromTry(t).isLeft)
}
}
test("fromOption isLeft consistent with Option.isEmpty") {
forAll { (o: Option[Int], s: String) =>
- Either.fromOption(o, s).isLeft should === (o.isEmpty)
+ Either.fromOption(o, s).isLeft should ===(o.isEmpty)
}
}
test("leftNel is consistent with left(NEL)") {
forAll { s: String =>
- Either.leftNel[String, Int](s) should === (Either.left[NonEmptyList[String], Int](NonEmptyList.one(s)))
+ Either.leftNel[String, Int](s) should ===(Either.left[NonEmptyList[String], Int](NonEmptyList.one(s)))
}
}
test("rightNel is consistent with right") {
forAll { i: Int =>
- Either.rightNel[String, Int](i) should === (Either.right[NonEmptyList[String], Int](i))
+ Either.rightNel[String, Int](i) should ===(Either.right[NonEmptyList[String], Int](i))
}
}
test("double swap is identity") {
forAll { (x: Either[Int, String]) =>
- x.swap.swap should === (x)
+ x.swap.swap should ===(x)
}
}
test("leftNec is consistent with left(NEC)") {
forAll { s: String =>
- Either.leftNec[String, Int](s) should === (Either.left[NonEmptyChain[String], Int](NonEmptyChain.one(s)))
+ Either.leftNec[String, Int](s) should ===(Either.left[NonEmptyChain[String], Int](NonEmptyChain.one(s)))
}
}
test("rightNec is consistent with right") {
forAll { i: Int =>
- Either.rightNec[String, Int](i) should === (Either.right[NonEmptyChain[String], Int](i))
+ Either.rightNec[String, Int](i) should ===(Either.right[NonEmptyChain[String], Int](i))
}
}
test("leftNes is consistent with left(NES)") {
forAll { s: String =>
- Either.leftNes[String, Int](s) should === (Either.left[NonEmptySet[String], Int](NonEmptySet.one(s)))
+ Either.leftNes[String, Int](s) should ===(Either.left[NonEmptySet[String], Int](NonEmptySet.one(s)))
}
}
test("rightNes is consistent with right") {
forAll { i: Int =>
- Either.rightNes[String, Int](i) should === (Either.right[NonEmptySet[String], Int](i))
+ Either.rightNes[String, Int](i) should ===(Either.right[NonEmptySet[String], Int](i))
}
}
test("swap negates isLeft/isRight") {
forAll { (x: Either[Int, String]) =>
- x.isLeft should !== (x.swap.isLeft)
- x.isRight should !== (x.swap.isRight)
+ x.isLeft should !==(x.swap.isLeft)
+ x.isRight should !==(x.swap.isRight)
}
}
test("isLeft consistent with isRight") {
forAll { (x: Either[Int, String]) =>
- x.isLeft should !== (x.isRight)
+ x.isLeft should !==(x.isRight)
}
}
test("foreach is noop for left") {
forAll { (x: Either[Int, String]) =>
var count = 0
- x.foreach{ _ => count += 1}
- (count == 0) should === (x.isLeft)
+ x.foreach { _ =>
+ count += 1
+ }
+ (count == 0) should ===(x.isLeft)
}
}
test("getOrElse ignores default for right") {
forAll { (x: Either[Int, String], s: String, t: String) =>
if (x.isRight) {
- x.getOrElse(s) should === (x.getOrElse(t))
+ x.getOrElse(s) should ===(x.getOrElse(t))
}
}
}
@@ -181,50 +187,50 @@ class EitherSuite extends CatsSuite {
test("orElse") {
forAll { (x: Either[Int, String], y: Either[Int, String]) =>
val z = x.orElse(y)
- (z === (x)) || (z === (y)) should === (true)
+ (z === (x)) || (z === (y)) should ===(true)
}
}
test("recover recovers handled values") {
val either = Either.left[String, Int]("either")
- either.recover { case "either" => 5 }.isRight should === (true)
+ either.recover { case "either" => 5 }.isRight should ===(true)
}
test("recover ignores unhandled values") {
val either = Either.left[String, Int]("either")
- either.recover { case "noteither" => 5 } should === (either)
+ either.recover { case "noteither" => 5 } should ===(either)
}
test("recover ignores the right side") {
val either = Either.right[String, Int](10)
- either.recover { case "either" => 5 } should === (either)
+ either.recover { case "either" => 5 } should ===(either)
}
test("recoverWith recovers handled values") {
val either = Either.left[String, Int]("either")
- either.recoverWith { case "either" => Either.right[String, Int](5) }.isRight should === (true)
+ either.recoverWith { case "either" => Either.right[String, Int](5) }.isRight should ===(true)
}
test("recoverWith ignores unhandled values") {
val either = Either.left[String, Int]("either")
- either.recoverWith { case "noteither" => Either.right[String, Int](5) } should === (either)
+ either.recoverWith { case "noteither" => Either.right[String, Int](5) } should ===(either)
}
test("recoverWith ignores the right side") {
val either = Either.right[String, Int](10)
- either.recoverWith { case "either" => Either.right[String, Int](5) } should === (either)
+ either.recoverWith { case "either" => Either.right[String, Int](5) } should ===(either)
}
test("valueOr consistent with swap then map then merge") {
forAll { (x: Either[Int, String], f: Int => String) =>
- x.valueOr(f) should === (x.swap.map(f).merge)
+ x.valueOr(f) should ===(x.swap.map(f).merge)
}
}
test("isLeft implies forall") {
forAll { (x: Either[Int, String], p: String => Boolean) =>
if (x.isLeft) {
- x.forall(p) should === (true)
+ x.forall(p) should ===(true)
}
}
}
@@ -232,14 +238,14 @@ class EitherSuite extends CatsSuite {
test("isLeft implies exists is false") {
forAll { (x: Either[Int, String], p: String => Boolean) =>
if (x.isLeft) {
- x.exists(p) should === (false)
+ x.exists(p) should ===(false)
}
}
}
test("toIor then toEither is identity") {
forAll { (x: Either[Int, String]) =>
- x.toIor.toEither should === (x)
+ x.toIor.toEither should ===(x)
}
}
@@ -247,113 +253,112 @@ class EitherSuite extends CatsSuite {
implicit def eqTh: Eq[Throwable] = Eq.allEqual
forAll { (x: Throwable Either String) =>
- Either.fromTry(x.toTry) should === (x)
+ Either.fromTry(x.toTry) should ===(x)
}
}
test("isLeft consistency") {
forAll { (x: Either[Int, String]) =>
- x.isLeft should === (x.toOption.isEmpty)
- x.isLeft should === (x.toList.isEmpty)
- x.isLeft should === (x.toValidated.isInvalid)
- x.isLeft should === (x.toValidatedNel.isInvalid)
- x.isLeft should === (x.toValidatedNec.isInvalid)
- Option(x.isLeft) should === (x.toEitherT[Option].isLeft)
+ x.isLeft should ===(x.toOption.isEmpty)
+ x.isLeft should ===(x.toList.isEmpty)
+ x.isLeft should ===(x.toValidated.isInvalid)
+ x.isLeft should ===(x.toValidatedNel.isInvalid)
+ x.isLeft should ===(x.toValidatedNec.isInvalid)
+ Option(x.isLeft) should ===(x.toEitherT[Option].isLeft)
}
}
test("withValidated") {
forAll { (x: Either[Int, String], f: Int => Double) =>
- x.withValidated(_.bimap(f, identity)) should === (x.leftMap(f))
+ x.withValidated(_.bimap(f, identity)) should ===(x.leftMap(f))
}
}
test("combine is right iff both operands are right") {
forAll { (x: Either[Int, String], y: Either[Int, String]) =>
- x.combine(y).isRight should === (x.isRight && y.isRight)
+ x.combine(y).isRight should ===(x.isRight && y.isRight)
}
}
test("to consistent with toList") {
forAll { (x: Either[Int, String]) =>
- x.to[List] should === (x.toList)
+ x.to[List] should ===(x.toList)
}
}
test("to consistent with toOption") {
forAll { (x: Either[Int, String]) =>
- x.to[Option] should === (x.toOption)
+ x.to[Option] should ===(x.toOption)
}
}
test("partialCompare consistent with PartialOrder") {
- forAll { (x: Either[Int, String], y: Either[Int, String]) =>
- x.partialCompare(y) should === (partialOrder.partialCompare(x, y))
+ forAll { (x: Either[Int, String], y: Either[Int, String]) =>
+ x.partialCompare(y) should ===(partialOrder.partialCompare(x, y))
}
}
test("toEitherNec Left") {
val either = Either.left[String, Int]("oops")
- either.toEitherNec should === (Either.left[NonEmptyChain[String], Int](NonEmptyChain.one("oops")))
+ either.toEitherNec should ===(Either.left[NonEmptyChain[String], Int](NonEmptyChain.one("oops")))
}
test("toEitherNec Right") {
val either = Either.right[String, Int](42)
- either.toEitherNec should === (Either.right[NonEmptyChain[String], Int](42))
+ either.toEitherNec should ===(Either.right[NonEmptyChain[String], Int](42))
}
test("toEitherNes Left") {
val either = Either.left[String, Int]("oops")
- either.toEitherNes should === (Either.left[NonEmptySet[String], Int](NonEmptySet.one("oops")))
+ either.toEitherNes should ===(Either.left[NonEmptySet[String], Int](NonEmptySet.one("oops")))
}
test("toEitherNes Right") {
val either = Either.right[String, Int](42)
- either.toEitherNes should === (Either.right[NonEmptySet[String], Int](42))
+ either.toEitherNes should ===(Either.right[NonEmptySet[String], Int](42))
}
test("show Right") {
val either = Either.right[String, Int](10)
- either.show should === ("Right(10)")
+ either.show should ===("Right(10)")
}
test("show Left") {
val either = Either.left[String, Int]("string")
- either.show should === ("Left(string)")
+ either.show should ===("Left(string)")
}
test("toEitherNel Left") {
val either = Either.left[String, Int]("oops")
- either.toEitherNel should === (Either.left[NonEmptyList[String], Int](NonEmptyList.one("oops")))
+ either.toEitherNel should ===(Either.left[NonEmptyList[String], Int](NonEmptyList.one("oops")))
}
test("toEitherNel Right") {
val either = Either.right[String, Int](42)
- either.toEitherNel should === (Either.right[NonEmptyList[String], Int](42))
+ either.toEitherNel should ===(Either.right[NonEmptyList[String], Int](42))
}
test("ap consistent with Applicative") {
val fab = implicitly[Applicative[Either[String, ?]]]
- forAll { (fa: Either[String, Int],
- f: Int => String) =>
- fa.ap(Either.right(f)) should === (fab.map(fa)(f))
+ forAll { (fa: Either[String, Int], f: Int => String) =>
+ fa.ap(Either.right(f)) should ===(fab.map(fa)(f))
}
}
test("raiseOrPure syntax consistent with fromEither") {
val ev = ApplicativeError[Validated[String, ?], String]
forAll { (fa: Either[String, Int]) =>
- fa.raiseOrPure[Validated[String, ?]] should === (ev.fromEither(fa))
+ fa.raiseOrPure[Validated[String, ?]] should ===(ev.fromEither(fa))
}
}
test("leftFlatMap consistent with leftMap") {
forAll { (either: Either[String, Int], f: String => String) =>
- either.leftFlatMap(v => Left(f(v))) should === (either.leftMap(f))
+ either.leftFlatMap(v => Left(f(v))) should ===(either.leftMap(f))
}
}
test("leftFlatMap consistent with swap and then flatMap") {
forAll { (either: Either[String, Int], f: String => Either[String, Int]) =>
- either.leftFlatMap(f) should === (either.swap.flatMap(a => f(a).swap).swap)
+ either.leftFlatMap(f) should ===(either.swap.flatMap(a => f(a).swap).swap)
}
}
diff --git a/tests/src/test/scala/cats/tests/EitherTSuite.scala b/tests/src/test/scala/cats/tests/EitherTSuite.scala
index e87400d1c9..1c8fdc11af 100644
--- a/tests/src/test/scala/cats/tests/EitherTSuite.scala
+++ b/tests/src/test/scala/cats/tests/EitherTSuite.scala
@@ -6,44 +6,54 @@ import cats.data.EitherT
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
-import cats.kernel.laws.discipline.{MonoidTests, SemigroupTests, OrderTests, PartialOrderTests, EqTests}
-
+import cats.kernel.laws.discipline.{EqTests, MonoidTests, OrderTests, PartialOrderTests, SemigroupTests}
class EitherTSuite extends CatsSuite {
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[EitherT[ListWrapper, String, ?]](EitherT.catsDataFunctorForEitherT(ListWrapper.functor))
+ implicit val iso = SemigroupalTests.Isomorphisms
+ .invariant[EitherT[ListWrapper, String, ?]](EitherT.catsDataFunctorForEitherT(ListWrapper.functor))
checkAll("EitherT[Eval, String, ?]", DeferTests[EitherT[Eval, String, ?]].defer[Int])
{
- checkAll("EitherT[Option, ListWrapper[String], ?]", SemigroupKTests[EitherT[Option, ListWrapper[String], ?]].semigroupK[Int])
- checkAll("SemigroupK[EitherT[Option, ListWrapper[String], ?]]", SerializableTests.serializable(SemigroupK[EitherT[Option, ListWrapper[String], ?]]))
+ checkAll("EitherT[Option, ListWrapper[String], ?]",
+ SemigroupKTests[EitherT[Option, ListWrapper[String], ?]].semigroupK[Int])
+ checkAll("SemigroupK[EitherT[Option, ListWrapper[String], ?]]",
+ SerializableTests.serializable(SemigroupK[EitherT[Option, ListWrapper[String], ?]]))
}
{
implicit val F = ListWrapper.order[Either[String, Int]]
checkAll("EitherT[List, String, Int]", OrderTests[EitherT[ListWrapper, String, Int]].order)
- checkAll("Order[EitherT[List, String, Int]]", SerializableTests.serializable(Order[EitherT[ListWrapper, String, Int]]))
+ checkAll("Order[EitherT[List, String, Int]]",
+ SerializableTests.serializable(Order[EitherT[ListWrapper, String, Int]]))
}
{
//If a Functor for F is defined
implicit val F = ListWrapper.functor
- checkAll("EitherT[ListWrapper, ?, ?]", BifunctorTests[EitherT[ListWrapper, ?, ?]].bifunctor[Int, Int, Int, String, String, String])
- checkAll("Bifunctor[EitherT[ListWrapper, ?, ?]]", SerializableTests.serializable(Bifunctor[EitherT[ListWrapper, ?, ?]]))
+ checkAll("EitherT[ListWrapper, ?, ?]",
+ BifunctorTests[EitherT[ListWrapper, ?, ?]].bifunctor[Int, Int, Int, String, String, String])
+ checkAll("Bifunctor[EitherT[ListWrapper, ?, ?]]",
+ SerializableTests.serializable(Bifunctor[EitherT[ListWrapper, ?, ?]]))
checkAll("EitherT[ListWrapper, Int, ?]", FunctorTests[EitherT[ListWrapper, Int, ?]].functor[Int, Int, Int])
- checkAll("Functor[EitherT[ListWrapper, Int, ?]]", SerializableTests.serializable(Functor[EitherT[ListWrapper, Int, ?]]))
+ checkAll("Functor[EitherT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(Functor[EitherT[ListWrapper, Int, ?]]))
}
{
//If a Traverse for F is defined
implicit val F = ListWrapper.traverse
- checkAll("EitherT[ListWrapper, Int, ?]", TraverseTests[EitherT[ListWrapper, Int, ?]].traverse[Int, Int, Int, Int, Option, Option])
- checkAll("Traverse[EitherT[ListWrapper, Int, ?]]", SerializableTests.serializable(Traverse[EitherT[ListWrapper, Int, ?]]))
- checkAll("EitherT[ListWrapper, ?, ?]", BitraverseTests[EitherT[ListWrapper, ?, ?]].bitraverse[Option, Int, Int, Int, String, String, String])
- checkAll("Bitraverse[EitherT[ListWrapper, ?, ?]]", SerializableTests.serializable(Bitraverse[EitherT[ListWrapper, ?, ?]]))
+ checkAll("EitherT[ListWrapper, Int, ?]",
+ TraverseTests[EitherT[ListWrapper, Int, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("Traverse[EitherT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(Traverse[EitherT[ListWrapper, Int, ?]]))
+ checkAll("EitherT[ListWrapper, ?, ?]",
+ BitraverseTests[EitherT[ListWrapper, ?, ?]].bitraverse[Option, Int, Int, Int, String, String, String])
+ checkAll("Bitraverse[EitherT[ListWrapper, ?, ?]]",
+ SerializableTests.serializable(Bitraverse[EitherT[ListWrapper, ?, ?]]))
}
@@ -58,8 +68,10 @@ class EitherTSuite extends CatsSuite {
Applicative[EitherT[ListWrapper, String, ?]]
Monad[EitherT[ListWrapper, String, ?]]
- checkAll("EitherT[ListWrapper, String, Int]", MonadErrorTests[EitherT[ListWrapper, String, ?], String].monadError[Int, Int, Int])
- checkAll("MonadError[EitherT[List, ?, ?]]", SerializableTests.serializable(MonadError[EitherT[ListWrapper, String, ?], String]))
+ checkAll("EitherT[ListWrapper, String, Int]",
+ MonadErrorTests[EitherT[ListWrapper, String, ?], String].monadError[Int, Int, Int])
+ checkAll("MonadError[EitherT[List, ?, ?]]",
+ SerializableTests.serializable(MonadError[EitherT[ListWrapper, String, ?], String]))
}
@@ -75,8 +87,10 @@ class EitherTSuite extends CatsSuite {
Applicative[EitherT[Option, String, ?]]
Monad[EitherT[Option, String, ?]]
- checkAll("EitherT[Option, String, String]", MonadErrorTests[EitherT[Option, String, ?], Unit].monadError[String, String, String])
- checkAll("MonadError[EitherT[Option, ?, ?]]", SerializableTests.serializable(MonadError[EitherT[Option, String, ?], Unit]))
+ checkAll("EitherT[Option, String, String]",
+ MonadErrorTests[EitherT[Option, String, ?], Unit].monadError[String, String, String])
+ checkAll("MonadError[EitherT[Option, ?, ?]]",
+ SerializableTests.serializable(MonadError[EitherT[Option, String, ?], Unit]))
}
{
@@ -88,7 +102,8 @@ class EitherTSuite extends CatsSuite {
Monad[EitherT[ListWrapper, String, ?]]
checkAll("EitherT[ListWrapper, String, Int]", MonadTests[EitherT[ListWrapper, String, ?]].monad[Int, Int, Int])
- checkAll("Monad[EitherT[ListWrapper, String, ?]]", SerializableTests.serializable(Monad[EitherT[ListWrapper, String, ?]]))
+ checkAll("Monad[EitherT[ListWrapper, String, ?]]",
+ SerializableTests.serializable(Monad[EitherT[ListWrapper, String, ?]]))
}
{
@@ -96,21 +111,24 @@ class EitherTSuite extends CatsSuite {
implicit val F = ListWrapper.foldable
checkAll("EitherT[ListWrapper, Int, ?]", FoldableTests[EitherT[ListWrapper, Int, ?]].foldable[Int, Int])
- checkAll("Foldable[EitherT[ListWrapper, Int, ?]]", SerializableTests.serializable(Foldable[EitherT[ListWrapper, Int, ?]]))
+ checkAll("Foldable[EitherT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(Foldable[EitherT[ListWrapper, Int, ?]]))
}
{
implicit val F = ListWrapper.partialOrder[Either[String, Int]]
checkAll("EitherT[ListWrapper, String, Int]", PartialOrderTests[EitherT[ListWrapper, String, Int]].partialOrder)
- checkAll("PartialOrder[EitherT[ListWrapper, String, Int]]", SerializableTests.serializable(PartialOrder[EitherT[ListWrapper, String, Int]]))
+ checkAll("PartialOrder[EitherT[ListWrapper, String, Int]]",
+ SerializableTests.serializable(PartialOrder[EitherT[ListWrapper, String, Int]]))
}
{
implicit val F = ListWrapper.semigroup[Either[String, Int]]
checkAll("EitherT[ListWrapper, String, Int]", SemigroupTests[EitherT[ListWrapper, String, Int]].semigroup)
- checkAll("Semigroup[EitherT[ListWrapper, String, Int]]", SerializableTests.serializable(Semigroup[EitherT[ListWrapper, String, Int]]))
+ checkAll("Semigroup[EitherT[ListWrapper, String, Int]]",
+ SerializableTests.serializable(Semigroup[EitherT[ListWrapper, String, Int]]))
}
{
@@ -119,315 +137,317 @@ class EitherTSuite extends CatsSuite {
Semigroup[EitherT[ListWrapper, String, Int]]
checkAll("EitherT[ListWrapper, String, Int]", MonoidTests[EitherT[ListWrapper, String, Int]].monoid)
- checkAll("Monoid[EitherT[ListWrapper, String, Int]]", SerializableTests.serializable(Monoid[EitherT[ListWrapper, String, Int]]))
+ checkAll("Monoid[EitherT[ListWrapper, String, Int]]",
+ SerializableTests.serializable(Monoid[EitherT[ListWrapper, String, Int]]))
}
{
implicit val F = ListWrapper.eqv[Either[String, Int]]
checkAll("EitherT[ListWrapper, String, Int]", EqTests[EitherT[ListWrapper, String, Int]].eqv)
- checkAll("Eq[EitherT[ListWrapper, String, Int]]", SerializableTests.serializable(Eq[EitherT[ListWrapper, String, Int]]))
+ checkAll("Eq[EitherT[ListWrapper, String, Int]]",
+ SerializableTests.serializable(Eq[EitherT[ListWrapper, String, Int]]))
}
test("toValidated") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toValidated.map(_.toEither) should === (eithert.value)
+ eithert.toValidated.map(_.toEither) should ===(eithert.value)
}
}
test("toValidatedNel") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toValidatedNel.map(_.toEither.leftMap(_.head)) should === (eithert.value)
+ eithert.toValidatedNel.map(_.toEither.leftMap(_.head)) should ===(eithert.value)
}
}
test("toValidatedNec") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toValidatedNec.map(_.toEither.leftMap(_.head)) should === (eithert.value)
+ eithert.toValidatedNec.map(_.toEither.leftMap(_.head)) should ===(eithert.value)
}
}
test("toNested") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toNested.value should === (eithert.value)
+ eithert.toNested.value should ===(eithert.value)
}
}
test("toNestedValidated") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toNestedValidated.value should === (eithert.value.map(_.toValidated))
+ eithert.toNestedValidated.value should ===(eithert.value.map(_.toValidated))
}
}
test("toNestedValidatedNel") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toNestedValidatedNel.value should === (eithert.value.map(_.toValidatedNel))
+ eithert.toNestedValidatedNel.value should ===(eithert.value.map(_.toValidatedNel))
}
}
test("toNestedValidatedNec") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toNestedValidatedNec.value should === (eithert.value.map(_.toValidatedNec))
+ eithert.toNestedValidatedNec.value should ===(eithert.value.map(_.toValidatedNec))
}
}
test("withValidated") {
forAll { (eithert: EitherT[List, String, Int], f: String => Char, g: Int => Double) =>
- eithert.withValidated(_.bimap(f, g)) should === (eithert.bimap(f, g))
+ eithert.withValidated(_.bimap(f, g)) should ===(eithert.bimap(f, g))
}
}
test("fromEither") {
forAll { (either: Either[String, Int]) =>
- Some(either.isLeft) should === (EitherT.fromEither[Option](either).isLeft)
+ Some(either.isLeft) should ===(EitherT.fromEither[Option](either).isLeft)
}
}
test("fromOption isLeft consistent with Option.isEmpty") {
forAll { (o: Option[Int], s: String) =>
- EitherT.fromOption[Id](o, s).isLeft should === (o.isEmpty)
+ EitherT.fromOption[Id](o, s).isLeft should ===(o.isEmpty)
}
}
test("cond consistent with Either.cond") {
forAll { (cond: Boolean, s: String, i: Int) =>
- EitherT.cond[Id](cond, s, i).value should === (Either.cond(cond, s, i))
+ EitherT.cond[Id](cond, s, i).value should ===(Either.cond(cond, s, i))
}
}
test("isLeft negation of isRight") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.isLeft should === (eithert.isRight.map(! _))
+ eithert.isLeft should ===(eithert.isRight.map(!_))
}
}
test("double swap is noop") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.swap.swap should === (eithert)
+ eithert.swap.swap should ===(eithert)
}
}
test("swap negates isRight") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.swap.isRight should === (eithert.isRight.map(! _))
+ eithert.swap.isRight should ===(eithert.isRight.map(!_))
}
}
test("toOption on Right returns Some") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.toOption.isDefined should === (eithert.isRight)
+ eithert.toOption.isDefined should ===(eithert.isRight)
}
}
test("toEither preserves isRight") {
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.value.map(_.isRight) should === (eithert.isRight)
+ eithert.value.map(_.isRight) should ===(eithert.isRight)
}
}
test("recover recovers handled values") {
val eithert = EitherT.leftT[Id, Int]("eithert")
- eithert.recover { case "eithert" => 5 }.isRight should === (true)
+ eithert.recover { case "eithert" => 5 }.isRight should ===(true)
}
test("recover ignores unhandled values") {
val eithert = EitherT.leftT[Id, Int]("eithert")
- eithert.recover { case "noteithert" => 5 } should === (eithert)
+ eithert.recover { case "noteithert" => 5 } should ===(eithert)
}
test("recover ignores the right side") {
val eithert = EitherT.pure[Id, String](10)
- eithert.recover { case "eithert" => 5 } should === (eithert)
+ eithert.recover { case "eithert" => 5 } should ===(eithert)
}
test("recoverWith recovers handled values") {
val eithert = EitherT.leftT[Id, Int]("eithert")
- eithert.recoverWith { case "eithert" => EitherT.pure[Id, String](5) }.isRight should === (true)
+ eithert.recoverWith { case "eithert" => EitherT.pure[Id, String](5) }.isRight should ===(true)
}
test("recoverWith ignores unhandled values") {
val eithert = EitherT.leftT[Id, Int]("eithert")
- eithert.recoverWith { case "noteithert" => EitherT.pure[Id, String](5) } should === (eithert)
+ eithert.recoverWith { case "noteithert" => EitherT.pure[Id, String](5) } should ===(eithert)
}
test("transform consistent with value.map") {
forAll { (eithert: EitherT[List, String, Int], f: Either[String, Int] => Either[Long, Double]) =>
- eithert.transform(f) should === (EitherT(eithert.value.map(f)))
+ eithert.transform(f) should ===(EitherT(eithert.value.map(f)))
}
}
test("mapK consistent with f(value)+pure") {
val f: List ~> Option = λ[List ~> Option](_.headOption)
forAll { (eithert: EitherT[List, String, Int]) =>
- eithert.mapK(f) should === (EitherT(f(eithert.value)))
+ eithert.mapK(f) should ===(EitherT(f(eithert.value)))
}
}
test("semiflatMap consistent with value.flatMap+f+pure") {
forAll { (eithert: EitherT[List, String, Int], f: Int => List[String]) =>
- eithert.semiflatMap(f) should === (EitherT(eithert.value.flatMap {
+ eithert.semiflatMap(f) should ===(EitherT(eithert.value.flatMap {
case l @ Left(_) => List(l.asInstanceOf[Either[String, String]])
- case Right(b) => f(b).map(Right(_))
+ case Right(b) => f(b).map(Right(_))
}))
}
}
test("subflatMap consistent with value.map+flatMap") {
forAll { (eithert: EitherT[List, String, Int], f: Int => Either[String, Double]) =>
- eithert.subflatMap(f) should === (EitherT(eithert.value.map(_.flatMap(f))))
+ eithert.subflatMap(f) should ===(EitherT(eithert.value.map(_.flatMap(f))))
}
}
test("flatMap and flatMapF consistent") {
- forAll { (eithert: EitherT[List, String, Int], f: Int => EitherT[List, String, Int]) =>
- eithert.flatMap(f) should === (eithert.flatMapF(f(_).value))
+ forAll { (eithert: EitherT[List, String, Int], f: Int => EitherT[List, String, Int]) =>
+ eithert.flatMap(f) should ===(eithert.flatMapF(f(_).value))
}
}
test("fold with Id consistent with Either fold") {
forAll { (eithert: EitherT[Id, String, Int], f: String => Long, g: Int => Long) =>
- eithert.fold(f, g) should === (eithert.value.fold(f, g))
+ eithert.fold(f, g) should ===(eithert.value.fold(f, g))
}
}
test("valueOr with Id consistent with Either valueOr") {
forAll { (eithert: EitherT[Id, String, Int], f: String => Int) =>
- eithert.valueOr(f) should === (eithert.value.valueOr(f))
+ eithert.valueOr(f) should ===(eithert.value.valueOr(f))
}
}
test("valueOrF with Id consistent with Either valueOr") {
- forAll{ (eithert: EitherT[Id, String, Int], f: String => Int) =>
- eithert.valueOrF(f) should === (eithert.value.valueOr(f))
+ forAll { (eithert: EitherT[Id, String, Int], f: String => Int) =>
+ eithert.valueOrF(f) should ===(eithert.value.valueOr(f))
}
}
test("getOrElse with Id consistent with Either getOrElse") {
forAll { (eithert: EitherT[Id, String, Int], i: Int) =>
- eithert.getOrElse(i) should === (eithert.value.getOrElse(i))
+ eithert.getOrElse(i) should ===(eithert.value.getOrElse(i))
}
}
test("getOrElseF with Id consistent with Either getOrElse") {
forAll { (eithert: EitherT[Id, String, Int], i: Int) =>
- eithert.getOrElseF(i) should === (eithert.value.getOrElse(i))
+ eithert.getOrElseF(i) should ===(eithert.value.getOrElse(i))
}
}
test("orElse with Id consistent with Either orElse") {
forAll { (eithert: EitherT[Id, String, Int], fallback: EitherT[Id, String, Int]) =>
- eithert.orElse(fallback).value should === (eithert.value.orElse(fallback.value))
+ eithert.orElse(fallback).value should ===(eithert.value.orElse(fallback.value))
}
}
test("orElse evaluates effect only once") {
forAll { (either: Either[String, Int], fallback: EitherT[Eval, String, Int]) =>
var evals = 0
- val eithert = (EitherT(Eval.always { evals += 1; either }) orElse fallback)
+ val eithert = EitherT(Eval.always { evals += 1; either }).orElse(fallback)
eithert.value.value
- evals should === (1)
+ evals should ===(1)
}
}
test("forall with Id consistent with Either forall") {
forAll { (eithert: EitherT[Id, String, Int], f: Int => Boolean) =>
- eithert.forall(f) should === (eithert.value.forall(f))
+ eithert.forall(f) should ===(eithert.value.forall(f))
}
}
test("exists with Id consistent with Either exists") {
forAll { (eithert: EitherT[Id, String, Int], f: Int => Boolean) =>
- eithert.exists(f) should === (eithert.value.exists(f))
+ eithert.exists(f) should ===(eithert.value.exists(f))
}
}
test("leftMap with Id consistent with Either leftMap") {
forAll { (eithert: EitherT[Id, String, Int], f: String => Long) =>
- eithert.leftMap(f).value should === (eithert.value.leftMap(f))
+ eithert.leftMap(f).value should ===(eithert.value.leftMap(f))
}
}
test("compare with Id consistent with Either compare") {
forAll { (x: EitherT[Id, String, Int], y: EitherT[Id, String, Int]) =>
- x.compare(y) should === (x.value.compare(y.value))
+ x.compare(y) should ===(x.value.compare(y.value))
}
}
test("=== with Id consistent with Either ===") {
forAll { (x: EitherT[Id, String, Int], y: EitherT[Id, String, Int]) =>
- x === y should === (x.value === y.value)
+ x === y should ===(x.value === y.value)
}
}
test("traverse with Id consistent with Either traverse") {
forAll { (x: EitherT[Id, String, Int], f: Int => Option[Long]) =>
val e: Either[String, Int] = x.value
- x.traverse(f).map(_.value) should === (e.traverse(f))
+ x.traverse(f).map(_.value) should ===(e.traverse(f))
}
}
test("foldLeft with Id consistent with Either foldLeft") {
forAll { (x: EitherT[Id, String, Int], l: Long, f: (Long, Int) => Long) =>
- x.foldLeft(l)(f) should === (x.value.foldLeft(l)(f))
+ x.foldLeft(l)(f) should ===(x.value.foldLeft(l)(f))
}
}
test("foldRight with Id consistent with Either foldRight") {
forAll { (x: EitherT[Id, String, Int], l: Eval[Long], f: (Int, Eval[Long]) => Eval[Long]) =>
- x.foldRight(l)(f) should === (x.value.foldRight(l)(f))
+ x.foldRight(l)(f) should ===(x.value.foldRight(l)(f))
}
}
test("collectRight with Option consistent with flattening a to[Option]") {
forAll { (et: EitherT[Option, String, Int]) =>
- et.collectRight should === (et.to[Option].flatten)
+ et.collectRight should ===(et.to[Option].flatten)
}
}
test("applyAlt with Id consistent with EitherT map") {
forAll { (et: EitherT[Id, String, Int], f: Int => String) =>
- et.applyAlt(EitherT.pure(f)) should === (et.map(f))
+ et.applyAlt(EitherT.pure(f)) should ===(et.map(f))
}
}
test("merge with Id consistent with Either merge") {
forAll { (x: EitherT[Id, Int, Int]) =>
- x.merge should === (x.value.merge)
+ x.merge should ===(x.value.merge)
}
}
test("to consistent with toOption") {
forAll { (x: EitherT[List, String, Int]) =>
- x.to[Option] should === (x.toOption.value)
+ x.to[Option] should ===(x.toOption.value)
}
}
test("toEither consistent with toOption") {
forAll { (x: EitherT[List, String, Int]) =>
- x.value.map(_.right.toOption) should === (x.toOption.value)
+ x.value.map(_.right.toOption) should ===(x.toOption.value)
}
}
test("ensure on left is identity") {
forAll { (x: EitherT[Id, String, Int], s: String, p: Int => Boolean) =>
if (x.isLeft) {
- x.ensure(s)(p) should === (x)
+ x.ensure(s)(p) should ===(x)
}
}
}
test("ensure on right is identity if predicate satisfied") {
forAll { (x: EitherT[Id, String, Int], s: String, p: Int => Boolean) =>
- if (x.isRight && p(x getOrElse 0)) {
- x.ensure(s)(p) should === (x)
+ if (x.isRight && p(x.getOrElse(0))) {
+ x.ensure(s)(p) should ===(x)
}
}
}
test("ensure should fail if predicate not satisfied") {
forAll { (x: EitherT[Id, String, Int], s: String, p: Int => Boolean) =>
- if (x.isRight && !p(x getOrElse 0)) {
- x.ensure(s)(p) should === (EitherT.leftT[Id, Int](s))
+ if (x.isRight && !p(x.getOrElse(0))) {
+ x.ensure(s)(p) should ===(EitherT.leftT[Id, Int](s))
}
}
}
@@ -437,8 +457,8 @@ class EitherTSuite extends CatsSuite {
case object Error1 extends AppError
case object Error2 extends AppError
- val either1: Id[Either[Error1.type , String]] = Right("hi").pure[Id]
- val either2: Id[Either[Error2.type , String]] = Right("bye").pure[Id]
+ val either1: Id[Either[Error1.type, String]] = Right("hi").pure[Id]
+ val either2: Id[Either[Error2.type, String]] = Right("bye").pure[Id]
for {
s1 <- EitherT(either1)
@@ -487,7 +507,7 @@ class EitherTSuite extends CatsSuite {
test("biSemiflatMap consistent with leftSemiflatMap and semiFlatmap") {
forAll { (eithert: EitherT[List, String, Int], fa: String => List[Int], fb: Int => List[String]) =>
- eithert.biSemiflatMap(fa, fb) should === (eithert.leftSemiflatMap(fa).semiflatMap(fb))
+ eithert.biSemiflatMap(fa, fb) should ===(eithert.leftSemiflatMap(fa).semiflatMap(fb))
}
}
diff --git a/tests/src/test/scala/cats/tests/EqSuite.scala b/tests/src/test/scala/cats/tests/EqSuite.scala
index 7b70689a01..91c16adf16 100644
--- a/tests/src/test/scala/cats/tests/EqSuite.scala
+++ b/tests/src/test/scala/cats/tests/EqSuite.scala
@@ -6,15 +6,13 @@ import cats.laws.discipline.ContravariantMonoidalTests
import cats.laws.discipline.arbitrary._
import cats.laws.discipline.eq._
-
-
class EqSuite extends CatsSuite {
- Invariant[Eq]
- Contravariant[Eq]
- Semigroupal[Eq]
- ContravariantSemigroupal[Eq]
+ Invariant[Eq]
+ Contravariant[Eq]
+ Semigroupal[Eq]
+ ContravariantSemigroupal[Eq]
- checkAll("Eq[Int]", ContravariantMonoidalTests[Eq].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Eq]", SerializableTests.serializable(ContravariantMonoidal[Eq]))
+ checkAll("Eq[Int]", ContravariantMonoidalTests[Eq].contravariantMonoidal[Int, Int, Int])
+ checkAll("ContravariantMonoidal[Eq]", SerializableTests.serializable(ContravariantMonoidal[Eq]))
}
diff --git a/tests/src/test/scala/cats/tests/EquivSuite.scala b/tests/src/test/scala/cats/tests/EquivSuite.scala
index 86c8e0ec31..62bf7d5fc7 100644
--- a/tests/src/test/scala/cats/tests/EquivSuite.scala
+++ b/tests/src/test/scala/cats/tests/EquivSuite.scala
@@ -1,7 +1,6 @@
package cats
package tests
-
import cats.laws.discipline.arbitrary._
import cats.laws.discipline._
import cats.laws.discipline.eq._
@@ -16,8 +15,6 @@ class EquivSuite extends CatsSuite {
checkAll("Contravariant[Equiv]", ContravariantTests[Equiv].contravariant[Int, Int, Int])
checkAll("Semigroupal[Equiv]", SemigroupalTests[Equiv].semigroupal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Equiv]",
- ContravariantMonoidalTests[Equiv].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Equiv]",
- SerializableTests.serializable(ContravariantMonoidal[Equiv]))
+ checkAll("ContravariantMonoidal[Equiv]", ContravariantMonoidalTests[Equiv].contravariantMonoidal[Int, Int, Int])
+ checkAll("ContravariantMonoidal[Equiv]", SerializableTests.serializable(ContravariantMonoidal[Equiv]))
}
diff --git a/tests/src/test/scala/cats/tests/EvalSuite.scala b/tests/src/test/scala/cats/tests/EvalSuite.scala
index 979e6b70da..84ac0fb364 100644
--- a/tests/src/test/scala/cats/tests/EvalSuite.scala
+++ b/tests/src/test/scala/cats/tests/EvalSuite.scala
@@ -2,7 +2,14 @@ package cats
package tests
import cats.laws.ComonadLaws
-import cats.laws.discipline.{BimonadTests, CommutativeMonadTests, DeferTests, SemigroupalTests, ReducibleTests, SerializableTests}
+import cats.laws.discipline.{
+ BimonadTests,
+ CommutativeMonadTests,
+ DeferTests,
+ ReducibleTests,
+ SemigroupalTests,
+ SerializableTests
+}
import cats.laws.discipline.arbitrary._
import cats.kernel.laws.discipline.{EqTests, GroupTests, MonoidTests, OrderTests, PartialOrderTests, SemigroupTests}
import org.scalacheck.{Arbitrary, Cogen, Gen}
@@ -35,10 +42,10 @@ class EvalSuite extends CatsSuite {
val (spooky, lz) = init(value)
(0 until n).foreach { _ =>
val result = lz.value
- result should === (value)
+ result should ===(value)
spin ^= result.##
}
- spooky.counter should === (numEvals)
+ spooky.counter should ===(numEvals)
()
}
(0 to 2).foreach(n => nTimes(n, numCalls(n)))
@@ -74,18 +81,18 @@ class EvalSuite extends CatsSuite {
runValue(999)(always)(n => n)
}
- test(".value should evaluate only once on the result of .memoize"){
+ test(".value should evaluate only once on the result of .memoize") {
val spooky = new Spooky
val i2 = Eval.always(spooky.increment()).memoize
val i3 = Eval.now(()).flatMap(_ => Eval.later(spooky.increment())).memoize
i2.value
- spooky.counter should === (1)
+ spooky.counter should ===(1)
i2.value
- spooky.counter should === (1)
+ spooky.counter should ===(1)
i3.value
- spooky.counter should === (2)
+ spooky.counter should ===(2)
i3.value
- spooky.counter should === (2)
+ spooky.counter should ===(2)
}
{
@@ -137,14 +144,14 @@ class EvalSuite extends CatsSuite {
test("cokleisli left identity") {
forAll { (fa: Eval[Int], f: Eval[Int] => Long) =>
val isEq = ComonadLaws[Eval].cokleisliLeftIdentity(fa, f)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("cokleisli right identity") {
forAll { (fa: Eval[Int], f: Eval[Int] => Long) =>
val isEq = ComonadLaws[Eval].cokleisliRightIdentity(fa, f)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
@@ -184,11 +191,12 @@ class EvalSuite extends CatsSuite {
case class ODefer[A]() extends O[A]
implicit def arbitraryO[A: Arbitrary: Cogen]: Arbitrary[O[A]] =
- Arbitrary(Gen.oneOf(
- arbitrary[A => A].map(OMap(_)),
- arbitrary[A => Eval[A]].map(OFlatMap(_)),
- Gen.const(OMemoize[A]),
- Gen.const(ODefer[A])))
+ Arbitrary(
+ Gen.oneOf(arbitrary[A => A].map(OMap(_)),
+ arbitrary[A => Eval[A]].map(OFlatMap(_)),
+ Gen.const(OMemoize[A]),
+ Gen.const(ODefer[A]))
+ )
def build[A](leaf: () => Eval[A], os: Vector[O[A]]): DeepEval[A] = {
@@ -197,12 +205,13 @@ class EvalSuite extends CatsSuite {
@tailrec def step(i: Int, leaf: () => Eval[A], cbs: List[Eval[A] => Eval[A]]): Eval[A] =
if (i >= os.length) cbs.foldLeft(leaf())((e, f) => f(e))
- else os(i) match {
- case ODefer() => Eval.defer(restart(i + 1, leaf, cbs))
- case OMemoize() => step(i + 1, leaf, ((e: Eval[A]) => e.memoize) :: cbs)
- case OMap(f) => step(i + 1, leaf, ((e: Eval[A]) => e.map(f)) :: cbs)
- case OFlatMap(f) => step(i + 1, leaf, ((e: Eval[A]) => e.flatMap(f)) :: cbs)
- }
+ else
+ os(i) match {
+ case ODefer() => Eval.defer(restart(i + 1, leaf, cbs))
+ case OMemoize() => step(i + 1, leaf, ((e: Eval[A]) => e.memoize) :: cbs)
+ case OMap(f) => step(i + 1, leaf, ((e: Eval[A]) => e.map(f)) :: cbs)
+ case OFlatMap(f) => step(i + 1, leaf, ((e: Eval[A]) => e.flatMap(f)) :: cbs)
+ }
DeepEval(step(0, leaf, Nil))
}
@@ -227,8 +236,9 @@ class EvalSuite extends CatsSuite {
try {
d.eval.value
succeed
- } catch { case (e: StackOverflowError) =>
- fail(s"stack overflowed with eval-depth ${DeepEval.MaxDepth}")
+ } catch {
+ case (e: StackOverflowError) =>
+ fail(s"stack overflowed with eval-depth ${DeepEval.MaxDepth}")
}
}
}
@@ -236,7 +246,9 @@ class EvalSuite extends CatsSuite {
test("memoize handles branched evaluation correctly") {
forAll { (e: Eval[Int], fn: Int => Eval[Int]) =>
var n0 = 0
- val a0 = e.flatMap { i => n0 += 1; fn(i); }.memoize
+ val a0 = e.flatMap { i =>
+ n0 += 1; fn(i);
+ }.memoize
assert(a0.flatMap(i1 => a0.map(i1 == _)).value == true)
assert(n0 == 1)
diff --git a/tests/src/test/scala/cats/tests/ExtraRegressionSuite.scala b/tests/src/test/scala/cats/tests/ExtraRegressionSuite.scala
index 5de9ca8762..d716cca6f5 100644
--- a/tests/src/test/scala/cats/tests/ExtraRegressionSuite.scala
+++ b/tests/src/test/scala/cats/tests/ExtraRegressionSuite.scala
@@ -1,10 +1,10 @@
package cats
package tests
-
import ExtraRegressionSuite._
class ExtraRegressionSuite extends CatsSuite {
+
/**
* Placed here to work around scala/bug#6260 on scala 2.10
*/
@@ -13,7 +13,6 @@ class ExtraRegressionSuite extends CatsSuite {
}
}
-
object ExtraRegressionSuite {
final case class First[A](getFirst: A) extends AnyVal
object First {
diff --git a/tests/src/test/scala/cats/tests/FiniteDurationSuite.scala b/tests/src/test/scala/cats/tests/FiniteDurationSuite.scala
index 35cd201a8b..7d417dc92c 100644
--- a/tests/src/test/scala/cats/tests/FiniteDurationSuite.scala
+++ b/tests/src/test/scala/cats/tests/FiniteDurationSuite.scala
@@ -3,13 +3,13 @@ package tests
import cats.laws.discipline.SerializableTests
-import scala.concurrent.duration.{ DurationInt, FiniteDuration }
+import scala.concurrent.duration.{DurationInt, FiniteDuration}
class FiniteDurationSuite extends CatsSuite {
checkAll("Show[FiniteDuration]", SerializableTests.serializable(Show[FiniteDuration]))
- test("show works for FiniteDuration"){
+ test("show works for FiniteDuration") {
Show[FiniteDuration].show(23.minutes) should ===("23 minutes")
- Show[FiniteDuration].show(10.seconds) should === ("10 seconds")
+ Show[FiniteDuration].show(10.seconds) should ===("10 seconds")
}
}
diff --git a/tests/src/test/scala/cats/tests/FoldableSuite.scala b/tests/src/test/scala/cats/tests/FoldableSuite.scala
index 702bdb592c..2521f30394 100644
--- a/tests/src/test/scala/cats/tests/FoldableSuite.scala
+++ b/tests/src/test/scala/cats/tests/FoldableSuite.scala
@@ -9,16 +9,17 @@ import cats.instances.all._
import cats.data._
import cats.laws.discipline.arbitrary._
-abstract class FoldableSuite[F[_]: Foldable](name: String)(
- implicit ArbFInt: Arbitrary[F[Int]],
- ArbFString: Arbitrary[F[String]]) extends CatsSuite with PropertyChecks {
+abstract class FoldableSuite[F[_]: Foldable](name: String)(implicit ArbFInt: Arbitrary[F[Int]],
+ ArbFString: Arbitrary[F[String]])
+ extends CatsSuite
+ with PropertyChecks {
def iterator[T](fa: F[T]): Iterator[T]
test(s"Foldable[$name].size/get") {
forAll { (fa: F[Int], n: Int) =>
val s = fa.size
- s should === (iterator(fa).size.toLong)
+ s should ===(iterator(fa).size.toLong)
if (n < s && n >= 0) {
fa.get(n.toLong) === Some(iterator(fa).take(n + 1).toList.last)
} else {
@@ -31,7 +32,7 @@ abstract class FoldableSuite[F[_]: Foldable](name: String)(
forAll { (fi: F[Int], f: Int => Either[String, String]) =>
val vector = Foldable[F].toList(fi).toVector
val (lefts, rights) = Foldable[Vector].partitionEither(vector)(f)
- (lefts <+> rights).size.toLong should === (fi.size)
+ (lefts <+> rights).size.toLong should ===(fi.size)
}
}
@@ -39,27 +40,29 @@ abstract class FoldableSuite[F[_]: Foldable](name: String)(
forAll { (fi: F[Int], f: Int => Either[String, String]) =>
val list = Foldable[F].toList(fi)
val (lefts, rights) = Foldable[List].partitionEither(list)(f)
- val (ls, rs) = list.map(f).partition({
- case Left(_) => true
- case Right(_) => false
- })
-
- lefts.map(_.asLeft[String]) should === (ls)
- rights.map(_.asRight[String]) should === (rs)
+ val (ls, rs) = list
+ .map(f)
+ .partition({
+ case Left(_) => true
+ case Right(_) => false
+ })
+
+ lefts.map(_.asLeft[String]) should ===(ls)
+ rights.map(_.asRight[String]) should ===(rs)
}
}
test("Foldable#partitionEither to one side is identity") {
forAll { (fi: F[Int], f: Int => String) =>
val list = Foldable[F].toList(fi)
- val g: Int => Either[Double, String] = f andThen Right.apply
- val h: Int => Either[String, Double] = f andThen Left.apply
+ val g: Int => Either[Double, String] = f.andThen(Right.apply)
+ val h: Int => Either[String, Double] = f.andThen(Left.apply)
val withG = Foldable[List].partitionEither(list)(g)._2
- withG should === (list.map(f))
+ withG should ===(list.map(f))
val withH = Foldable[List].partitionEither(list)(h)._1
- withH should === (list.map(f))
+ withH should ===(list.map(f))
}
}
@@ -70,18 +73,18 @@ abstract class FoldableSuite[F[_]: Foldable](name: String)(
val sorted = list.map(f).sorted
val (lefts, rights) = Foldable[List].partitionEither(sorted)(identity)
- lefts.sorted should === (lefts)
- rights.sorted should === (rights)
+ lefts.sorted should ===(lefts)
+ rights.sorted should ===(rights)
}
}
test(s"Foldable[$name] summation") {
forAll { (fa: F[Int]) =>
val total = iterator(fa).sum
- fa.foldLeft(0)(_ + _) should === (total)
- fa.foldRight(Now(0))((x, ly) => ly.map(x + _)).value should === (total)
- fa.fold should === (total)
- fa.foldMap(identity) should === (total)
+ fa.foldLeft(0)(_ + _) should ===(total)
+ fa.foldRight(Now(0))((x, ly) => ly.map(x + _)).value should ===(total)
+ fa.fold should ===(total)
+ fa.foldMap(identity) should ===(total)
}
}
@@ -92,32 +95,32 @@ abstract class FoldableSuite[F[_]: Foldable](name: String)(
val pf: PartialFunction[String, String] = {
case n if f(n) ⇒ n
}
- fa.collectFold(pf) should === (fa.toList.collect(pf).fold(m.empty)(m.combine))
+ fa.collectFold(pf) should ===(fa.toList.collect(pf).fold(m.empty)(m.combine))
def g(a: String): Option[String] = Some(a).filter(f)
- fa.collectSomeFold(g) should === (fa.toList.filter(f).fold(m.empty)(m.combine))
+ fa.collectSomeFold(g) should ===(fa.toList.filter(f).fold(m.empty)(m.combine))
}
}
test(s"Foldable[$name].find/exists/forall/findM/existsM/forallM/filter_/dropWhile_") {
forAll { (fa: F[Int], n: Int) =>
- fa.find(_ > n) should === (iterator(fa).find(_ > n))
- fa.exists(_ > n) should === (iterator(fa).exists(_ > n))
- fa.forall(_ > n) should === (iterator(fa).forall(_ > n))
- fa.findM(k => Option(k > n)) should === (Option(iterator(fa).find(_ > n)))
- fa.existsM(k => Option(k > n)) should === (Option(iterator(fa).exists(_ > n)))
- fa.forallM(k => Option(k > n)) should === (Option(iterator(fa).forall(_ > n)))
- fa.filter_(_ > n) should === (iterator(fa).filter(_ > n).toList)
- fa.dropWhile_(_ > n) should === (iterator(fa).dropWhile(_ > n).toList)
- fa.takeWhile_(_ > n) should === (iterator(fa).takeWhile(_ > n).toList)
+ fa.find(_ > n) should ===(iterator(fa).find(_ > n))
+ fa.exists(_ > n) should ===(iterator(fa).exists(_ > n))
+ fa.forall(_ > n) should ===(iterator(fa).forall(_ > n))
+ fa.findM(k => Option(k > n)) should ===(Option(iterator(fa).find(_ > n)))
+ fa.existsM(k => Option(k > n)) should ===(Option(iterator(fa).exists(_ > n)))
+ fa.forallM(k => Option(k > n)) should ===(Option(iterator(fa).forall(_ > n)))
+ fa.filter_(_ > n) should ===(iterator(fa).filter(_ > n).toList)
+ fa.dropWhile_(_ > n) should ===(iterator(fa).dropWhile(_ > n).toList)
+ fa.takeWhile_(_ > n) should ===(iterator(fa).takeWhile(_ > n).toList)
}
}
test(s"Foldable[$name].toList/isEmpty/nonEmpty") {
forAll { (fa: F[Int]) =>
- fa.toList should === (iterator(fa).toList)
- fa.isEmpty should === (iterator(fa).isEmpty)
- fa.nonEmpty should === (iterator(fa).nonEmpty)
+ fa.toList should ===(iterator(fa).toList)
+ fa.isEmpty should ===(iterator(fa).isEmpty)
+ fa.nonEmpty should ===(iterator(fa).nonEmpty)
}
}
@@ -127,46 +130,50 @@ abstract class FoldableSuite[F[_]: Foldable](name: String)(
val minOpt = fa.minimumOption
val list = fa.toList
val nelOpt = list.toNel
- maxOpt should === (nelOpt.map(_.maximum))
- maxOpt should === (nelOpt.map(_.toList.max))
- minOpt should === (nelOpt.map(_.minimum))
- minOpt should === (nelOpt.map(_.toList.min))
- maxOpt.forall(i => fa.forall(_ <= i)) should === (true)
- minOpt.forall(i => fa.forall(_ >= i)) should === (true)
+ maxOpt should ===(nelOpt.map(_.maximum))
+ maxOpt should ===(nelOpt.map(_.toList.max))
+ minOpt should ===(nelOpt.map(_.minimum))
+ minOpt should ===(nelOpt.map(_.toList.min))
+ maxOpt.forall(i => fa.forall(_ <= i)) should ===(true)
+ minOpt.forall(i => fa.forall(_ >= i)) should ===(true)
}
}
test(s"Foldable[$name].reduceLeftOption/reduceRightOption") {
forAll { (fa: F[Int]) =>
val list = fa.toList
- fa.reduceLeftOption(_ - _) should === (list.reduceLeftOption(_ - _))
- fa.reduceRightOption((x, ly) => ly.map(x - _)).value should === (list.reduceRightOption(_ - _))
+ fa.reduceLeftOption(_ - _) should ===(list.reduceLeftOption(_ - _))
+ fa.reduceRightOption((x, ly) => ly.map(x - _)).value should ===(list.reduceRightOption(_ - _))
}
}
test(s"Foldable[$name].intercalate") {
forAll { (fa: F[String], a: String) =>
- fa.intercalate(a) should === (fa.toList.mkString(a))
+ fa.intercalate(a) should ===(fa.toList.mkString(a))
}
}
test(s"Foldable[$name].toList") {
forAll { (fa: F[Int]) =>
- fa.toList should === (iterator(fa).toList)
+ fa.toList should ===(iterator(fa).toList)
}
}
test(s"Foldable[$name] mkString_") {
forAll { (fa: F[Int]) =>
- fa.mkString_("L[", ";", "]") should === (fa.toList.mkString("L[", ";", "]"))
+ fa.mkString_("L[", ";", "]") should ===(fa.toList.mkString("L[", ";", "]"))
}
}
test(s"Foldable[$name].collectFirstSomeM") {
forAll { (fa: F[Int], n: Int) =>
- fa.collectFirstSomeM(x => (x > n).guard[Option].as(x).asRight[String]) should === (fa.toList.collectFirst {
- case x if x > n => x
- }.asRight[String])
+ fa.collectFirstSomeM(x => (x > n).guard[Option].as(x).asRight[String]) should ===(
+ fa.toList
+ .collectFirst {
+ case x if x > n => x
+ }
+ .asRight[String]
+ )
}
}
}
@@ -185,16 +192,20 @@ class FoldableSuiteAdditional extends CatsSuite {
// some basic sanity checks
val ns = (1 to 10).toList
val total = ns.sum
- F.foldLeft(ns, 0)(_ + _) should === (total)
- F.foldRight(ns, Now(0))((x, ly) => ly.map(x + _)).value should === (total)
- F.fold(ns) should === (total)
+ F.foldLeft(ns, 0)(_ + _) should ===(total)
+ F.foldRight(ns, Now(0))((x, ly) => ly.map(x + _)).value should ===(total)
+ F.fold(ns) should ===(total)
// more basic checks
val names = List("Aaron", "Betty", "Calvin", "Deirdra")
- F.foldMap(names)(_.length) should === (names.map(_.length).sum)
- val sumM = F.foldM(names, "") { (acc, x) => (Some(acc + x): Option[String]) }
+ F.foldMap(names)(_.length) should ===(names.map(_.length).sum)
+ val sumM = F.foldM(names, "") { (acc, x) =>
+ (Some(acc + x): Option[String])
+ }
assert(sumM == Some("AaronBettyCalvinDeirdra"))
- val sumMapM = F.foldMapM(names) { x => (Some(x): Option[String]) }
+ val sumMapM = F.foldMapM(names) { x =>
+ (Some(x): Option[String])
+ }
assert(sumMapM == Some("AaronBettyCalvinDeirdra"))
val isNotCalvin: String => Option[String] =
x => if (x == "Calvin") None else Some(x)
@@ -211,7 +222,7 @@ class FoldableSuiteAdditional extends CatsSuite {
// safely build large lists
val larger = F.foldRight(large, Now(List.empty[Int]))((x, lxs) => lxs.map((x + 1) :: _))
- larger.value should === (large.map(_ + 1))
+ larger.value should ===(large.map(_ + 1))
}
def checkMonadicFoldsStackSafety[F[_]](fromRange: Range => F[Int])(implicit F: Foldable[F]): Unit = {
@@ -227,7 +238,7 @@ class FoldableSuiteAdditional extends CatsSuite {
val n = 100000
val src = fromRange(1 to n)
- val foldMExpected = n.toLong*(n.toLong+1)/2
+ val foldMExpected = n.toLong * (n.toLong + 1) / 2
val foldMResult = F.foldM(src, 0L)(nonzero)
assert(foldMResult.get == foldMExpected)
@@ -256,10 +267,10 @@ class FoldableSuiteAdditional extends CatsSuite {
Eval.always(a + eb.value)
}
- eval.value should === (fa.sum)
+ eval.value should ===(fa.sum)
//Repeat here so the result is evaluated again
- eval.value should === (fa.sum)
+ eval.value should ===(fa.sum)
}
}
@@ -276,11 +287,13 @@ class FoldableSuiteAdditional extends CatsSuite {
}
test("Foldable[SortedSet].foldM/existsM/forallM/findM/collectFirstSomeM stack safety") {
- checkMonadicFoldsStackSafety[SortedSet](s => SortedSet(s:_*))
+ checkMonadicFoldsStackSafety[SortedSet](s => SortedSet(s: _*))
}
test("Foldable[SortedMap[String, ?]].foldM/existsM/forallM/findM/collectFirstSomeM stack safety") {
- checkMonadicFoldsStackSafety[SortedMap[String, ?]](xs => SortedMap.empty[String, Int] ++ xs.map(x => x.toString -> x).toMap)
+ checkMonadicFoldsStackSafety[SortedMap[String, ?]](
+ xs => SortedMap.empty[String, Int] ++ xs.map(x => x.toString -> x).toMap
+ )
}
test("Foldable[NonEmptyList].foldM/existsM/forallM/findM/collectFirstSomeM stack safety") {
@@ -321,7 +334,7 @@ class FoldableSuiteAdditional extends CatsSuite {
assert(contains(large, 10000).value)
// test laziness of foldM
- dangerous.foldM(0)((acc, a) => if (a < 2) Some(acc + a) else None) should === (None)
+ dangerous.foldM(0)((acc, a) => if (a < 2) Some(acc + a) else None) should ===(None)
}
@@ -373,7 +386,7 @@ class FoldableSuiteAdditional extends CatsSuite {
}
test("Foldable[List] doesn't break substitution") {
- val result = List.range(0,10).foldM(List.empty[Int])((accum, elt) => Eval.always(elt :: accum))
+ val result = List.range(0, 10).foldM(List.empty[Int])((accum, elt) => Eval.always(elt :: accum))
assert(result.value == result.value)
}
@@ -445,7 +458,8 @@ class FoldableOneAndSuite extends FoldableSuite[OneAnd[List, ?]]("oneAnd") {
}
class FoldableComposedSuite extends FoldableSuite[Nested[List, Option, ?]]("nested") {
- def iterator[T](nested: Nested[List, Option, T]) = nested.value.collect {
- case Some(t) => t
- }.iterator
+ def iterator[T](nested: Nested[List, Option, T]) =
+ nested.value.collect {
+ case Some(t) => t
+ }.iterator
}
diff --git a/tests/src/test/scala/cats/tests/FuncSuite.scala b/tests/src/test/scala/cats/tests/FuncSuite.scala
index 6aec186c66..47402b3449 100644
--- a/tests/src/test/scala/cats/tests/FuncSuite.scala
+++ b/tests/src/test/scala/cats/tests/FuncSuite.scala
@@ -48,20 +48,27 @@ class FuncSuite extends CatsSuite {
implicit val appFuncApp = AppFunc.appFuncApplicative[Option, Int]
implicit val iso = SemigroupalTests.Isomorphisms.invariant[AppFunc[Option, Int, ?]]
checkAll("AppFunc[Option, Int, Int]", ApplicativeTests[AppFunc[Option, Int, ?]].applicative[Int, Int, Int])
- checkAll("Applicative[AppFunc[Option, Int, ?]]", SerializableTests.serializable(Applicative[AppFunc[Option, Int, ?]]))
+ checkAll("Applicative[AppFunc[Option, Int, ?]]",
+ SerializableTests.serializable(Applicative[AppFunc[Option, Int, ?]]))
}
test("product") {
- val f = appFunc { (x: Int) => (Some(x + 10): Option[Int]) }
- val g = appFunc { (x: Int) => List(x * 2) }
- val h = f product g
+ val f = appFunc { (x: Int) =>
+ (Some(x + 10): Option[Int])
+ }
+ val g = appFunc { (x: Int) =>
+ List(x * 2)
+ }
+ val h = f.product(g)
val x = h.run(1)
- (x.first, x.second) should === ((Some(11), List(2)))
+ (x.first, x.second) should ===((Some(11), List(2)))
}
test("traverse") {
- val f = Func.appFunc { (x: Int) => (Some(x + 10): Option[Int]) }
- val xs = f traverse List(1, 2, 3)
- xs should === (Some(List(11, 12, 13)))
+ val f = Func.appFunc { (x: Int) =>
+ (Some(x + 10): Option[Int])
+ }
+ val xs = f.traverse(List(1, 2, 3))
+ xs should ===(Some(List(11, 12, 13)))
}
}
diff --git a/tests/src/test/scala/cats/tests/FunctionKSuite.scala b/tests/src/test/scala/cats/tests/FunctionKSuite.scala
index cc73ef4e3b..e605437690 100644
--- a/tests/src/test/scala/cats/tests/FunctionKSuite.scala
+++ b/tests/src/test/scala/cats/tests/FunctionKSuite.scala
@@ -13,54 +13,54 @@ class FunctionKSuite extends CatsSuite {
val optionToList = λ[FunctionK[Option, List]](_.toList)
sealed trait Test1Algebra[A] {
- def v : A
+ def v: A
}
- case class Test1[A](v : A) extends Test1Algebra[A]
+ case class Test1[A](v: A) extends Test1Algebra[A]
sealed trait Test2Algebra[A] {
- def v : A
+ def v: A
}
- case class Test2[A](v : A) extends Test2Algebra[A]
+ case class Test2[A](v: A) extends Test2Algebra[A]
- val Test1FK = λ[FunctionK[Test1Algebra,Id]](_.v)
- val Test2FK = λ[FunctionK[Test2Algebra,Id]](_.v)
+ val Test1FK = λ[FunctionK[Test1Algebra, Id]](_.v)
+ val Test2FK = λ[FunctionK[Test2Algebra, Id]](_.v)
test("compose") {
forAll { (list: List[Int]) =>
val listToList = optionToList.compose(listToOption)
- listToList(list) should === (list.take(1))
+ listToList(list) should ===(list.take(1))
}
}
test("andThen") {
forAll { (list: List[Int]) =>
val listToList = listToOption.andThen(optionToList)
- listToList(list) should === (list.take(1))
+ listToList(list) should ===(list.take(1))
}
}
test("id is identity") {
forAll { (list: List[Int]) =>
- FunctionK.id[List].apply(list) should === (list)
+ FunctionK.id[List].apply(list) should ===(list)
}
}
test("or") {
- val combinedInterpreter = Test1FK or Test2FK
- forAll { (a : Int, b : Int) =>
- combinedInterpreter(EitherK.left(Test1(a))) should === (a)
- combinedInterpreter(EitherK.right(Test2(b))) should === (b)
+ val combinedInterpreter = Test1FK.or(Test2FK)
+ forAll { (a: Int, b: Int) =>
+ combinedInterpreter(EitherK.left(Test1(a))) should ===(a)
+ combinedInterpreter(EitherK.right(Test2(b))) should ===(b)
}
}
test("and") {
- val combinedInterpreter = listToOption and listToVector
- forAll { (list : List[Int]) =>
+ val combinedInterpreter = listToOption.and(listToVector)
+ forAll { (list: List[Int]) =>
val prod = combinedInterpreter(list)
- prod.first should === (list.headOption)
- prod.second should === (list.toVector)
+ prod.first should ===(list.headOption)
+ prod.second should ===(list.toVector)
}
}
@@ -68,17 +68,17 @@ class FunctionKSuite extends CatsSuite {
def optionToList[A](option: Option[A]): List[A] = option.toList
val fOptionToList = FunctionK.lift(optionToList _)
forAll { (a: Option[Int]) =>
- fOptionToList(a) should === (optionToList(a))
+ fOptionToList(a) should ===(optionToList(a))
}
val fO2I: FunctionK[Option, Iterable] = FunctionK.lift(Option.option2Iterable _)
forAll { (a: Option[String]) =>
- fO2I(a).toList should === (Option.option2Iterable(a).toList)
+ fO2I(a).toList should ===(Option.option2Iterable(a).toList)
}
val fNelFromListUnsafe = FunctionK.lift(NonEmptyList.fromListUnsafe _)
forAll { (a: NonEmptyList[Int]) =>
- fNelFromListUnsafe(a.toList) should === (NonEmptyList.fromListUnsafe(a.toList))
+ fNelFromListUnsafe(a.toList) should ===(NonEmptyList.fromListUnsafe(a.toList))
}
}
@@ -87,14 +87,14 @@ class FunctionKSuite extends CatsSuite {
def optionToList[A](option: Option[A]): List[A] = option.toList
val fOptionToList = cats.arrow.FunctionK.lift(optionToList _)
forAll { (a: Option[Int]) =>
- fOptionToList(a) should === (optionToList(a))
+ fOptionToList(a) should ===(optionToList(a))
}
}
test("lift compound unary") {
val fNelFromList = FunctionK.lift[List, λ[α ⇒ Option[NonEmptyList[α]]]](NonEmptyList.fromList _)
forAll { (a: List[String]) =>
- fNelFromList(a) should === (NonEmptyList.fromList(a))
+ fNelFromList(a) should ===(NonEmptyList.fromList(a))
}
}
diff --git a/tests/src/test/scala/cats/tests/FunctionSuite.scala b/tests/src/test/scala/cats/tests/FunctionSuite.scala
index df7d9055b8..1b56ca44a8 100644
--- a/tests/src/test/scala/cats/tests/FunctionSuite.scala
+++ b/tests/src/test/scala/cats/tests/FunctionSuite.scala
@@ -24,7 +24,6 @@ import cats.laws.discipline.arbitrary._
import cats.kernel.{CommutativeGroup, CommutativeMonoid, CommutativeSemigroup}
import cats.kernel.{Band, BoundedSemilattice, Semilattice}
-
class FunctionSuite extends CatsSuite {
import Helpers._
@@ -70,8 +69,6 @@ class FunctionSuite extends CatsSuite {
checkAll("Function1[Int, Int]", DistributiveTests[Int => ?].distributive[Int, Int, Int, Id, Function1[Int, ?]])
checkAll("Distributive[Int => ?]", SerializableTests.serializable(Distributive[Int => ?]))
-
-
// law checks for the various Function0-related instances
checkAll("Function0[Eqed]", EqTests[Function0[Eqed]].eqv)
checkAll("Function0[POrd]", PartialOrderTests[Function0[POrd]].partialOrder)
@@ -87,7 +84,6 @@ class FunctionSuite extends CatsSuite {
checkAll("Function0[CGrp]", CommutativeGroupTests[Function0[CGrp]].commutativeGroup)
checkAll("Function0[Distributive]", DistributiveTests[Function0].distributive[Int, Int, Int, Id, Function0])
-
test("Function0[Hsh]") {
forAll { (x: Function0[Hsh], y: Function0[Hsh]) =>
HashLaws[Function0[Hsh]].hashCompatibility(x, y)
@@ -97,7 +93,8 @@ class FunctionSuite extends CatsSuite {
// Test for Arrow applicative
Applicative[String => ?]
checkAll("Function1[String, ?]",
- ApplicativeTests[Function1[String, ?]](Applicative.catsApplicativeForArrow[Function1, String]).applicative[Int, Int, Int])
+ ApplicativeTests[Function1[String, ?]](Applicative.catsApplicativeForArrow[Function1, String])
+ .applicative[Int, Int, Int])
// serialization tests for the various Function0-related instances
checkAll("Eq[() => Eqed]", SerializableTests.serializable(Eq[() => Eqed]))
@@ -130,7 +127,8 @@ class FunctionSuite extends CatsSuite {
// serialization tests for the various Function1-related instances
checkAll("Semigroup[String => Semi]", SerializableTests.serializable(Semigroup[String => Semi]))
- checkAll("CommutativeSemigroup[String => Semi]", SerializableTests.serializable(CommutativeSemigroup[String => CSemi]))
+ checkAll("CommutativeSemigroup[String => Semi]",
+ SerializableTests.serializable(CommutativeSemigroup[String => CSemi]))
checkAll("Band[String => Bnd]", SerializableTests.serializable(Band[String => Bnd]))
checkAll("Semilattice[String => SL]", SerializableTests.serializable(Semilattice[String => SL]))
checkAll("BoundedSemilattice[String => BSL]", SerializableTests.serializable(BoundedSemilattice[String => BSL]))
@@ -138,5 +136,6 @@ class FunctionSuite extends CatsSuite {
checkAll("CommutativeMonoid[String => CMono]", SerializableTests.serializable(CommutativeMonoid[String => CMono]))
checkAll("Group[String => Grp]", SerializableTests.serializable(Group[String => Grp]))
checkAll("CommutativeGroup[String => CGrp]", SerializableTests.serializable(CommutativeGroup[String => CGrp]))
- checkAll("ContravariantMonoidal[Function1[?, Monoid]]", SerializableTests.serializable(ContravariantMonoidal[? => Long]))
+ checkAll("ContravariantMonoidal[Function1[?, Monoid]]",
+ SerializableTests.serializable(ContravariantMonoidal[? => Long]))
}
diff --git a/tests/src/test/scala/cats/tests/FunctorSuite.scala b/tests/src/test/scala/cats/tests/FunctorSuite.scala
index 3b7c74ace0..8e448d6457 100644
--- a/tests/src/test/scala/cats/tests/FunctorSuite.scala
+++ b/tests/src/test/scala/cats/tests/FunctorSuite.scala
@@ -4,28 +4,28 @@ package tests
class FunctorSuite extends CatsSuite {
test("void replaces values with unit preserving structure") {
forAll { (l: List[Int], o: Option[Int], m: Map[String, Int]) =>
- l.void should === (List.fill(l.length)(()))
- o.void should === (if (o.nonEmpty) Some(()) else None)
- m.void should === (m.keys.map(k => (k, ())).toMap)
+ l.void should ===(List.fill(l.length)(()))
+ o.void should ===(if (o.nonEmpty) Some(()) else None)
+ m.void should ===(m.keys.map(k => (k, ())).toMap)
}
}
test("as replaces values with a constant value preserving structure") {
forAll { (l: List[Int], o: Option[Int], m: Map[String, Int], i: Int) =>
- l.as(i) should === (List.fill(l.length)(i))
- o.as(i) should === (if (o.nonEmpty) Some(i) else None)
- m.as(i) should === (m.keys.map(k => (k, i)).toMap)
+ l.as(i) should ===(List.fill(l.length)(i))
+ o.as(i) should ===(if (o.nonEmpty) Some(i) else None)
+ m.as(i) should ===(m.keys.map(k => (k, i)).toMap)
}
}
test("tupleLeft and tupleRight tuple values with a constant value preserving structure") {
forAll { (l: List[Int], o: Option[Int], m: Map[String, Int], i: Int) =>
- l.tupleLeft(i) should === (List.tabulate(l.length)(in => (i, l(in))))
- o.tupleLeft(i) should === (if (o.nonEmpty) Some((i, o.get)) else None)
- m.tupleLeft(i) should === (m.map { case (k, v) => (k, (i, v)) }.toMap)
- l.tupleRight(i) should === (List.tabulate(l.length)(in => (l(in), i)))
- o.tupleRight(i) should === (if (o.nonEmpty) Some((o.get, i)) else None)
- m.tupleRight(i) should === (m.map { case (k, v) => (k, (v, i)) }.toMap)
+ l.tupleLeft(i) should ===(List.tabulate(l.length)(in => (i, l(in))))
+ o.tupleLeft(i) should ===(if (o.nonEmpty) Some((i, o.get)) else None)
+ m.tupleLeft(i) should ===(m.map { case (k, v) => (k, (i, v)) }.toMap)
+ l.tupleRight(i) should ===(List.tabulate(l.length)(in => (l(in), i)))
+ o.tupleRight(i) should ===(if (o.nonEmpty) Some((o.get, i)) else None)
+ m.tupleRight(i) should ===(m.map { case (k, v) => (k, (v, i)) }.toMap)
}
}
@@ -33,7 +33,7 @@ class FunctorSuite extends CatsSuite {
forAll { (i: Int) =>
val list: List[Some[Int]] = List(Some(i))
val widened: List[Option[Int]] = list.widen[Option[Int]]
- widened should === (list.map(identity[Option[Int]]))
+ widened should ===(list.map(identity[Option[Int]]))
assert(widened eq list)
}
}
diff --git a/tests/src/test/scala/cats/tests/HashSuite.scala b/tests/src/test/scala/cats/tests/HashSuite.scala
index 908b9a9bcd..b0f368867d 100644
--- a/tests/src/test/scala/cats/tests/HashSuite.scala
+++ b/tests/src/test/scala/cats/tests/HashSuite.scala
@@ -1,7 +1,6 @@
package cats
package tests
-
class HashSuite extends CatsSuite {
{
@@ -12,5 +11,4 @@ class HashSuite extends CatsSuite {
assert(1.hash == 1.hashCode)
assert("ABC".hash == "ABC".hashCode)
-
}
diff --git a/tests/src/test/scala/cats/tests/IdTSuite.scala b/tests/src/test/scala/cats/tests/IdTSuite.scala
index 878590d363..6cb1ab9f8e 100644
--- a/tests/src/test/scala/cats/tests/IdTSuite.scala
+++ b/tests/src/test/scala/cats/tests/IdTSuite.scala
@@ -2,17 +2,19 @@ package cats
package tests
import cats.data.{Const, IdT, NonEmptyList}
-import cats.kernel.laws.discipline.{OrderTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, OrderTests}
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
import Helpers.CSemi
class IdTSuite extends CatsSuite {
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[IdT[ListWrapper, ?]](IdT.catsDataFunctorForIdT(ListWrapper.functor))
+ implicit val iso =
+ SemigroupalTests.Isomorphisms.invariant[IdT[ListWrapper, ?]](IdT.catsDataFunctorForIdT(ListWrapper.functor))
checkAll("IdT[(CSemi, ?), Int]", CommutativeFlatMapTests[IdT[(CSemi, ?), ?]].commutativeFlatMap[Int, Int, Int])
- checkAll("CommutativeFlatMap[IdT[(CSemi, ?), ?]]", SerializableTests.serializable(CommutativeFlatMap[IdT[(CSemi, ?), ?]]))
+ checkAll("CommutativeFlatMap[IdT[(CSemi, ?), ?]]",
+ SerializableTests.serializable(CommutativeFlatMap[IdT[(CSemi, ?), ?]]))
checkAll("IdT[Option, Int]", CommutativeMonadTests[IdT[Option, ?]].commutativeMonad[Int, Int, Int])
checkAll("CommutativeMonad[IdT[Option, ?]]", SerializableTests.serializable(CommutativeMonad[IdT[Option, ?]]))
@@ -54,9 +56,9 @@ class IdTSuite extends CatsSuite {
{
checkAll("IdT[Const[String, ?], ?]",
- ContravariantMonoidalTests[IdT[Const[String, ?], ?]].contravariantMonoidal[Int, Int, Int])
+ ContravariantMonoidalTests[IdT[Const[String, ?], ?]].contravariantMonoidal[Int, Int, Int])
checkAll("ContravariantMonoidal[IdT[Const[String, ?], ?]]",
- SerializableTests.serializable(ContravariantMonoidal[IdT[Const[String, ?], ?]]))
+ SerializableTests.serializable(ContravariantMonoidal[IdT[Const[String, ?], ?]]))
}
{
@@ -83,28 +85,30 @@ class IdTSuite extends CatsSuite {
{
implicit val F = ListWrapper.traverse
- checkAll("IdT[ListWrapper, Int] with Option", TraverseTests[IdT[ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("IdT[ListWrapper, Int] with Option",
+ TraverseTests[IdT[ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[IdT[ListWrapper, ?]]", SerializableTests.serializable(Traverse[IdT[ListWrapper, ?]]))
}
{
implicit val F = NonEmptyList.catsDataInstancesForNonEmptyList
- checkAll("IdT[NonEmptyList, Int]", NonEmptyTraverseTests[IdT[NonEmptyList, ?]].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
- checkAll("NonEmptyTraverse[IdT[NonEmptyList, ?]]", SerializableTests.serializable(NonEmptyTraverse[IdT[NonEmptyList, ?]]))
+ checkAll("IdT[NonEmptyList, Int]",
+ NonEmptyTraverseTests[IdT[NonEmptyList, ?]].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
+ checkAll("NonEmptyTraverse[IdT[NonEmptyList, ?]]",
+ SerializableTests.serializable(NonEmptyTraverse[IdT[NonEmptyList, ?]]))
}
-
test("flatMap and flatMapF consistent") {
- forAll { (idT: IdT[Option, Int], f: Int => IdT[Option, Int]) =>
- idT.flatMap(f) should === (idT.flatMapF(f(_).value))
+ forAll { (idT: IdT[Option, Int], f: Int => IdT[Option, Int]) =>
+ idT.flatMap(f) should ===(idT.flatMapF(f(_).value))
}
}
test("mapK consistent with f(value)+pure") {
val f: List ~> Option = λ[List ~> Option](_.headOption)
forAll { (idT: IdT[List, Int]) =>
- idT.mapK(f) should === (IdT(f(idT.value)))
+ idT.mapK(f) should ===(IdT(f(idT.value)))
}
}
diff --git a/tests/src/test/scala/cats/tests/IndexedReaderWriterStateTSuite.scala b/tests/src/test/scala/cats/tests/IndexedReaderWriterStateTSuite.scala
index ac6cb30a8c..d03fa4f278 100644
--- a/tests/src/test/scala/cats/tests/IndexedReaderWriterStateTSuite.scala
+++ b/tests/src/test/scala/cats/tests/IndexedReaderWriterStateTSuite.scala
@@ -1,13 +1,13 @@
package cats
package tests
-import cats.data.{ IRWST, IndexedReaderWriterStateT, ReaderWriterStateT, ReaderWriterState, EitherT }
+import cats.data.{EitherT, IRWST, IndexedReaderWriterStateT, ReaderWriterState, ReaderWriterStateT}
import cats.laws.discipline._
import cats.laws.discipline.eq._
import cats.laws.discipline.arbitrary._
import org.scalacheck.Arbitrary
-import cats.arrow.{Strong, Profunctor}
+import cats.arrow.{Profunctor, Strong}
class ReaderWriterStateTSuite extends CatsSuite {
import ReaderWriterStateTSuite._
@@ -16,9 +16,9 @@ class ReaderWriterStateTSuite extends CatsSuite {
forAll { (context: String, initial: Int) =>
val (log, state, result) = addAndLog(5).run(context, initial).value
- log should === (Vector(s"${context}: Added 5"))
- state should === (initial + 5)
- result should === (initial + 5)
+ log should ===(Vector(s"${context}: Added 5"))
+ state should ===(initial + 5)
+ result should ===(initial + 5)
}
}
@@ -26,24 +26,28 @@ class ReaderWriterStateTSuite extends CatsSuite {
val ns = (0 to 70000).toList
val rws = ns.traverse(_ => addLogUnit(1))
- rws.runS("context", 0).value should === (70001)
+ rws.runS("context", 0).value should ===(70001)
}
test("map2 combines logs") {
- forAll { (rwsa: ReaderWriterState[String, Vector[Int], Int, Int], rwsb: ReaderWriterState[String, Vector[Int], Int, Int], c: String, s: Int) =>
- val logMap2 = rwsa.map2(rwsb)((_, _) => ()).runL(c, s).value
+ forAll {
+ (rwsa: ReaderWriterState[String, Vector[Int], Int, Int],
+ rwsb: ReaderWriterState[String, Vector[Int], Int, Int],
+ c: String,
+ s: Int) =>
+ val logMap2 = rwsa.map2(rwsb)((_, _) => ()).runL(c, s).value
- val (logA, stateA, _) = rwsa.run(c, s).value
- val logB = rwsb.runL(c, stateA).value
- val combinedLog = logA |+| logB
+ val (logA, stateA, _) = rwsa.run(c, s).value
+ val logB = rwsb.runL(c, stateA).value
+ val combinedLog = logA |+| logB
- logMap2 should === (combinedLog)
+ logMap2 should ===(combinedLog)
}
}
test("ReaderWriterState.ask provides the context") {
forAll { (context: String, initial: Int) =>
- ReaderWriterState.ask[String, String, Int].runA(context, initial).value should === (context)
+ ReaderWriterState.ask[String, String, Int].runA(context, initial).value should ===(context)
}
}
@@ -53,15 +57,15 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Int] = ReaderWriterStateT.pure(value)
val irwst: ReaderWriterState[String, Vector[String], Int, Int] = IndexedReaderWriterStateT.pure(value)
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
test("ReaderWriterState.pure creates an ReaderWriterState with an empty log") {
forAll { (context: String, initial: Int) =>
val rws: ReaderWriterState[String, String, Int, Unit] = ReaderWriterState.pure(())
- rws.run(context, initial).value should === ((Monoid[String].empty, initial, ()))
+ rws.run(context, initial).value should ===((Monoid[String].empty, initial, ()))
}
}
@@ -71,8 +75,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Int] = ReaderWriterStateT.get
val irwst: ReaderWriterState[String, Vector[String], Int, Int] = IndexedReaderWriterStateT.get
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -81,7 +85,7 @@ class ReaderWriterStateTSuite extends CatsSuite {
val singleton = ReaderWriterState.get[String, String, Int]
val instance = ReaderWriterState.pure[String, String, Int, Unit](()).get
- singleton should === (instance)
+ singleton should ===(instance)
}
}
@@ -90,7 +94,7 @@ class ReaderWriterStateTSuite extends CatsSuite {
val singleton = ReaderWriterState.inspect[String, String, Int, String](_.toString)
val instance = ReaderWriterState.pure[String, String, Int, Unit](()).inspect(_.toString)
- singleton should === (instance)
+ singleton should ===(instance)
}
}
@@ -100,8 +104,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Int] = ReaderWriterStateT.inspect(f)
val irwst: ReaderWriterState[String, Vector[String], Int, Int] = IndexedReaderWriterStateT.inspect(f)
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -111,8 +115,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, String, Int, Int] = ReaderWriterStateT.inspectF(f.andThen(Eval.now))
val irwst: ReaderWriterState[String, String, Int, Int] = IndexedReaderWriterStateT.inspectF(f.andThen(Eval.now))
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -122,8 +126,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Unit] = ReaderWriterStateT.modify(f)
val irwst: ReaderWriterState[String, Vector[String], Int, Unit] = IndexedReaderWriterStateT.modify(f)
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -131,10 +135,11 @@ class ReaderWriterStateTSuite extends CatsSuite {
forAll { (f: Int => Int) =>
val rws: ReaderWriterState[String, Vector[String], Int, Unit] = ReaderWriterState.modify(f)
val rwst: ReaderWriterState[String, Vector[String], Int, Unit] = ReaderWriterStateT.modifyF(f.andThen(Eval.now))
- val irwst: ReaderWriterState[String, Vector[String], Int, Unit] = IndexedReaderWriterStateT.modifyF(f.andThen(Eval.now))
+ val irwst: ReaderWriterState[String, Vector[String], Int, Unit] =
+ IndexedReaderWriterStateT.modifyF(f.andThen(Eval.now))
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -144,8 +149,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Int] = ReaderWriterStateT.liftF(Eval.now(value))
val irwst: ReaderWriterState[String, Vector[String], Int, Int] = IndexedReaderWriterStateT.liftF(Eval.now(value))
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -155,8 +160,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Unit] = ReaderWriterStateT.set(next)
val irwst: ReaderWriterState[String, Vector[String], Int, Unit] = IndexedReaderWriterStateT.set(next)
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -166,8 +171,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, Vector[String], Int, Unit] = ReaderWriterStateT.setF(Eval.now(next))
val irwst: ReaderWriterState[String, Vector[String], Int, Unit] = IndexedReaderWriterStateT.setF(Eval.now(next))
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -177,8 +182,8 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, String, Int, Unit] = ReaderWriterStateT.tell(log)
val irwst: ReaderWriterState[String, String, Int, Unit] = IndexedReaderWriterStateT.tell(log)
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
@@ -188,14 +193,14 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rwst: ReaderWriterState[String, String, Int, Unit] = ReaderWriterStateT.tellF(Eval.now(log))
val irwst: ReaderWriterState[String, String, Int, Unit] = IndexedReaderWriterStateT.tellF(Eval.now(log))
- rws should === (rwst)
- rwst should === (irwst)
+ rws should ===(rwst)
+ rwst should ===(irwst)
}
}
test("ReaderWriterState.tell + written is identity") {
forAll { (context: String, initial: Int, log: String) =>
- ReaderWriterState.tell[String, String, Int](log).written.runA(context, initial).value should === (log)
+ ReaderWriterState.tell[String, String, Int](log).written.runA(context, initial).value should ===(log)
}
}
@@ -203,16 +208,13 @@ class ReaderWriterStateTSuite extends CatsSuite {
val rws = addAndLog(5) *> addAndLog(10)
val (log, state, result) = rws.run("context", 0).value
- log should === (Vector("context: Added 5", "context: Added 10"))
- state should === (15)
- result should === (15)
+ log should ===(Vector("context: Added 5", "context: Added 10"))
+ state should ===(15)
+ result should ===(15)
}
test("flatMap and flatMapF+tell are consistent") {
- forAll {
- (rwst: ReaderWriterStateT[Option, String, String, String, Int], f: Int => Option[Int],
- initial: String, context: String, log: String) =>
-
+ forAll { (rwst: ReaderWriterStateT[Option, String, String, String, Int], f: Int => Option[Int], initial: String, context: String, log: String) =>
val flatMap = rwst.flatMap { a =>
ReaderWriterStateT { (e, s) =>
f(a).map((log, s, _))
@@ -221,40 +223,40 @@ class ReaderWriterStateTSuite extends CatsSuite {
val flatMapF = rwst.flatMapF(f).tell(log)
- flatMap.run(context, initial) should === (flatMapF.run(context, initial))
+ flatMap.run(context, initial) should ===(flatMapF.run(context, initial))
}
}
test("runEmpty, runEmptyS, runEmptyA and runEmptyL are consistent") {
forAll { (f: ReaderWriterStateT[Option, String, String, String, Int], c: String) =>
- (f.runEmptyL(c), f.runEmptyS(c), f.runEmptyA(c)).tupled should === (f.runEmpty(c))
+ (f.runEmptyL(c), f.runEmptyS(c), f.runEmptyA(c)).tupled should ===(f.runEmpty(c))
}
}
test("reset on pure is a noop") {
forAll { (c: String, s: Int, a: Int) =>
val pure = ReaderWriterState.pure[String, String, Int, Int](a)
- pure.reset should === (pure)
+ pure.reset should ===(pure)
}
}
test("modify identity is a noop") {
forAll { (f: ReaderWriterStateT[Option, String, String, String, Int], c: String, initial: String) =>
- f.modify(identity).run(c, initial) should === (f.run(c, initial))
+ f.modify(identity).run(c, initial) should ===(f.run(c, initial))
}
}
test("modify modifies only the state") {
forAll { (rws: ReaderWriterStateT[Option, String, String, Long, Long], c: String, f: Long => Long, initial: Long) =>
- rws.modify(f).runS(c, initial) should === (rws.runS(c, initial).map(f))
- rws.modify(f).runA(c, initial) should === (rws.runA(c, initial))
+ rws.modify(f).runS(c, initial) should ===(rws.runS(c, initial).map(f))
+ rws.modify(f).runA(c, initial) should ===(rws.runA(c, initial))
}
}
test("reset modifies only the log") {
forAll { (rws: ReaderWriterState[String, String, Int, Int], c: String, s: Int) =>
- rws.reset.runA(c, s) should === (rws.runA(c, s))
- rws.reset.runS(c, s) should === (rws.runS(c, s))
+ rws.reset.runA(c, s) should ===(rws.runA(c, s))
+ rws.reset.runS(c, s) should ===(rws.runS(c, s))
}
}
@@ -266,7 +268,7 @@ class ReaderWriterStateTSuite extends CatsSuite {
_ <- ReaderWriterStateT.set[Option, String, String, Long](f(l))
} yield ()
- s1.run(c, initial) should === (s2.run(c, initial))
+ s1.run(c, initial) should ===(s2.run(c, initial))
}
}
@@ -275,7 +277,7 @@ class ReaderWriterStateTSuite extends CatsSuite {
val s1 = ReaderWriterStateT.set[Option, String, String, Long](s)
val s2 = ReaderWriterStateT.modify[Option, String, String, Long](_ => s)
- s1.run(c, initial) should === (s2.run(c, initial))
+ s1.run(c, initial) should ===(s2.run(c, initial))
}
}
@@ -284,14 +286,14 @@ class ReaderWriterStateTSuite extends CatsSuite {
val s1 = ReaderWriterStateT.setF[Option, String, String, Long](s)
val s2 = ReaderWriterStateT.modifyF[Option, String, String, Long](_ => s)
- s1.run(c, initial) should === (s2.run(c, initial))
+ s1.run(c, initial) should ===(s2.run(c, initial))
}
}
test("ReaderWriterStateT.mapK transforms effect") {
val f: Eval ~> Id = λ[Eval ~> Id](_.value)
forAll { (state: ReaderWriterStateT[Eval, Long, String, String, Int], env: Long, initial: String) =>
- state.mapK(f).runA(env, initial) should === (state.runA(env, initial).value)
+ state.mapK(f).runA(env, initial) should ===(state.runA(env, initial).value)
}
}
@@ -299,67 +301,101 @@ class ReaderWriterStateTSuite extends CatsSuite {
forAll { (c: String, initial: Long, rws: ReaderWriterState[String, String, Long, Long]) =>
val (_, state, value) = rws.get.run(c, initial).value
- state should === (value)
+ state should ===(value)
}
}
test(".get and .flatMap with .get are equivalent") {
forAll { (c: String, initial: Long, rws: ReaderWriterState[String, String, Long, Long]) =>
- rws.get.run(c, initial) should === (rws.flatMap(_ => ReaderWriterState.get).run(c, initial))
+ rws.get.run(c, initial) should ===(rws.flatMap(_ => ReaderWriterState.get).run(c, initial))
}
}
implicit val iso = SemigroupalTests.Isomorphisms
- .invariant[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]](IndexedReaderWriterStateT.catsDataFunctorForIRWST(ListWrapper.functor))
+ .invariant[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]](
+ IndexedReaderWriterStateT.catsDataFunctorForIRWST(ListWrapper.functor)
+ )
checkAll("IndexedReaderWriterStateT[Eval, String, String, Int, String, ?]",
- DeferTests[IndexedReaderWriterStateT[Eval, String, String, Int, String, ?]].defer[Int])
+ DeferTests[IndexedReaderWriterStateT[Eval, String, String, Int, String, ?]].defer[Int])
{
implicit val F: Monad[ListWrapper] = ListWrapper.monad
- checkAll("IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, Int]",
- FunctorTests[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]].functor[Int, Int, Int])
- checkAll("Functor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]]",
- SerializableTests.serializable(Functor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]]))
-
- checkAll("IndexedReaderWriterStateT[ListWrapper, String, String, String, Int, Int]",
- ContravariantTests[IndexedReaderWriterStateT[ListWrapper, String, String, ?, Int, Int]].contravariant[String, String, String])
- checkAll("Contravariant[IndexedReaderWriterStateT[ListWrapper, String, String, ?, Int, Int]]",
- SerializableTests.serializable(Contravariant[IndexedReaderWriterStateT[ListWrapper, String, String, ?, Int, Int]]))
-
- checkAll("IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, Int]",
- ProfunctorTests[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]].profunctor[Int, Int, Int, String, String, String])
- checkAll("Profunctor[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]",
- SerializableTests.serializable(Profunctor[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]))
-
- checkAll("IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, Int]",
- StrongTests[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]].strong[Int, Int, Int, String, String, String])
- checkAll("Strong[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]",
- SerializableTests.serializable(Strong[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]))
-
- checkAll("IndexedReaderWriterStateT[ListWrapper, String, String, Int, Int, String]",
- BifunctorTests[IndexedReaderWriterStateT[ListWrapper, String, String, Int, ?, ?]].bifunctor[Int, Int, Int, String, String, String])
- checkAll("Bifunctor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, ?, ?]]",
- SerializableTests.serializable(Bifunctor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, ?, ?]]))
+ checkAll(
+ "IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, Int]",
+ FunctorTests[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]].functor[Int, Int, Int]
+ )
+ checkAll(
+ "Functor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]]",
+ SerializableTests.serializable(Functor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, ?]])
+ )
+
+ checkAll(
+ "IndexedReaderWriterStateT[ListWrapper, String, String, String, Int, Int]",
+ ContravariantTests[IndexedReaderWriterStateT[ListWrapper, String, String, ?, Int, Int]]
+ .contravariant[String, String, String]
+ )
+ checkAll(
+ "Contravariant[IndexedReaderWriterStateT[ListWrapper, String, String, ?, Int, Int]]",
+ SerializableTests.serializable(Contravariant[IndexedReaderWriterStateT[ListWrapper, String, String, ?, Int, Int]])
+ )
+
+ checkAll(
+ "IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, Int]",
+ ProfunctorTests[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]
+ .profunctor[Int, Int, Int, String, String, String]
+ )
+ checkAll(
+ "Profunctor[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]",
+ SerializableTests.serializable(Profunctor[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]])
+ )
+
+ checkAll(
+ "IndexedReaderWriterStateT[ListWrapper, String, String, Int, String, Int]",
+ StrongTests[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]
+ .strong[Int, Int, Int, String, String, String]
+ )
+ checkAll(
+ "Strong[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]]",
+ SerializableTests.serializable(Strong[IndexedReaderWriterStateT[ListWrapper, String, String, ?, ?, Int]])
+ )
+
+ checkAll(
+ "IndexedReaderWriterStateT[ListWrapper, String, String, Int, Int, String]",
+ BifunctorTests[IndexedReaderWriterStateT[ListWrapper, String, String, Int, ?, ?]]
+ .bifunctor[Int, Int, Int, String, String, String]
+ )
+ checkAll(
+ "Bifunctor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, ?, ?]]",
+ SerializableTests.serializable(Bifunctor[IndexedReaderWriterStateT[ListWrapper, String, String, Int, ?, ?]])
+ )
}
{
implicit val G: Monad[ListWrapper] = ListWrapper.monad
- val SA = IRWST.catsDataAlternativeForIRWST[ListWrapper, String, String, Int](ListWrapper.monad, ListWrapper.alternative, Monoid[String])
+ val SA = IRWST.catsDataAlternativeForIRWST[ListWrapper, String, String, Int](ListWrapper.monad,
+ ListWrapper.alternative,
+ Monoid[String])
- checkAll("IndexedReaderWriterStateT[ListWrapper, String, String, Int, Int, Int]", AlternativeTests[IRWST[ListWrapper, String, String, Int, Int, ?]](SA).alternative[Int, Int, Int])
- checkAll("Alternative[IndexedReaderWriterStateT[ListWrapper, String, String, Int, Int, ?]]", SerializableTests.serializable(SA))
+ checkAll(
+ "IndexedReaderWriterStateT[ListWrapper, String, String, Int, Int, Int]",
+ AlternativeTests[IRWST[ListWrapper, String, String, Int, Int, ?]](SA).alternative[Int, Int, Int]
+ )
+ checkAll("Alternative[IndexedReaderWriterStateT[ListWrapper, String, String, Int, Int, ?]]",
+ SerializableTests.serializable(SA))
}
{
implicit val LWM: Monad[ListWrapper] = ListWrapper.monad
checkAll("ReaderWriterStateT[ListWrapper, String, String, Int, Int]",
- MonadTests[ReaderWriterStateT[ListWrapper, String, String, Int, ?]].monad[Int, Int, Int])
- checkAll("Monad[ReaderWriterStateT[ListWrapper, String, String, Int, ?]]",
- SerializableTests.serializable(Monad[ReaderWriterStateT[ListWrapper, String, String, Int, ?]]))
+ MonadTests[ReaderWriterStateT[ListWrapper, String, String, Int, ?]].monad[Int, Int, Int])
+ checkAll(
+ "Monad[ReaderWriterStateT[ListWrapper, String, String, Int, ?]]",
+ SerializableTests.serializable(Monad[ReaderWriterStateT[ListWrapper, String, String, Int, ?]])
+ )
}
{
@@ -368,9 +404,11 @@ class ReaderWriterStateTSuite extends CatsSuite {
EitherT.catsDataEqForEitherT[ReaderWriterStateT[Option, String, String, Int, ?], Unit, Int]
checkAll("ReaderWriterStateT[Option, String, String, Int, Int]",
- MonadErrorTests[ReaderWriterStateT[Option, String, String, Int, ?], Unit].monadError[Int, Int, Int])
- checkAll("MonadError[ReaderWriterStateT[Option, String, String, Int, ?], Unit]",
- SerializableTests.serializable(MonadError[ReaderWriterStateT[Option, String, String, Int, ?], Unit]))
+ MonadErrorTests[ReaderWriterStateT[Option, String, String, Int, ?], Unit].monadError[Int, Int, Int])
+ checkAll(
+ "MonadError[ReaderWriterStateT[Option, String, String, Int, ?], Unit]",
+ SerializableTests.serializable(MonadError[ReaderWriterStateT[Option, String, String, Int, ?], Unit])
+ )
}
{
@@ -378,9 +416,11 @@ class ReaderWriterStateTSuite extends CatsSuite {
implicit val S: SemigroupK[ListWrapper] = ListWrapper.semigroupK
checkAll("ReaderWriterStateT[ListWrapper, String, String, Int, Int]",
- SemigroupKTests[ReaderWriterStateT[ListWrapper, String, String, Int, ?]].semigroupK[Int])
- checkAll("SemigroupK[ReaderWriterStateT[ListWrapper, String, String, Int, ?]]",
- SerializableTests.serializable(SemigroupK[ReaderWriterStateT[ListWrapper, String, String, Int, ?]]))
+ SemigroupKTests[ReaderWriterStateT[ListWrapper, String, String, Int, ?]].semigroupK[Int])
+ checkAll(
+ "SemigroupK[ReaderWriterStateT[ListWrapper, String, String, Int, ?]]",
+ SerializableTests.serializable(SemigroupK[ReaderWriterStateT[ListWrapper, String, String, Int, ?]])
+ )
}
}
@@ -397,12 +437,17 @@ object ReaderWriterStateTSuite {
def addLogUnit(i: Int): ReaderWriterState[String, Unit, Int, Int] = {
import cats.kernel.instances.unit._
- ReaderWriterState { (context, state) => ((), state + i, state + i) }
+ ReaderWriterState { (context, state) =>
+ ((), state + i, state + i)
+ }
}
- implicit def IRWSTEq[F[_], E, L, SA, SB, A](implicit SA: Arbitrary[SA], SB: Arbitrary[SB], E: Arbitrary[E],
- FLSB: Eq[F[(L, SB, A)]], F: Monad[F]): Eq[IndexedReaderWriterStateT[F, E, L, SA, SB, A]] =
- Eq.by[IndexedReaderWriterStateT[F, E, L, SA, SB, A], (E, SA) => F[(L, SB, A)]] { state =>
- (e, s) => state.run(e, s)
+ implicit def IRWSTEq[F[_], E, L, SA, SB, A](implicit SA: Arbitrary[SA],
+ SB: Arbitrary[SB],
+ E: Arbitrary[E],
+ FLSB: Eq[F[(L, SB, A)]],
+ F: Monad[F]): Eq[IndexedReaderWriterStateT[F, E, L, SA, SB, A]] =
+ Eq.by[IndexedReaderWriterStateT[F, E, L, SA, SB, A], (E, SA) => F[(L, SB, A)]] { state => (e, s) =>
+ state.run(e, s)
}
}
diff --git a/tests/src/test/scala/cats/tests/IndexedStateTSuite.scala b/tests/src/test/scala/cats/tests/IndexedStateTSuite.scala
index 88589251c3..4fb6f69b5f 100644
--- a/tests/src/test/scala/cats/tests/IndexedStateTSuite.scala
+++ b/tests/src/test/scala/cats/tests/IndexedStateTSuite.scala
@@ -18,8 +18,8 @@ class IndexedStateTSuite extends CatsSuite {
import IndexedStateTSuite._
- test("basic state usage"){
- add1.run(1).value should === (2 -> 1)
+ test("basic state usage") {
+ add1.run(1).value should ===(2 -> 1)
}
test("basic IndexedStateT usage") {
@@ -34,46 +34,46 @@ class IndexedStateTSuite extends CatsSuite {
r <- IndexedStateT.get[Id, String]
} yield r
- composite.run(List(1, 2, 3)) should === (("1", "1"))
- composite.run(Nil) should === (("0", "0"))
+ composite.run(List(1, 2, 3)) should ===(("1", "1"))
+ composite.run(Nil) should ===(("0", "0"))
}
- test("traversing state is stack-safe"){
+ test("traversing state is stack-safe") {
val ns = (0 to 70000).toList
val x = ns.traverse(_ => add1)
- x.runS(0).value should === (70001)
+ x.runS(0).value should ===(70001)
}
- test("State.pure, StateT.pure and IndexedStateT.pure are consistent"){
+ test("State.pure, StateT.pure and IndexedStateT.pure are consistent") {
forAll { (s: String, i: Int) =>
val state: State[String, Int] = State.pure(i)
val stateT: State[String, Int] = StateT.pure(i)
val indexedStateT: State[String, Int] = IndexedStateT.pure(i)
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
- test("State.empty, StateT.empty and IndexedStateT.empty are consistent"){
+ test("State.empty, StateT.empty and IndexedStateT.empty are consistent") {
forAll { (s: String) =>
val state: State[String, Int] = State.empty
val stateT: State[String, Int] = StateT.empty
val indexedStateT: State[String, Int] = IndexedStateT.empty
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
test("State.get, StateT.get and IndexedStateT.get are consistent") {
- forAll{ (s: String) =>
+ forAll { (s: String) =>
val state: State[String, String] = State.get
val stateT: State[String, String] = StateT.get
val indexedStateT: State[String, String] = IndexedStateT.get
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
@@ -83,8 +83,8 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: State[String, Int] = StateT.inspect(f)
val indexedStateT: State[String, Int] = IndexedStateT.inspect(f)
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
@@ -94,8 +94,8 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: State[String, Int] = StateT.inspectF(f.andThen(Eval.now))
val indexedStateT: State[String, Int] = IndexedStateT.inspectF(f.andThen(Eval.now))
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
@@ -105,8 +105,8 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: State[String, Unit] = StateT.modify(f)
val indexedStateT: State[String, Unit] = IndexedStateT.modify(f)
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
@@ -116,8 +116,8 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: State[String, Unit] = StateT.modifyF(f.andThen(Eval.now))
val indexedStateT: State[String, Unit] = IndexedStateT.modifyF(f.andThen(Eval.now))
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
@@ -127,8 +127,8 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: State[String, Int] = StateT.liftF(Eval.now(i))
val indexedStateT: State[String, Int] = IndexedStateT.liftF(Eval.now(i))
- state.run(s) should === (stateT.run(s))
- state.run(s) should === (indexedStateT.run(s))
+ state.run(s) should ===(stateT.run(s))
+ state.run(s) should ===(indexedStateT.run(s))
}
}
@@ -138,8 +138,8 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: StateT[Eval, String, Unit] = StateT.set(s)
val indexedStateT: StateT[Eval, String, Unit] = IndexedStateT.set(s)
- state.run(init) should === (stateT.run(init))
- state.run(init) should === (indexedStateT.run(init))
+ state.run(init) should ===(stateT.run(init))
+ state.run(init) should ===(indexedStateT.run(init))
}
}
@@ -149,54 +149,53 @@ class IndexedStateTSuite extends CatsSuite {
val stateT: StateT[Eval, String, Unit] = StateT.setF(Eval.now(s))
val indexedStateT: StateT[Eval, String, Unit] = IndexedStateT.setF(Eval.now(s))
- state.run(init) should === (stateT.run(init))
- state.run(init) should === (indexedStateT.run(init))
+ state.run(init) should ===(stateT.run(init))
+ state.run(init) should ===(indexedStateT.run(init))
}
}
test("Semigroupal syntax is usable on State") {
val x = add1 *> add1
- x.runS(0).value should === (2)
+ x.runS(0).value should ===(2)
}
- test("Singleton and instance inspect are consistent"){
+ test("Singleton and instance inspect are consistent") {
forAll { (s: String, i: Int) =>
- State.inspect[Int, String](_.toString).run(i) should === (
- State.pure[Int, Unit](()).inspect(_.toString).run(i))
+ State.inspect[Int, String](_.toString).run(i) should ===(State.pure[Int, Unit](()).inspect(_.toString).run(i))
}
}
test("flatMap and flatMapF consistent") {
forAll { (stateT: StateT[Option, Long, Int], f: Int => Option[Int]) =>
- stateT.flatMap(a => StateT(s => f(a).map(b => (s, b)))) should === (stateT.flatMapF(f))
+ stateT.flatMap(a => StateT(s => f(a).map(b => (s, b)))) should ===(stateT.flatMapF(f))
}
}
- test("runEmpty, runEmptyS, and runEmptyA consistent"){
+ test("runEmpty, runEmptyS, and runEmptyA consistent") {
forAll { (f: StateT[List, Long, Int]) =>
- (f.runEmptyS zip f.runEmptyA) should === (f.runEmpty)
+ (f.runEmptyS.zip(f.runEmptyA)) should ===(f.runEmpty)
}
}
- test("modify identity is a noop"){
+ test("modify identity is a noop") {
forAll { (f: StateT[List, Long, Int]) =>
- f.modify(identity) should === (f)
+ f.modify(identity) should ===(f)
}
}
- test("modify modifies state"){
+ test("modify modifies state") {
forAll { (f: StateT[List, Long, Int], g: Long => Long, initial: Long) =>
- f.modify(g).runS(initial) should === (f.runS(initial).map(g))
+ f.modify(g).runS(initial) should ===(f.runS(initial).map(g))
}
}
- test("modify doesn't affect A value"){
+ test("modify doesn't affect A value") {
forAll { (f: StateT[List, Long, Int], g: Long => Long, initial: Long) =>
- f.modify(g).runA(initial) should === (f.runA(initial))
+ f.modify(g).runA(initial) should ===(f.runA(initial))
}
}
- test("State.modify equivalent to get then set"){
+ test("State.modify equivalent to get then set") {
forAll { (f: Long => Long) =>
val s1 = for {
l <- State.get[Long]
@@ -205,7 +204,7 @@ class IndexedStateTSuite extends CatsSuite {
val s2 = State.modify(f)
- s1 should === (s2)
+ s1 should ===(s2)
}
}
@@ -213,7 +212,7 @@ class IndexedStateTSuite extends CatsSuite {
forAll { (init: String, update: String) =>
val s1 = StateT.modify[Eval, String](_ => update)
val s2 = StateT.set[Eval, String](update)
- s1.run(init) should === (s2.run(init))
+ s1.run(init) should ===(s2.run(init))
}
}
@@ -221,33 +220,33 @@ class IndexedStateTSuite extends CatsSuite {
forAll { (init: String, update: String) =>
val s1 = StateT.modifyF[Eval, String](_ => Eval.now(update))
val s2 = StateT.setF(Eval.now(update))
- s1.run(init) should === (s2.run(init))
+ s1.run(init) should ===(s2.run(init))
}
}
- test(".get and then .run produces same state as value"){
+ test(".get and then .run produces same state as value") {
forAll { (s: State[Long, Int], initial: Long) =>
val (finalS, finalA) = s.get.run(initial).value
- finalS should === (finalA)
+ finalS should ===(finalA)
}
}
- test(".get equivalent to flatMap with State.get"){
+ test(".get equivalent to flatMap with State.get") {
forAll { (s: State[Long, Int]) =>
- s.get should === (s.flatMap(_ => State.get))
+ s.get should ===(s.flatMap(_ => State.get))
}
}
test("StateT#transformS with identity is identity") {
forAll { (s: StateT[List, Long, Int]) =>
- s.transformS[Long](identity, (s, i) => i) should === (s)
+ s.transformS[Long](identity, (s, i) => i) should ===(s)
}
}
test("StateT#mapK transforms effect") {
val f: Eval ~> Id = λ[Eval ~> Id](_.value)
forAll { (state: StateT[Eval, Long, Int], initial: Long) =>
- state.mapK(f).runA(initial) should === (state.runA(initial).value)
+ state.mapK(f).runA(initial) should ===(state.runA(initial).value)
}
}
@@ -259,10 +258,9 @@ class IndexedStateTSuite extends CatsSuite {
val got = x.run(input)
val expected = xx.run(Env(input, "hello")).map { case (e, i) => (e.int, i) }
- got should === (expected)
+ got should ===(expected)
}
-
private val stackSafeTestSize =
if (Platform.isJvm) 100000 else 100
@@ -272,7 +270,7 @@ class IndexedStateTSuite extends CatsSuite {
val result = (0 until count).foldLeft(unit) { (acc, _) =>
acc.flatMap(_ => unit)
}
- result.run(()).value should === (((), ()))
+ result.run(()).value should ===(((), ()))
}
test("flatMap is stack safe on repeated right binds when F is") {
@@ -281,7 +279,7 @@ class IndexedStateTSuite extends CatsSuite {
val result = (0 until count).foldLeft(unit) { (acc, _) =>
unit.flatMap(_ => acc)
}
- result.run(()).value should === (((), ()))
+ result.run(()).value should ===(((), ()))
}
test("untilDefinedM works") {
@@ -290,7 +288,7 @@ class IndexedStateTSuite extends CatsSuite {
(i + 1, res)
}
- counter.untilDefinedM.run(0).value should === ((stackSafeTestSize + 2, stackSafeTestSize + 1))
+ counter.untilDefinedM.run(0).value should ===((stackSafeTestSize + 2, stackSafeTestSize + 1))
}
test("foreverM works") {
@@ -298,7 +296,7 @@ class IndexedStateTSuite extends CatsSuite {
if (i > stackSafeTestSize) Left(i) else Right((i + 1, ()))
}
step.foreverM.run(0) match {
- case Left(big) => big should === (stackSafeTestSize + 1)
+ case Left(big) => big should ===(stackSafeTestSize + 1)
case Right((_, _)) => fail("unreachable code due to Nothing, but scalac won't let us match on it")
}
}
@@ -310,12 +308,14 @@ class IndexedStateTSuite extends CatsSuite {
}
}
result.run(0) match {
- case Left(sum) => sum should === (stackSafeTestSize + 1)
+ case Left(sum) => sum should ===(stackSafeTestSize + 1)
case Right((_, _)) => fail("unreachable code due to Nothing, but scalac won't let us match on it")
}
}
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[IndexedStateT[ListWrapper, String, Int, ?]](IndexedStateT.catsDataFunctorForIndexedStateT(ListWrapper.monad))
+ implicit val iso = SemigroupalTests.Isomorphisms.invariant[IndexedStateT[ListWrapper, String, Int, ?]](
+ IndexedStateT.catsDataFunctorForIndexedStateT(ListWrapper.monad)
+ )
{
// F has a Functor
@@ -349,18 +349,23 @@ class IndexedStateTSuite extends CatsSuite {
implicit val F: Monad[ListWrapper] = ListWrapper.monad
implicit val FS: Functor[IndexedStateT[ListWrapper, String, Int, ?]] = IndexedStateT.catsDataFunctorForIndexedStateT
- checkAll("IndexedStateT[ListWrapper, String, Int, Int]", FunctorTests[IndexedStateT[ListWrapper, String, Int, ?]].functor[Int, Int, Int])
- checkAll("Functor[IndexedStateT[ListWrapper, Int, ?]]", SerializableTests.serializable(Functor[IndexedStateT[ListWrapper, String, Int, ?]]))
+ checkAll("IndexedStateT[ListWrapper, String, Int, Int]",
+ FunctorTests[IndexedStateT[ListWrapper, String, Int, ?]].functor[Int, Int, Int])
+ checkAll("Functor[IndexedStateT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(Functor[IndexedStateT[ListWrapper, String, Int, ?]]))
Functor[IndexedStateT[ListWrapper, String, Int, ?]]
}
{
implicit val F: Monad[ListWrapper] = ListWrapper.monad
- implicit val FS: Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]] = IndexedStateT.catsDataContravariantForIndexedStateT
+ implicit val FS: Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]] =
+ IndexedStateT.catsDataContravariantForIndexedStateT
- checkAll("IndexedStateT[ListWrapper, Int, Int, Int]", ContravariantTests[IndexedStateT[ListWrapper, ?, Int, Int]].contravariant[Int, Int, Int])
- checkAll("Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]]", SerializableTests.serializable(Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]]))
+ checkAll("IndexedStateT[ListWrapper, Int, Int, Int]",
+ ContravariantTests[IndexedStateT[ListWrapper, ?, Int, Int]].contravariant[Int, Int, Int])
+ checkAll("Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]]",
+ SerializableTests.serializable(Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]]))
Contravariant[IndexedStateT[ListWrapper, ?, Int, Int]]
}
@@ -369,18 +374,23 @@ class IndexedStateTSuite extends CatsSuite {
implicit val F: Monad[ListWrapper] = ListWrapper.monad
implicit val FS: Bifunctor[IndexedStateT[ListWrapper, Int, ?, ?]] = IndexedStateT.catsDataBifunctorForIndexedStateT
- checkAll("IndexedStateT[ListWrapper, Int, String, Int]", BifunctorTests[IndexedStateT[ListWrapper, Int, ?, ?]].bifunctor[String, String, String, Int, Int, Int])
- checkAll("Bifunctor[IndexedStateT[ListWrapper, Int, ?, ?]]", SerializableTests.serializable(Bifunctor[IndexedStateT[ListWrapper, Int, ?, ?]]))
+ checkAll("IndexedStateT[ListWrapper, Int, String, Int]",
+ BifunctorTests[IndexedStateT[ListWrapper, Int, ?, ?]].bifunctor[String, String, String, Int, Int, Int])
+ checkAll("Bifunctor[IndexedStateT[ListWrapper, Int, ?, ?]]",
+ SerializableTests.serializable(Bifunctor[IndexedStateT[ListWrapper, Int, ?, ?]]))
Bifunctor[IndexedStateT[ListWrapper, Int, ?, ?]]
}
{
implicit val F: Monad[ListWrapper] = ListWrapper.monad
- implicit val FS: Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]] = IndexedStateT.catsDataProfunctorForIndexedStateT
+ implicit val FS: Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]] =
+ IndexedStateT.catsDataProfunctorForIndexedStateT
- checkAll("IndexedStateT[ListWrapper, String, Int, Int]", ProfunctorTests[IndexedStateT[ListWrapper, ?, ?, Int]].profunctor[String, String, String, Int, Int, Int])
- checkAll("Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]]", SerializableTests.serializable(Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]]))
+ checkAll("IndexedStateT[ListWrapper, String, Int, Int]",
+ ProfunctorTests[IndexedStateT[ListWrapper, ?, ?, Int]].profunctor[String, String, String, Int, Int, Int])
+ checkAll("Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]]",
+ SerializableTests.serializable(Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]]))
Profunctor[IndexedStateT[ListWrapper, ?, ?, Int]]
}
@@ -389,8 +399,10 @@ class IndexedStateTSuite extends CatsSuite {
implicit val F: Monad[ListWrapper] = ListWrapper.monad
implicit val FS: Strong[IndexedStateT[ListWrapper, ?, ?, Int]] = IndexedStateT.catsDataStrongForIndexedStateT
- checkAll("IndexedStateT[ListWrapper, String, Int, Int]", StrongTests[IndexedStateT[ListWrapper, ?, ?, Int]].strong[String, String, String, Int, Int, Int])
- checkAll("Strong[IndexedStateT[ListWrapper, ?, ?, Int]]", SerializableTests.serializable(Strong[IndexedStateT[ListWrapper, ?, ?, Int]]))
+ checkAll("IndexedStateT[ListWrapper, String, Int, Int]",
+ StrongTests[IndexedStateT[ListWrapper, ?, ?, Int]].strong[String, String, String, Int, Int, Int])
+ checkAll("Strong[IndexedStateT[ListWrapper, ?, ?, Int]]",
+ SerializableTests.serializable(Strong[IndexedStateT[ListWrapper, ?, ?, Int]]))
Strong[IndexedStateT[ListWrapper, ?, ?, Int]]
}
@@ -399,8 +411,10 @@ class IndexedStateTSuite extends CatsSuite {
// F has a Monad
implicit val F = ListWrapper.monad
- checkAll("IndexedStateT[ListWrapper, Int, Int]", MonadTests[IndexedStateT[ListWrapper, Int, Int, ?]].monad[Int, Int, Int])
- checkAll("Monad[StateT[ListWrapper, Int, ?]]", SerializableTests.serializable(Monad[IndexedStateT[ListWrapper, Int, Int, ?]]))
+ checkAll("IndexedStateT[ListWrapper, Int, Int]",
+ MonadTests[IndexedStateT[ListWrapper, Int, Int, ?]].monad[Int, Int, Int])
+ checkAll("Monad[StateT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(Monad[IndexedStateT[ListWrapper, Int, Int, ?]]))
Monad[IndexedStateT[ListWrapper, Int, Int, ?]]
FlatMap[IndexedStateT[ListWrapper, Int, Int, ?]]
@@ -414,17 +428,21 @@ class IndexedStateTSuite extends CatsSuite {
implicit val F = ListWrapper.monad
implicit val S = ListWrapper.semigroupK
- checkAll("IndexedStateT[ListWrapper, Int, Int]", SemigroupKTests[IndexedStateT[ListWrapper, Int, Int, ?]].semigroupK[Int])
- checkAll("SemigroupK[IndexedStateT[ListWrapper, Int, ?]]", SerializableTests.serializable(SemigroupK[IndexedStateT[ListWrapper, String, Int, ?]]))
+ checkAll("IndexedStateT[ListWrapper, Int, Int]",
+ SemigroupKTests[IndexedStateT[ListWrapper, Int, Int, ?]].semigroupK[Int])
+ checkAll("SemigroupK[IndexedStateT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(SemigroupK[IndexedStateT[ListWrapper, String, Int, ?]]))
}
{
// F has an Alternative
implicit val G = ListWrapper.monad
implicit val F = ListWrapper.alternative
- val SA = IndexedStateT.catsDataAlternativeForIndexedStateT[ListWrapper, Int](ListWrapper.monad, ListWrapper.alternative)
+ val SA =
+ IndexedStateT.catsDataAlternativeForIndexedStateT[ListWrapper, Int](ListWrapper.monad, ListWrapper.alternative)
- checkAll("IndexedStateT[ListWrapper, Int, Int, Int]", AlternativeTests[IndexedStateT[ListWrapper, Int, Int, ?]](SA).alternative[Int, Int, Int])
+ checkAll("IndexedStateT[ListWrapper, Int, Int, Int]",
+ AlternativeTests[IndexedStateT[ListWrapper, Int, Int, ?]](SA).alternative[Int, Int, Int])
checkAll("Alternative[IndexedStateT[ListWrapper, Int, Int, ?]]", SerializableTests.serializable(SA))
Monad[IndexedStateT[ListWrapper, Int, Int, ?]]
@@ -447,16 +465,18 @@ class IndexedStateTSuite extends CatsSuite {
{
// F has a MonadError
implicit val iso = SemigroupalTests.Isomorphisms.invariant[StateT[Option, Int, ?]]
- implicit val eqEitherTFA: Eq[EitherT[StateT[Option, Int , ?], Unit, Int]] = EitherT.catsDataEqForEitherT[StateT[Option, Int , ?], Unit, Int]
+ implicit val eqEitherTFA: Eq[EitherT[StateT[Option, Int, ?], Unit, Int]] =
+ EitherT.catsDataEqForEitherT[StateT[Option, Int, ?], Unit, Int]
checkAll("StateT[Option, Int, Int]", MonadErrorTests[StateT[Option, Int, ?], Unit].monadError[Int, Int, Int])
- checkAll("MonadError[StateT[Option, Int, ?], Unit]", SerializableTests.serializable(MonadError[StateT[Option, Int , ?], Unit]))
+ checkAll("MonadError[StateT[Option, Int, ?], Unit]",
+ SerializableTests.serializable(MonadError[StateT[Option, Int, ?], Unit]))
}
}
object IndexedStateTSuite extends IndexedStateTSuiteInstances {
- implicit def stateEq[S:Eq:Arbitrary, A:Eq]: Eq[State[S, A]] =
+ implicit def stateEq[S: Eq: Arbitrary, A: Eq]: Eq[State[S, A]] =
indexedStateTEq[Eval, S, S, A]
val add1: State[Int, Int] = State(n => (n + 1, n))
@@ -464,7 +484,8 @@ object IndexedStateTSuite extends IndexedStateTSuiteInstances {
sealed trait IndexedStateTSuiteInstances {
- implicit def indexedStateTEq[F[_], SA, SB, A](implicit SA: Arbitrary[SA], FSB: Eq[F[(SB, A)]], F: FlatMap[F]): Eq[IndexedStateT[F, SA, SB, A]] =
- Eq.by[IndexedStateT[F, SA, SB, A], SA => F[(SB, A)]](state =>
- s => state.run(s))
+ implicit def indexedStateTEq[F[_], SA, SB, A](implicit SA: Arbitrary[SA],
+ FSB: Eq[F[(SB, A)]],
+ F: FlatMap[F]): Eq[IndexedStateT[F, SA, SB, A]] =
+ Eq.by[IndexedStateT[F, SA, SB, A], SA => F[(SB, A)]](state => s => state.run(s))
}
diff --git a/tests/src/test/scala/cats/tests/InjectKSuite.scala b/tests/src/test/scala/cats/tests/InjectKSuite.scala
index f057e5ec00..64ec95219c 100644
--- a/tests/src/test/scala/cats/tests/InjectKSuite.scala
+++ b/tests/src/test/scala/cats/tests/InjectKSuite.scala
@@ -9,7 +9,7 @@ class InjectKSuite extends CatsSuite {
sealed trait Test1Algebra[A]
- case class Test1[A](value : Int, f: Int => A) extends Test1Algebra[A]
+ case class Test1[A](value: Int, f: Int => A) extends Test1Algebra[A]
object Test1Algebra {
implicit def test1AlgebraAFunctor: Functor[Test1Algebra] =
@@ -19,15 +19,16 @@ class InjectKSuite extends CatsSuite {
}
}
- implicit def test1AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int], intAArb : Arbitrary[Int => A]): Arbitrary[Test1Algebra[A]] =
- Arbitrary(for {s <- seqArb.arbitrary; f <- intAArb.arbitrary} yield Test1(s, f))
+ implicit def test1AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int],
+ intAArb: Arbitrary[Int => A]): Arbitrary[Test1Algebra[A]] =
+ Arbitrary(for { s <- seqArb.arbitrary; f <- intAArb.arbitrary } yield Test1(s, f))
implicit def test1AlgebraEq[A](implicit ev: Eq[A]): Eq[Test1Algebra[A]] = Eq.fromUniversalEquals
}
sealed trait Test2Algebra[A]
- case class Test2[A](value : Int, f: Int => A) extends Test2Algebra[A]
+ case class Test2[A](value: Int, f: Int => A) extends Test2Algebra[A]
object Test2Algebra {
implicit def test2AlgebraAFunctor: Functor[Test2Algebra] =
@@ -37,8 +38,9 @@ class InjectKSuite extends CatsSuite {
}
}
- implicit def test2AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int], intAArb : Arbitrary[Int => A]): Arbitrary[Test2Algebra[A]] =
- Arbitrary(for {s <- seqArb.arbitrary; f <- intAArb.arbitrary} yield Test2(s, f))
+ implicit def test2AlgebraArbitrary[A](implicit seqArb: Arbitrary[Int],
+ intAArb: Arbitrary[Int => A]): Arbitrary[Test2Algebra[A]] =
+ Arbitrary(for { s <- seqArb.arbitrary; f <- intAArb.arbitrary } yield Test2(s, f))
implicit def test2AlgebraEq[A](implicit ev: Eq[A]): Eq[Test2Algebra[A]] = Eq.fromUniversalEquals
}
@@ -46,17 +48,16 @@ class InjectKSuite extends CatsSuite {
type T[A] = EitherK[Test1Algebra, Test2Algebra, A]
implicit def tArbitrary[A](
- implicit arb1: Arbitrary[Test1Algebra[A]], arb2: Arbitrary[Test2Algebra[A]]
- ): Arbitrary[T[A]] = Arbitrary(Gen.oneOf(
- arb1.arbitrary.map(EitherK.leftc(_): T[A]),
- arb2.arbitrary.map(EitherK.rightc(_): T[A])))
+ implicit arb1: Arbitrary[Test1Algebra[A]],
+ arb2: Arbitrary[Test2Algebra[A]]
+ ): Arbitrary[T[A]] =
+ Arbitrary(Gen.oneOf(arb1.arbitrary.map(EitherK.leftc(_): T[A]), arb2.arbitrary.map(EitherK.rightc(_): T[A])))
test("inj & prj") {
- def distr[F[_], A](f1: F[A], f2: F[A])
- (implicit
- F: Functor[F],
- I0: Test1Algebra :<: F,
- I1: Test2Algebra :<: F): Option[Int] =
+ def distr[F[_], A](f1: F[A], f2: F[A])(implicit
+ F: Functor[F],
+ I0: Test1Algebra :<: F,
+ I1: Test2Algebra :<: F): Option[Int] =
for {
Test1(x, _) <- I0.prj(f1)
Test2(y, _) <- I1.prj(f2)
@@ -71,11 +72,10 @@ class InjectKSuite extends CatsSuite {
}
test("apply & unapply") {
- def distr[F[_], A](f1: F[A], f2: F[A])
- (implicit
- F: Functor[F],
- I0: Test1Algebra :<: F,
- I1: Test2Algebra :<: F): Option[Int] =
+ def distr[F[_], A](f1: F[A], f2: F[A])(implicit
+ F: Functor[F],
+ I0: Test1Algebra :<: F,
+ I1: Test2Algebra :<: F): Option[Int] =
for {
Test1(x, _) <- I0.unapply(f1)
Test2(y, _) <- I1.unapply(f2)
diff --git a/tests/src/test/scala/cats/tests/InjectSuite.scala b/tests/src/test/scala/cats/tests/InjectSuite.scala
index 60fb8c3fef..633ad13918 100644
--- a/tests/src/test/scala/cats/tests/InjectSuite.scala
+++ b/tests/src/test/scala/cats/tests/InjectSuite.scala
@@ -8,11 +8,9 @@ class InjectSuite extends CatsSuite {
type StringOrInt = Either[String, Int]
test("inj & prj") {
- def distr[F](f1: F, f2: F)
- (implicit
- I0: Inject[String, F],
- I1: Inject[Int, F]
- ): Option[String] =
+ def distr[F](f1: F, f2: F)(implicit
+ I0: Inject[String, F],
+ I1: Inject[Int, F]): Option[String] =
for {
x <- I0.prj(f1)
y <- I1.prj(f2)
@@ -27,11 +25,9 @@ class InjectSuite extends CatsSuite {
}
test("apply & unapply") {
- def distr[F](f1: F, f2: F)
- (implicit
- I0: Inject[String, F],
- I1: Inject[Int, F]
- ): Option[String] =
+ def distr[F](f1: F, f2: F)(implicit
+ I0: Inject[String, F],
+ I1: Inject[Int, F]): Option[String] =
for {
x <- I0.unapply(f1)
y <- I1.unapply(f2)
diff --git a/tests/src/test/scala/cats/tests/IorSuite.scala b/tests/src/test/scala/cats/tests/IorSuite.scala
index a6e5a5a938..1f28382611 100644
--- a/tests/src/test/scala/cats/tests/IorSuite.scala
+++ b/tests/src/test/scala/cats/tests/IorSuite.scala
@@ -2,8 +2,15 @@ package cats
package tests
import cats.kernel.laws.discipline.SemigroupTests
-import cats.laws.discipline.{BifunctorTests, BitraverseTests, SemigroupalTests, MonadErrorTests, SerializableTests, TraverseTests}
-import cats.data.{Ior, NonEmptyChain, NonEmptyList, NonEmptySet, EitherT}
+import cats.laws.discipline.{
+ BifunctorTests,
+ BitraverseTests,
+ MonadErrorTests,
+ SemigroupalTests,
+ SerializableTests,
+ TraverseTests
+}
+import cats.data.{EitherT, Ior, NonEmptyChain, NonEmptyList, NonEmptySet}
import cats.laws.discipline.arbitrary._
import org.scalacheck.Arbitrary._
@@ -27,29 +34,30 @@ class IorSuite extends CatsSuite {
checkAll("Bitraverse[Ior]", SerializableTests.serializable(Bitraverse[Ior]))
checkAll("Semigroup[Ior[A: Semigroup, B: Semigroup]]", SemigroupTests[Ior[List[Int], List[Int]]].semigroup)
- checkAll("SerializableTest Semigroup[Ior[A: Semigroup, B: Semigroup]]", SerializableTests.serializable(Semigroup[Ior[List[Int], List[Int]]]))
+ checkAll("SerializableTest Semigroup[Ior[A: Semigroup, B: Semigroup]]",
+ SerializableTests.serializable(Semigroup[Ior[List[Int], List[Int]]]))
test("left Option is defined left and both") {
forAll { (i: Int Ior String) =>
- (i.isLeft || i.isBoth) should === (i.left.isDefined)
+ (i.isLeft || i.isBoth) should ===(i.left.isDefined)
}
}
test("right Option is defined for right and both") {
forAll { (i: Int Ior String) =>
- (i.isRight || i.isBoth) should === (i.right.isDefined)
+ (i.isRight || i.isBoth) should ===(i.right.isDefined)
}
}
test("onlyLeftOrRight") {
forAll { (i: Int Ior String) =>
- i.onlyLeft.map(Left(_)).orElse(i.onlyRight.map(Right(_))) should === (i.onlyLeftOrRight)
+ i.onlyLeft.map(Left(_)).orElse(i.onlyRight.map(Right(_))) should ===(i.onlyLeftOrRight)
}
}
test("onlyBoth consistent with left and right") {
forAll { (i: Int Ior String) =>
- i.onlyBoth should === (for {
+ i.onlyBoth should ===(for {
left <- i.left
right <- i.right
} yield (left, right))
@@ -58,60 +66,64 @@ class IorSuite extends CatsSuite {
test("pad") {
forAll { (i: Int Ior String) =>
- i.pad should === ((i.left, i.right))
+ i.pad should ===((i.left, i.right))
}
}
test("unwrap consistent with isBoth") {
forAll { (i: Int Ior String) =>
- i.unwrap.isRight should === (i.isBoth)
+ i.unwrap.isRight should ===(i.isBoth)
}
}
test("valueOr consistent with leftMap") {
forAll { (i: Int Ior String, f: Int => String) =>
- i.valueOr(f) should === (i.leftMap(f).fold(identity, identity, _ + _))
+ i.valueOr(f) should ===(i.leftMap(f).fold(identity, identity, _ + _))
}
}
test("isLeft consistent with toOption") {
forAll { (i: Int Ior String) =>
- i.isLeft should === (i.toOption.isEmpty)
+ i.isLeft should ===(i.toOption.isEmpty)
}
}
test("isLeft consistent with toList") {
forAll { (i: Int Ior String) =>
- i.isLeft should === (i.toList.isEmpty)
+ i.isLeft should ===(i.toList.isEmpty)
}
}
test("isLeft consistent with forall and exists") {
forAll { (i: Int Ior String, p: String => Boolean) =>
if (i.isLeft) {
- (i.forall(p) && !i.exists(p)) should === (true)
+ (i.forall(p) && !i.exists(p)) should ===(true)
}
}
}
test("leftMap then swap equivalent to swap then map") {
forAll { (i: Int Ior String, f: Int => Double) =>
- i.leftMap(f).swap should === (i.swap.map(f))
+ i.leftMap(f).swap should ===(i.swap.map(f))
}
}
test("foreach is noop for left") {
forAll { (i: Int) =>
- Ior.left[Int, String](i).foreach { _ => fail("should not be called") }
+ Ior.left[Int, String](i).foreach { _ =>
+ fail("should not be called")
+ }
}
}
test("foreach runs for right and both") {
forAll { (i: Int Ior String) =>
var count = 0
- i.foreach { _ => count += 1 }
- if (i.isRight || i.isBoth) count should === (1)
- else count should === (0)
+ i.foreach { _ =>
+ count += 1
+ }
+ if (i.isRight || i.isBoth) count should ===(1)
+ else count should ===(0)
}
}
@@ -119,122 +131,121 @@ class IorSuite extends CatsSuite {
val iorShow = implicitly[Show[Int Ior String]]
forAll { (i: Int Ior String) =>
- iorShow.show(i).nonEmpty should === (true)
+ iorShow.show(i).nonEmpty should ===(true)
}
}
-
test("merge") {
forAll { (i: Int Ior Int) =>
- i.merge should === (i.left.getOrElse(0) + i.right.getOrElse(0))
+ i.merge should ===(i.left.getOrElse(0) + i.right.getOrElse(0))
}
}
test("mergeLeft") {
forAll { (i: Int Ior Int) =>
- i.mergeLeft should === (i.left.orElse(i.right).get)
+ i.mergeLeft should ===(i.left.orElse(i.right).get)
}
}
test("mergeRight") {
forAll { (i: Int Ior Int) =>
- i.mergeRight should === (i.right.orElse(i.left).get)
+ i.mergeRight should ===(i.right.orElse(i.left).get)
}
}
test("putLeft") {
forAll { (i: Int Ior Int) =>
val expectedResult =
- if (i.isLeft)
- Ior.left(2)
- else
- Ior.both(2, i.right.get)
- i.putLeft(2) should === (expectedResult)
+ if (i.isLeft)
+ Ior.left(2)
+ else
+ Ior.both(2, i.right.get)
+ i.putLeft(2) should ===(expectedResult)
}
}
test("putRight") {
forAll { (i: Int Ior Int) =>
val expectedResult =
- if (i.isRight)
- Ior.right(2)
- else
- Ior.both(i.left.get, 2)
- i.putRight(2) should === (expectedResult)
+ if (i.isRight)
+ Ior.right(2)
+ else
+ Ior.both(i.left.get, 2)
+ i.putRight(2) should ===(expectedResult)
}
}
test("combine left") {
forAll { (i: Int Ior String, j: Int Ior String) =>
- i.combine(j).left should === (i.left.map(_ + j.left.getOrElse(0)).orElse(j.left))
+ i.combine(j).left should ===(i.left.map(_ + j.left.getOrElse(0)).orElse(j.left))
}
}
test("combine right") {
forAll { (i: Int Ior String, j: Int Ior String) =>
- i.combine(j).right should === (i.right.map(_ + j.right.getOrElse("")).orElse(j.right))
+ i.combine(j).right should ===(i.right.map(_ + j.right.getOrElse("")).orElse(j.right))
}
}
- test("fromOptions left/right consistent with input options"){
+ test("fromOptions left/right consistent with input options") {
forAll { (oa: Option[String], ob: Option[Int]) =>
val x = Ior.fromOptions(oa, ob)
- x.flatMap(_.left) should === (oa)
- x.flatMap(_.right) should === (ob)
+ x.flatMap(_.left) should ===(oa)
+ x.flatMap(_.right) should ===(ob)
}
}
- test("Option roundtrip"){
+ test("Option roundtrip") {
forAll { ior: String Ior Int =>
val iorMaybe = Ior.fromOptions(ior.left, ior.right)
- iorMaybe should === (Some(ior))
+ iorMaybe should ===(Some(ior))
}
}
test("to consistent with toList") {
forAll { (x: Int Ior String) =>
- x.to[List, String] should === (x.toList)
+ x.to[List, String] should ===(x.toList)
}
}
test("to consistent with toOption") {
forAll { (x: Int Ior String) =>
- x.to[Option, String] should === (x.toOption)
+ x.to[Option, String] should ===(x.toOption)
}
}
test("toEither consistent with right") {
forAll { (x: Int Ior String) =>
- x.toEither.toOption should === (x.right)
+ x.toEither.toOption should ===(x.right)
}
}
test("toValidated consistent with right") {
forAll { (x: Int Ior String) =>
- x.toValidated.toOption should === (x.right)
+ x.toValidated.toOption should ===(x.right)
}
}
test("toIorNec Left") {
val ior = Ior.left[String, Int]("oops")
- ior.toIorNec should === (Ior.left[NonEmptyChain[String], Int](NonEmptyChain.one("oops")))
+ ior.toIorNec should ===(Ior.left[NonEmptyChain[String], Int](NonEmptyChain.one("oops")))
}
test("toIorNec Right") {
val ior = Ior.right[String, Int](42)
- ior.toIorNec should === (Ior.right[NonEmptyChain[String], Int](42))
+ ior.toIorNec should ===(Ior.right[NonEmptyChain[String], Int](42))
}
test("toIorNec Both") {
val ior = Ior.both[String, Int]("oops", 42)
- ior.toIorNec should === (Ior.both[NonEmptyChain[String], Int](NonEmptyChain.one("oops"), 42))
+ ior.toIorNec should ===(Ior.both[NonEmptyChain[String], Int](NonEmptyChain.one("oops"), 42))
}
test("toIorNes Left") {
val ior = Ior.left[String, Int]("oops")
- ior.toIorNes should === (Ior.left[NonEmptySet[String], Int](NonEmptySet.one("oops")))
+ ior.toIorNes should ===(Ior.left[NonEmptySet[String], Int](NonEmptySet.one("oops")))
}
test("toIorNes Right") {
val ior = Ior.right[String, Int](42)
- ior.toIorNes should === (Ior.right[NonEmptySet[String], Int](42))
+ ior.toIorNes should ===(Ior.right[NonEmptySet[String], Int](42))
}
test("toIorNes Both") {
val ior = Ior.both[String, Int]("oops", 42)
@@ -243,46 +254,46 @@ class IorSuite extends CatsSuite {
test("toIorNel Left") {
val ior = Ior.left[String, Int]("oops")
- ior.toIorNel should === (Ior.left[NonEmptyList[String], Int](NonEmptyList.one("oops")))
+ ior.toIorNel should ===(Ior.left[NonEmptyList[String], Int](NonEmptyList.one("oops")))
}
test("toIorNel Right") {
val ior = Ior.right[String, Int](42)
- ior.toIorNel should === (Ior.right[NonEmptyList[String], Int](42))
+ ior.toIorNel should ===(Ior.right[NonEmptyList[String], Int](42))
}
test("toIorNel Both") {
val ior = Ior.both[String, Int]("oops", 42)
- ior.toIorNel should === (Ior.both[NonEmptyList[String], Int](NonEmptyList.one("oops"), 42))
+ ior.toIorNel should ===(Ior.both[NonEmptyList[String], Int](NonEmptyList.one("oops"), 42))
}
test("leftNel") {
forAll { (x: String) =>
- Ior.leftNel(x).left should === (Some(NonEmptyList.one(x)))
+ Ior.leftNel(x).left should ===(Some(NonEmptyList.one(x)))
}
}
test("leftNec") {
forAll { (x: String) =>
- Ior.leftNec(x).left should === (Some(NonEmptyChain.one(x)))
+ Ior.leftNec(x).left should ===(Some(NonEmptyChain.one(x)))
}
}
test("bothNel") {
forAll { (x: Int, y: String) =>
- Ior.bothNel(y, x).onlyBoth should === (Some((NonEmptyList.one(y), x)))
+ Ior.bothNel(y, x).onlyBoth should ===(Some((NonEmptyList.one(y), x)))
}
}
test("bothNec") {
forAll { (x: Int, y: String) =>
- Ior.bothNec(y, x).onlyBoth should === (Some((NonEmptyChain.one(y), x)))
+ Ior.bothNec(y, x).onlyBoth should ===(Some((NonEmptyChain.one(y), x)))
}
}
test("getOrElse consistent with Option getOrElse") {
forAll { (x: Int Ior String, default: String) =>
- x.getOrElse(default) should === (x.toOption.getOrElse(default))
+ x.getOrElse(default) should ===(x.toOption.getOrElse(default))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/IorTSuite.scala b/tests/src/test/scala/cats/tests/IorTSuite.scala
index 93b2e80e35..91aa23275a 100644
--- a/tests/src/test/scala/cats/tests/IorTSuite.scala
+++ b/tests/src/test/scala/cats/tests/IorTSuite.scala
@@ -2,11 +2,7 @@ package cats
package tests
import cats.data.{Ior, IorT}
-import cats.kernel.laws.discipline.{
- EqTests,
- MonoidTests,
- SemigroupTests
-}
+import cats.kernel.laws.discipline.{EqTests, MonoidTests, SemigroupTests}
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
@@ -17,7 +13,8 @@ class IorTSuite extends CatsSuite {
{
implicit val F = ListWrapper.functor
- checkAll("IorT[ListWrapper, ?, ?]", BifunctorTests[IorT[ListWrapper, ?, ?]].bifunctor[Int, Int, Int, String, String, String])
+ checkAll("IorT[ListWrapper, ?, ?]",
+ BifunctorTests[IorT[ListWrapper, ?, ?]].bifunctor[Int, Int, Int, String, String, String])
checkAll("Bifunctor[IorT[ListWrapper, ?, ?]]", SerializableTests.serializable(Bifunctor[IorT[ListWrapper, ?, ?]]))
checkAll("IorT[ListWrapper, Int, ?]", FunctorTests[IorT[ListWrapper, Int, ?]].functor[Int, Int, Int])
@@ -27,22 +24,27 @@ class IorTSuite extends CatsSuite {
{
implicit val F = ListWrapper.traverse
- checkAll("IorT[ListWrapper, Int, ?]", TraverseTests[IorT[ListWrapper, Int, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("IorT[ListWrapper, Int, ?]",
+ TraverseTests[IorT[ListWrapper, Int, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[IorT[ListWrapper, Int, ?]]", SerializableTests.serializable(Traverse[IorT[ListWrapper, Int, ?]]))
}
{
implicit val F = ListWrapper.monad
- checkAll("IorT[ListWrapper, String, Int]", MonadErrorTests[IorT[ListWrapper, String, ?], String].monadError[Int, Int, Int])
- checkAll("MonadError[IorT[List, ?, ?]]", SerializableTests.serializable(MonadError[IorT[ListWrapper, String, ?], String]))
+ checkAll("IorT[ListWrapper, String, Int]",
+ MonadErrorTests[IorT[ListWrapper, String, ?], String].monadError[Int, Int, Int])
+ checkAll("MonadError[IorT[List, ?, ?]]",
+ SerializableTests.serializable(MonadError[IorT[ListWrapper, String, ?], String]))
}
{
implicit val F: MonadError[Option, Unit] = catsStdInstancesForOption
- checkAll("IorT[Option, String, String]", MonadErrorTests[IorT[Option, String, ?], Unit].monadError[String, String, String])
- checkAll("MonadError[IorT[Option, ?, ?]]", SerializableTests.serializable(MonadError[IorT[Option, String, ?], Unit]))
+ checkAll("IorT[Option, String, String]",
+ MonadErrorTests[IorT[Option, String, ?], Unit].monadError[String, String, String])
+ checkAll("MonadError[IorT[Option, ?, ?]]",
+ SerializableTests.serializable(MonadError[IorT[Option, String, ?], Unit]))
}
{
@@ -56,14 +58,16 @@ class IorTSuite extends CatsSuite {
implicit val F = ListWrapper.semigroup[Ior[String, Int]]
checkAll("IorT[ListWrapper, String, Int]", SemigroupTests[IorT[ListWrapper, String, Int]].semigroup)
- checkAll("Semigroup[IorT[ListWrapper, String, Int]]", SerializableTests.serializable(Semigroup[IorT[ListWrapper, String, Int]]))
+ checkAll("Semigroup[IorT[ListWrapper, String, Int]]",
+ SerializableTests.serializable(Semigroup[IorT[ListWrapper, String, Int]]))
}
{
implicit val F = ListWrapper.monoid[Ior[String, Int]]
checkAll("IorT[ListWrapper, String, Int]", MonoidTests[IorT[ListWrapper, String, Int]].monoid)
- checkAll("Monoid[IorT[ListWrapper, String, Int]]", SerializableTests.serializable(Monoid[IorT[ListWrapper, String, Int]]))
+ checkAll("Monoid[IorT[ListWrapper, String, Int]]",
+ SerializableTests.serializable(Monoid[IorT[ListWrapper, String, Int]]))
}
{
@@ -75,134 +79,134 @@ class IorTSuite extends CatsSuite {
test("fold with Id consistent with Ior fold") {
forAll { (iort: IorT[Id, String, Int], fa: String => Long, fb: Int => Long, fab: (String, Int) => Long) =>
- iort.fold(fa, fb, fab) should === (iort.value.fold(fa, fb, fab))
+ iort.fold(fa, fb, fab) should ===(iort.value.fold(fa, fb, fab))
}
}
test("isLeft with Id consistent with Ior isLeft") {
forAll { (iort: IorT[Id, String, Int]) =>
- iort.isLeft should === (iort.value.isLeft)
+ iort.isLeft should ===(iort.value.isLeft)
}
}
test("isRight with Id consistent with Ior isRight") {
forAll { (iort: IorT[Id, String, Int]) =>
- iort.isRight should === (iort.value.isRight)
+ iort.isRight should ===(iort.value.isRight)
}
}
test("isBoth with Id consistent with Ior isBoth") {
forAll { (iort: IorT[Id, String, Int]) =>
- iort.isBoth should === (iort.value.isBoth)
+ iort.isBoth should ===(iort.value.isBoth)
}
}
test("isBoth consistent with swap") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.isBoth should === (iort.swap.isBoth)
+ iort.isBoth should ===(iort.swap.isBoth)
}
}
test("double swap is noop") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.swap.swap.value should === (iort.value)
+ iort.swap.swap.value should ===(iort.value)
}
}
test("getOrElse with Id consistent with Ior getOrElse") {
forAll { (iort: IorT[Id, String, Int], i: Int) =>
- iort.getOrElse(i) should === (iort.value.getOrElse(i))
+ iort.getOrElse(i) should ===(iort.value.getOrElse(i))
}
}
test("getOrElseF with Id consistent with Ior getOrElse") {
forAll { (iort: IorT[Id, String, Int], i: Int) =>
- iort.getOrElseF(i) should === (iort.value.getOrElse(i))
+ iort.getOrElseF(i) should ===(iort.value.getOrElse(i))
}
}
test("valueOr with Id consistent with Ior valueOr") {
forAll { (iort: IorT[Id, String, Int], f: String => Int) =>
- iort.valueOr(f) should === (iort.value.valueOr(f))
+ iort.valueOr(f) should ===(iort.value.valueOr(f))
}
}
test("forall with Id consistent with Ior forall") {
forAll { (iort: IorT[Id, String, Int], f: Int => Boolean) =>
- iort.forall(f) should === (iort.value.forall(f))
+ iort.forall(f) should ===(iort.value.forall(f))
}
}
test("exists with Id consistent with Ior exists") {
forAll { (iort: IorT[Id, String, Int], f: Int => Boolean) =>
- iort.exists(f) should === (iort.value.exists(f))
+ iort.exists(f) should ===(iort.value.exists(f))
}
}
test("toOption consistent with isLeft") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.toOption.isDefined.map(! _) should === (iort.isLeft)
+ iort.toOption.isDefined.map(!_) should ===(iort.isLeft)
}
}
test("toEither consistent with toOption") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.toEither.toOption should === (iort.toOption)
+ iort.toEither.toOption should ===(iort.toOption)
}
}
test("toEither consistent with isLeft") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.toEither.isLeft should === (iort.isLeft)
+ iort.toEither.isLeft should ===(iort.isLeft)
}
}
test("toNested has no loss") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.toNested.value should === (iort.value)
+ iort.toNested.value should ===(iort.value)
}
}
test("toNestedValidated consistent with Ior toValidated") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.toNestedValidated.value should === (iort.value.map(_.toValidated))
+ iort.toNestedValidated.value should ===(iort.value.map(_.toValidated))
}
}
test("toValidated consistent with Ior toValidated") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.toValidated should === (iort.value.map(_.toValidated))
+ iort.toValidated should ===(iort.value.map(_.toValidated))
}
}
test("to consistent with toOption") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.to[Option] should === (iort.toOption.value)
+ iort.to[Option] should ===(iort.toOption.value)
}
}
test("collectRight with List consistent with flattening a to[List]") {
forAll { (iort: IorT[List, String, Int]) =>
- iort.collectRight should === (iort.to[List].flatten)
+ iort.collectRight should ===(iort.to[List].flatten)
}
}
test("merge with Id consistent with Ior merge") {
forAll { (iort: IorT[Id, Int, Int]) =>
- iort.merge should === (iort.value.merge)
+ iort.merge should ===(iort.value.merge)
}
}
test("mapK consistent with f(value)+pure") {
val f: List ~> Option = λ[List ~> Option](_.headOption)
forAll { (iort: IorT[List, String, Int]) =>
- iort.mapK(f) should === (IorT(f(iort.value)))
+ iort.mapK(f) should ===(IorT(f(iort.value)))
}
}
test("leftMap with Id consistent with Ior leftMap") {
forAll { (iort: IorT[Id, String, Int], f: String => Long) =>
- iort.leftMap(f).value should === (iort.value.leftMap(f))
+ iort.leftMap(f).value should ===(iort.value.leftMap(f))
}
}
@@ -232,120 +236,120 @@ class IorTSuite extends CatsSuite {
test("transform consistent with value.map") {
forAll { (iort: IorT[List, String, Int], f: Ior[String, Int] => Ior[Long, Double]) =>
- iort.transform(f) should === (IorT(iort.value.map(f)))
+ iort.transform(f) should ===(IorT(iort.value.map(f)))
}
}
test("applyAlt with Id consistent with map") {
forAll { (iort: IorT[Id, String, Int], f: Int => String) =>
- iort.applyAlt(IorT.pure(f)) should === (iort.map(f))
+ iort.applyAlt(IorT.pure(f)) should ===(iort.map(f))
}
}
test("flatMapF consistent with flatMap") {
- forAll { (iort: IorT[List, String, Int], f: Int => IorT[List, String, Int]) =>
- iort.flatMapF(f(_).value) should === (iort.flatMap(f))
+ forAll { (iort: IorT[List, String, Int], f: Int => IorT[List, String, Int]) =>
+ iort.flatMapF(f(_).value) should ===(iort.flatMap(f))
}
}
test("subflatMap consistent with value.map+flatMap") {
forAll { (iort: IorT[List, String, Int], f: Int => Ior[String, Double]) =>
- iort.subflatMap(f) should === (IorT(iort.value.map(_.flatMap(f))))
+ iort.subflatMap(f) should ===(IorT(iort.value.map(_.flatMap(f))))
}
}
test("semiflatMap consistent with value.flatMap+f+right/both") {
forAll { (iort: IorT[List, String, Int], f: Int => List[Long]) =>
- iort.semiflatMap(f) should === (IorT(iort.value.flatMap {
+ iort.semiflatMap(f) should ===(IorT(iort.value.flatMap {
case l @ Ior.Left(_) => List(l.asInstanceOf[Ior[String, Long]])
- case Ior.Right(b) => f(b).map(Ior.right)
- case Ior.Both(a, b) => f(b).map(Ior.both(a, _))
+ case Ior.Right(b) => f(b).map(Ior.right)
+ case Ior.Both(a, b) => f(b).map(Ior.both(a, _))
}))
}
}
test("IorT.left with Option isLeft") {
forAll { (option: Option[String]) =>
- IorT.left[Int](option).isLeft should === (option.map(_ => true))
+ IorT.left[Int](option).isLeft should ===(option.map(_ => true))
}
}
test("IorT.leftT isLeft") {
forAll { (s: String) =>
- IorT.leftT[Option, Int](s).isLeft should === (Some(true))
+ IorT.leftT[Option, Int](s).isLeft should ===(Some(true))
}
}
test("IorT.right with Option isRight") {
forAll { (option: Option[Int]) =>
- IorT.right[String](option).isRight should === (option.map(_ => true))
+ IorT.right[String](option).isRight should ===(option.map(_ => true))
}
}
test("IorT.rightT consistent with IorT.pure") {
forAll { (i: Int) =>
- IorT.rightT[Option, String](i).value should === (IorT.pure[Option, String](i).value)
+ IorT.rightT[Option, String](i).value should ===(IorT.pure[Option, String](i).value)
}
}
test("IorT.both isBoth with Option consistent with Option zip") {
forAll { (optionS: Option[String], optionI: Option[Int]) =>
- IorT.both(optionS, optionI).isBoth should === (optionS.zip(optionI).headOption.map(_ => true))
+ IorT.both(optionS, optionI).isBoth should ===(optionS.zip(optionI).headOption.map(_ => true))
}
}
test("IorT.bothT isBoth") {
forAll { (s: String, i: Int) =>
- IorT.bothT[Option](s, i).isBoth should === (Some(true))
+ IorT.bothT[Option](s, i).isBoth should ===(Some(true))
}
}
test("IorT.pure isRight") {
forAll { (i: Int) =>
- IorT.rightT[Option, String](i).isRight should === (Some(true))
+ IorT.rightT[Option, String](i).isRight should ===(Some(true))
}
}
test("IorT.liftF consistent with IorT.right") {
forAll { (option: Option[Int]) =>
- IorT.liftF[Option, String, Int](option).value should === (IorT.right[String](option).value)
+ IorT.liftF[Option, String, Int](option).value should ===(IorT.right[String](option).value)
}
}
test("IorT.fromIor with Id is noop") {
forAll { (ior: Ior[String, Int]) =>
- IorT.fromIor[Id](ior).value should === (ior)
+ IorT.fromIor[Id](ior).value should ===(ior)
}
}
test("IorT.fromEither toEither is noop") {
forAll { (either: Either[String, Int]) =>
- IorT.fromEither[Id](either).value.toEither should === (either)
+ IorT.fromEither[Id](either).value.toEither should ===(either)
}
}
test("IorT.fromEitherF toEither is noop") {
forAll { (either: Either[String, Int]) =>
- IorT.fromEitherF[Id, String, Int](either).value.toEither should === (either)
+ IorT.fromEitherF[Id, String, Int](either).value.toEither should ===(either)
}
}
test("IorT.fromOption isLeft consistent with Option isEmpty") {
forAll { (option: Option[Int], s: String) =>
- IorT.fromOption[Id](option, s).isLeft should === (option.isEmpty)
+ IorT.fromOption[Id](option, s).isLeft should ===(option.isEmpty)
}
}
test("IorT.fromOptionF isLeft consistent with Option isEmpty") {
forAll { (option: Option[Int], s: String) =>
- IorT.fromOptionF[Id, String, Int](option, s).isLeft should === (option.isEmpty)
+ IorT.fromOptionF[Id, String, Int](option, s).isLeft should ===(option.isEmpty)
}
}
test("IorT.cond isRight equals test") {
forAll { (test: Boolean, s: String, i: Int) =>
val iort = IorT.cond[Id](test, s, i)
- iort.isRight && !iort.isLeft && !iort.isBoth should === (test)
+ iort.isRight && !iort.isLeft && !iort.isBoth should ===(test)
}
}
diff --git a/tests/src/test/scala/cats/tests/KernelContravariantSuite.scala b/tests/src/test/scala/cats/tests/KernelContravariantSuite.scala
index 39bf707198..0619e7d5d2 100644
--- a/tests/src/test/scala/cats/tests/KernelContravariantSuite.scala
+++ b/tests/src/test/scala/cats/tests/KernelContravariantSuite.scala
@@ -1,7 +1,6 @@
package cats
package tests
-
import cats.laws.discipline.arbitrary._
import cats.laws.discipline._
import cats.laws.discipline.eq._
diff --git a/tests/src/test/scala/cats/tests/KleisliSuite.scala b/tests/src/test/scala/cats/tests/KleisliSuite.scala
index bf4f9cfd82..e9bf90e1b8 100644
--- a/tests/src/test/scala/cats/tests/KleisliSuite.scala
+++ b/tests/src/test/scala/cats/tests/KleisliSuite.scala
@@ -9,7 +9,7 @@ import cats.laws.discipline.arbitrary._
import cats.laws.discipline.eq._
import org.scalacheck.Arbitrary
import cats.kernel.laws.discipline.{MonoidTests, SemigroupTests}
-import cats.laws.discipline.{MonoidKTests, DeferTests, SemigroupKTests}
+import cats.laws.discipline.{DeferTests, MonoidKTests, SemigroupKTests}
import Helpers.CSemi
import catalysts.Platform
@@ -27,26 +27,34 @@ class KleisliSuite extends CatsSuite {
implicit val iso2 = SemigroupalTests.Isomorphisms.invariant[Reader[Int, ?]]
{
- implicit val instance: ApplicativeError[Kleisli[Option, Int, ?], Unit] = Kleisli.catsDataApplicativeErrorForKleisli[Option, Unit, Int](cats.instances.option.catsStdInstancesForOption)
- checkAll("Kleisli[Option, Int, Int] with Unit", ApplicativeErrorTests[Kleisli[Option, Int, ?], Unit](instance).applicativeError[Int, Int, Int])
+ implicit val instance: ApplicativeError[Kleisli[Option, Int, ?], Unit] =
+ Kleisli.catsDataApplicativeErrorForKleisli[Option, Unit, Int](cats.instances.option.catsStdInstancesForOption)
+ checkAll("Kleisli[Option, Int, Int] with Unit",
+ ApplicativeErrorTests[Kleisli[Option, Int, ?], Unit](instance).applicativeError[Int, Int, Int])
checkAll("ApplicativeError[Kleisli[Option, Int, Int], Unit]", SerializableTests.serializable(instance))
}
checkAll("Kleisli[Eval, Int, ?]", DeferTests[Kleisli[Eval, Int, ?]].defer[Int])
- checkAll("Kleisli[Option, Int, Int] with Unit", MonadErrorTests[Kleisli[Option, Int, ?], Unit].monadError[Int, Int, Int])
- checkAll("MonadError[Kleisli[Option, Int, Int], Unit]", SerializableTests.serializable(MonadError[Kleisli[Option, Int, ?], Unit]))
+ checkAll("Kleisli[Option, Int, Int] with Unit",
+ MonadErrorTests[Kleisli[Option, Int, ?], Unit].monadError[Int, Int, Int])
+ checkAll("MonadError[Kleisli[Option, Int, Int], Unit]",
+ SerializableTests.serializable(MonadError[Kleisli[Option, Int, ?], Unit]))
checkAll("Kleisli[Option, Int, Int]", SemigroupalTests[Kleisli[Option, Int, ?]].semigroupal[Int, Int, Int])
checkAll("Semigroupal[Kleisli[Option, Int, ?]]", SerializableTests.serializable(Semigroupal[Kleisli[Option, Int, ?]]))
- checkAll("Kleisli[(CSemi, ?), Int, ?]", CommutativeFlatMapTests[Kleisli[(CSemi, ?), Int, ?]].commutativeFlatMap[Int, Int, Int])
- checkAll("CommutativeFlatMap[Kleisli[(CSemi, ?), Int, ?]]",SerializableTests.serializable(CommutativeFlatMap[Kleisli[(CSemi, ?), Int, ?]]))
+ checkAll("Kleisli[(CSemi, ?), Int, ?]",
+ CommutativeFlatMapTests[Kleisli[(CSemi, ?), Int, ?]].commutativeFlatMap[Int, Int, Int])
+ checkAll("CommutativeFlatMap[Kleisli[(CSemi, ?), Int, ?]]",
+ SerializableTests.serializable(CommutativeFlatMap[Kleisli[(CSemi, ?), Int, ?]]))
checkAll("Kleisli[Option, Int, ?]", CommutativeMonadTests[Kleisli[Option, Int, ?]].commutativeMonad[Int, Int, Int])
- checkAll("CommutativeMonad[Kleisli[Option, Int, ?]]",SerializableTests.serializable(CommutativeMonad[Kleisli[Option, Int, ?]]))
+ checkAll("CommutativeMonad[Kleisli[Option, Int, ?]]",
+ SerializableTests.serializable(CommutativeMonad[Kleisli[Option, Int, ?]]))
checkAll("Kleisli[Id, Int, ?]", CommutativeMonadTests[Kleisli[Id, Int, ?]].commutativeMonad[Int, Int, Int])
- checkAll("CommutativeMonad[Kleisli[Id, Int, ?]]",SerializableTests.serializable(CommutativeMonad[Kleisli[Id, Int, ?]]))
+ checkAll("CommutativeMonad[Kleisli[Id, Int, ?]]",
+ SerializableTests.serializable(CommutativeMonad[Kleisli[Id, Int, ?]]))
{
implicit val catsDataArrowForKleisli = Kleisli.catsDataArrowChoiceForKleisli[List]
@@ -62,8 +70,10 @@ class KleisliSuite extends CatsSuite {
{
implicit val catsDataCommutativeArrowForKleisli = Kleisli.catsDataCommutativeArrowForKleisli[Option]
- checkAll("Kleisli[Option, Int, Int]", CommutativeArrowTests[Kleisli[Option, ?, ?]].commutativeArrow[Int, Int, Int, Int, Int, Int])
- checkAll("CommutativeArrow[Kleisli[Option, ?, ?]]", SerializableTests.serializable(CommutativeArrow[Kleisli[Option, ?, ?]]))
+ checkAll("Kleisli[Option, Int, Int]",
+ CommutativeArrowTests[Kleisli[Option, ?, ?]].commutativeArrow[Int, Int, Int, Int, Int, Int])
+ checkAll("CommutativeArrow[Kleisli[Option, ?, ?]]",
+ SerializableTests.serializable(CommutativeArrow[Kleisli[Option, ?, ?]]))
}
{
@@ -99,21 +109,24 @@ class KleisliSuite extends CatsSuite {
{
implicit val catsDataAlternativeForKleisli = Kleisli.catsDataAlternativeForKleisli[Option, Int]
checkAll("Kleisli[Option, Int, Int]", AlternativeTests[Kleisli[Option, Int, ?]].alternative[Int, Int, Int])
- checkAll("Alternative[Kleisli[Option, Int, ?]]", SerializableTests.serializable(Alternative[Kleisli[Option, Int, ?]]))
+ checkAll("Alternative[Kleisli[Option, Int, ?]]",
+ SerializableTests.serializable(Alternative[Kleisli[Option, Int, ?]]))
}
{
- implicit val catsDataContravariantMonoidalForKleisli = Kleisli.catsDataContravariantMonoidalForKleisli[Const[String, ?], Int]
+ implicit val catsDataContravariantMonoidalForKleisli =
+ Kleisli.catsDataContravariantMonoidalForKleisli[Const[String, ?], Int]
checkAll("Kleisli[Const[String, ?], Int, Int]",
- ContravariantMonoidalTests[Kleisli[Const[String, ?], Int, ?]].contravariantMonoidal[Int, Int, Int])
+ ContravariantMonoidalTests[Kleisli[Const[String, ?], Int, ?]].contravariantMonoidal[Int, Int, Int])
checkAll("ContravariantMonoidal[Kleisli[Option, Int, ?]]",
- SerializableTests.serializable(ContravariantMonoidal[Kleisli[Const[String, ?], Int, ?]]))
+ SerializableTests.serializable(ContravariantMonoidal[Kleisli[Const[String, ?], Int, ?]]))
}
{
implicit val catsDataApplicativeForKleisli = Kleisli.catsDataApplicativeForKleisli[Option, Int]
checkAll("Kleisli[Option, Int, Int]", ApplicativeTests[Kleisli[Option, Int, ?]].applicative[Int, Int, Int])
- checkAll("Applicative[Kleisli[Option, Int, ?]]", SerializableTests.serializable(Applicative[Kleisli[Option, Int, ?]]))
+ checkAll("Applicative[Kleisli[Option, Int, ?]]",
+ SerializableTests.serializable(Applicative[Kleisli[Option, Int, ?]]))
}
{
@@ -129,8 +142,10 @@ class KleisliSuite extends CatsSuite {
}
{
- checkAll("Kleisli[Function0, Int, ?]", DistributiveTests[Kleisli[Function0, Int, ?]].distributive[Int, Int, Int, Option, Id])
- checkAll("Distributive[Kleisli[Function0, Int, ?]]", SerializableTests.serializable(Distributive[Kleisli[Function0, Int, ?]]))
+ checkAll("Kleisli[Function0, Int, ?]",
+ DistributiveTests[Kleisli[Function0, Int, ?]].distributive[Int, Int, Int, Option, Id])
+ checkAll("Distributive[Kleisli[Function0, Int, ?]]",
+ SerializableTests.serializable(Distributive[Kleisli[Function0, Int, ?]]))
}
{
@@ -172,96 +187,103 @@ class KleisliSuite extends CatsSuite {
checkAll("Reader[Int, Int]", FunctorTests[Reader[Int, ?]].functor[Int, Int, Int])
checkAll("Kleisli[Option, ?, Int]", ContravariantTests[Kleisli[Option, ?, Int]].contravariant[Int, Int, Int])
- checkAll("Contravariant[Kleisli[Option, ?, Int]]", SerializableTests.serializable(Contravariant[Kleisli[Option, ?, Int]]))
+ checkAll("Contravariant[Kleisli[Option, ?, Int]]",
+ SerializableTests.serializable(Contravariant[Kleisli[Option, ?, Int]]))
test("local composes functions") {
forAll { (f: Int => Option[String], g: Int => Int, i: Int) =>
- f(g(i)) should === (Kleisli.local[Option, String, Int](g)(Kleisli(f)).run(i))
+ f(g(i)) should ===(Kleisli.local[Option, String, Int](g)(Kleisli(f)).run(i))
}
}
test("pure consistent with ask") {
forAll { (i: Int) =>
- Kleisli.pure[Option, Int, Int](i).run(i) should === (Kleisli.ask[Option, Int].run(i))
+ Kleisli.pure[Option, Int, Int](i).run(i) should ===(Kleisli.ask[Option, Int].run(i))
}
}
test("mapF") {
forAll { (f: Kleisli[List, Int, Int], t: List[Int] => List[Int], i: Int) =>
- t(f.run(i)) should === (f.mapF(t).run(i))
+ t(f.run(i)) should ===(f.mapF(t).run(i))
}
}
test("mapK") {
val t: List ~> Option = λ[List ~> Option](_.headOption)
forAll { (f: Kleisli[List, Int, Int], i: Int) =>
- t(f.run(i)) should === (f.mapK(t).run(i))
+ t(f.run(i)) should ===(f.mapK(t).run(i))
}
}
test("flatMapF") {
forAll { (f: Kleisli[List, Int, Int], t: Int => List[Int], i: Int) =>
- f.run(i).flatMap(t) should === (f.flatMapF(t).run(i))
+ f.run(i).flatMap(t) should ===(f.flatMapF(t).run(i))
}
}
test("lower") {
forAll { (f: Kleisli[List, Int, Int], i: Int) =>
- f.run(i) should === (f.lower.run(i).flatten)
+ f.run(i) should ===(f.lower.run(i).flatten)
}
}
test("tap") {
forAll { (f: Kleisli[List, Int, String], i: Int) =>
- f.run(i).as(i) should === (f.tap.run(i))
+ f.run(i).as(i) should ===(f.tap.run(i))
}
}
test("tapWith") {
forAll { (f: Kleisli[List, Int, String], g: (Int, String) => Boolean, i: Int) =>
- f.run(i).map(s => g(i, s)) should === (f.tapWith(g).run(i))
+ f.run(i).map(s => g(i, s)) should ===(f.tapWith(g).run(i))
}
}
test("toReader") {
forAll { (f: Kleisli[List, Int, String], i: Int) =>
- f.run(i) should === (f.toReader.run(i))
+ f.run(i) should ===(f.toReader.run(i))
}
}
test("tapWithF") {
forAll { (f: Kleisli[List, Int, String], g: (Int, String) => List[Boolean], i: Int) =>
- f.run(i).flatMap(s => g(i, s)) should === (f.tapWithF(g).run(i))
+ f.run(i).flatMap(s => g(i, s)) should ===(f.tapWithF(g).run(i))
}
}
test("apply") {
forAll { (f: Kleisli[List, Int, Int], i: Int) =>
- f.run(i) should === (f(i))
+ f.run(i) should ===(f(i))
}
}
test("traverse") {
forAll { (f: Kleisli[List, Int, Int], i: Int) =>
- f.traverse(Some(i): Option[Int]) should === ((Some(i): Option[Int]).traverse(f(_)))
+ f.traverse(Some(i): Option[Int]) should ===((Some(i): Option[Int]).traverse(f(_)))
}
}
test("lift") {
- val f = Kleisli { (x: Int) => (Some(x + 1): Option[Int]) }
+ val f = Kleisli { (x: Int) =>
+ (Some(x + 1): Option[Int])
+ }
val l = f.lift[List]
- (List(1, 2, 3) >>= l.run) should === (List(Some(2), Some(3), Some(4)))
+ (List(1, 2, 3) >>= l.run) should ===(List(Some(2), Some(3), Some(4)))
}
test("local") {
case class Config(i: Int, s: String)
- val kint = Kleisli { (x: Int) => Option(x.toDouble) }
+ val kint = Kleisli { (x: Int) =>
+ Option(x.toDouble)
+ }
val kconfig1 = kint.local[Config](_.i)
- val kconfig2 = Kleisli { (c: Config) => Option(c.i.toDouble) }
+ val kconfig2 = Kleisli { (c: Config) =>
+ Option(c.i.toDouble)
+ }
val config = Config(0, "cats")
- kconfig1.run(config) should === (kconfig2.run(config))
+ kconfig1.run(config) should ===(kconfig2.run(config))
}
test("flatMap is stack safe on repeated left binds when F is") {
diff --git a/tests/src/test/scala/cats/tests/ListSuite.scala b/tests/src/test/scala/cats/tests/ListSuite.scala
index 1e8ed70e04..c5301365f1 100644
--- a/tests/src/test/scala/cats/tests/ListSuite.scala
+++ b/tests/src/test/scala/cats/tests/ListSuite.scala
@@ -2,7 +2,16 @@ package cats
package tests
import cats.data.{NonEmptyList, ZipList}
-import cats.laws.discipline.{AlternativeTests, CoflatMapTests, CommutativeApplyTests, MonadTests, SemigroupalTests, SerializableTests, TraverseFilterTests, TraverseTests}
+import cats.laws.discipline.{
+ AlternativeTests,
+ CoflatMapTests,
+ CommutativeApplyTests,
+ MonadTests,
+ SemigroupalTests,
+ SerializableTests,
+ TraverseFilterTests,
+ TraverseTests
+}
import cats.laws.discipline.arbitrary._
class ListSuite extends CatsSuite {
@@ -25,30 +34,29 @@ class ListSuite extends CatsSuite {
checkAll("List[Int]", TraverseFilterTests[List].traverseFilter[Int, Int, Int])
checkAll("TraverseFilter[List]", SerializableTests.serializable(TraverseFilter[List]))
-
checkAll("ZipList[Int]", CommutativeApplyTests[ZipList].commutativeApply[Int, Int, Int])
test("nel => list => nel returns original nel")(
forAll { fa: NonEmptyList[Int] =>
- fa.toList.toNel should === (Some(fa))
+ fa.toList.toNel should ===(Some(fa))
}
)
- test("toNel on empty list returns None"){
- List.empty[Int].toNel should === (None)
+ test("toNel on empty list returns None") {
+ List.empty[Int].toNel should ===(None)
}
test("groupByNel should be consistent with groupBy")(
forAll { (fa: List[Int], f: Int => Int) =>
- fa.groupByNel(f).map{ case (k, v) => (k, v.toList)} should === (fa.groupBy(f))
+ fa.groupByNel(f).map { case (k, v) => (k, v.toList) } should ===(fa.groupBy(f))
}
)
- test("show"){
- List(1, 2, 3).show should === ("List(1, 2, 3)")
- (Nil: List[Int]).show should === ("List()")
+ test("show") {
+ List(1, 2, 3).show should ===("List(1, 2, 3)")
+ (Nil: List[Int]).show should ===("List()")
forAll { l: List[String] =>
- l.show should === (l.toString)
+ l.show should ===(l.toString)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/ListWrapper.scala b/tests/src/test/scala/cats/tests/ListWrapper.scala
index 2f081d7735..009b3d0c7f 100644
--- a/tests/src/test/scala/cats/tests/ListWrapper.scala
+++ b/tests/src/test/scala/cats/tests/ListWrapper.scala
@@ -6,41 +6,40 @@ import org.scalacheck.{Arbitrary, Cogen}
import org.scalacheck.Arbitrary.arbitrary
/** This data type exists purely for testing.
- *
- * The problem this type solves is to assist in picking up type class
- * instances that have more general constraints.
- *
- * For instance, OneAnd[?, F[_]] has a Monad instance if F[_] does too.
- * By extension, it has an Applicative instance, since Applicative is
- * a superclass of Monad.
- *
- * However, if F[_] doesn't have a Monad instance but does have an
- * Applicative instance (e.g. Validated), you can still get an
- * Applicative instance for OneAnd[?, F[_]]. These two instances
- * are different however, and it is a good idea to test to make sure
- * all "variants" of the instances are lawful.
- *
- * By providing this data type, we can have implicit search pick up
- * a specific type class instance by asking for it explicitly in a block.
- * Note that ListWrapper has no type class instances in implicit scope,
- * save for ones related to testing (e.g. Eq, Arbitrary, Cogen).
- *
- * {{{
- * {
- * implicit val functor = ListWrapper.functor
- * checkAll(..., ...)
- * }
- * }}}
- */
-
+ *
+ * The problem this type solves is to assist in picking up type class
+ * instances that have more general constraints.
+ *
+ * For instance, OneAnd[?, F[_]] has a Monad instance if F[_] does too.
+ * By extension, it has an Applicative instance, since Applicative is
+ * a superclass of Monad.
+ *
+ * However, if F[_] doesn't have a Monad instance but does have an
+ * Applicative instance (e.g. Validated), you can still get an
+ * Applicative instance for OneAnd[?, F[_]]. These two instances
+ * are different however, and it is a good idea to test to make sure
+ * all "variants" of the instances are lawful.
+ *
+ * By providing this data type, we can have implicit search pick up
+ * a specific type class instance by asking for it explicitly in a block.
+ * Note that ListWrapper has no type class instances in implicit scope,
+ * save for ones related to testing (e.g. Eq, Arbitrary, Cogen).
+ *
+ * {{{
+ * {
+ * implicit val functor = ListWrapper.functor
+ * checkAll(..., ...)
+ * }
+ * }}}
+ */
final case class ListWrapper[A](list: List[A]) extends AnyVal
object ListWrapper {
- def order[A:Order]: Order[ListWrapper[A]] = Order.by(_.list)
+ def order[A: Order]: Order[ListWrapper[A]] = Order.by(_.list)
- def partialOrder[A:PartialOrder]: PartialOrder[ListWrapper[A]] = PartialOrder.by(_.list)
+ def partialOrder[A: PartialOrder]: PartialOrder[ListWrapper[A]] = PartialOrder.by(_.list)
- def eqv[A : Eq]: Eq[ListWrapper[A]] = Eq.by(_.list)
+ def eqv[A: Eq]: Eq[ListWrapper[A]] = Eq.by(_.list)
val traverse: Traverse[ListWrapper] = {
val F = Traverse[List]
@@ -50,9 +49,8 @@ object ListWrapper {
F.foldLeft(fa.list, b)(f)
def foldRight[A, B](fa: ListWrapper[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] =
F.foldRight(fa.list, lb)(f)
- def traverse[G[_], A, B](fa: ListWrapper[A])(f: A => G[B])(implicit G0: Applicative[G]): G[ListWrapper[B]] = {
+ def traverse[G[_], A, B](fa: ListWrapper[A])(f: A => G[B])(implicit G0: Applicative[G]): G[ListWrapper[B]] =
G0.map(F.traverse(fa.list)(f))(ListWrapper.apply)
- }
}
}
@@ -61,7 +59,9 @@ object ListWrapper {
new TraverseFilter[ListWrapper] {
def traverse = ListWrapper.traverse
- def traverseFilter[G[_], A, B](fa: ListWrapper[A])(f: A => G[Option[B]])(implicit G: Applicative[G]): G[ListWrapper[B]] =
+ def traverseFilter[G[_], A, B](
+ fa: ListWrapper[A]
+ )(f: A => G[Option[B]])(implicit G: Applicative[G]): G[ListWrapper[B]] =
G.map(F.traverseFilter(fa.list)(f))(ListWrapper.apply)
}
}
@@ -118,9 +118,11 @@ object ListWrapper {
val M = Monad[List]
def pure[A](x: A): ListWrapper[A] = ListWrapper(x :: Nil)
- def flatMap[A, B](fa: ListWrapper[A])(f: (A) => ListWrapper[B]): ListWrapper[B] = ListWrapper(fa.list.flatMap(f(_).list))
+ def flatMap[A, B](fa: ListWrapper[A])(f: (A) => ListWrapper[B]): ListWrapper[B] =
+ ListWrapper(fa.list.flatMap(f(_).list))
- def tailRecM[A, B](a: A)(f: (A) => ListWrapper[Either[A, B]]): ListWrapper[B] = ListWrapper(M.tailRecM(a)(f(_).list))
+ def tailRecM[A, B](a: A)(f: (A) => ListWrapper[Either[A, B]]): ListWrapper[B] =
+ ListWrapper(M.tailRecM(a)(f(_).list))
}
val flatMap: FlatMap[ListWrapper] = monad
diff --git a/tests/src/test/scala/cats/tests/MapSuite.scala b/tests/src/test/scala/cats/tests/MapSuite.scala
index ec9144ae17..efa600c567 100644
--- a/tests/src/test/scala/cats/tests/MapSuite.scala
+++ b/tests/src/test/scala/cats/tests/MapSuite.scala
@@ -1,8 +1,14 @@
package cats
package tests
-
-import cats.laws.discipline.{FlatMapTests, FunctorFilterTests, SemigroupalTests, SerializableTests, UnorderedTraverseTests, ComposeTests}
+import cats.laws.discipline.{
+ ComposeTests,
+ FlatMapTests,
+ FunctorFilterTests,
+ SemigroupalTests,
+ SerializableTests,
+ UnorderedTraverseTests
+}
import cats.laws.discipline.arbitrary._
import cats.arrow.Compose
@@ -15,7 +21,8 @@ class MapSuite extends CatsSuite {
checkAll("Map[Int, Int]", FlatMapTests[Map[Int, ?]].flatMap[Int, Int, Int])
checkAll("FlatMap[Map[Int, ?]]", SerializableTests.serializable(FlatMap[Map[Int, ?]]))
- checkAll("Map[Int, Int] with Option", UnorderedTraverseTests[Map[Int, ?]].unorderedTraverse[Int, Int, Int, Option, Option])
+ checkAll("Map[Int, Int] with Option",
+ UnorderedTraverseTests[Map[Int, ?]].unorderedTraverse[Int, Int, Int, Option, Option])
checkAll("UnorderedTraverse[Map[Int, ?]]", SerializableTests.serializable(UnorderedTraverse[Map[Int, ?]]))
checkAll("Map[Int, Int]", FunctorFilterTests[Map[Int, ?]].functorFilter[Int, Int, Int])
@@ -24,13 +31,11 @@ class MapSuite extends CatsSuite {
checkAll("Map[Int, Long]", ComposeTests[Map].compose[Int, Long, String, Double])
checkAll("Compose[Map]", SerializableTests.serializable(Compose[Map]))
-
-
test("show isn't empty and is formatted as expected") {
forAll { (map: Map[Int, String]) =>
- map.show.nonEmpty should === (true)
- map.show.startsWith("Map(") should === (true)
- map.show should === (implicitly[Show[Map[Int, String]]].show(map))
+ map.show.nonEmpty should ===(true)
+ map.show.startsWith("Map(") should ===(true)
+ map.show should ===(implicitly[Show[Map[Int, String]]].show(map))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/MonadErrorSuite.scala b/tests/src/test/scala/cats/tests/MonadErrorSuite.scala
index c607dfe97e..b989407b72 100644
--- a/tests/src/test/scala/cats/tests/MonadErrorSuite.scala
+++ b/tests/src/test/scala/cats/tests/MonadErrorSuite.scala
@@ -13,47 +13,47 @@ class MonadErrorSuite extends CatsSuite {
val failed: Try[Int] = Failure(failedValue)
test("ensure raises an error if the predicate fails") {
- successful.ensure(failedValue)(_ => false) should === (failed)
+ successful.ensure(failedValue)(_ => false) should ===(failed)
}
test("ensure returns the successful value if the predicate succeeds") {
- successful.ensure(failedValue)(_ => true) should === (successful)
+ successful.ensure(failedValue)(_ => true) should ===(successful)
}
test("ensure returns the original failure, when applied to a failure") {
- failed.ensure(otherValue)(_ => false) should === (failed)
- failed.ensure(otherValue)(_ => true) should === (failed)
+ failed.ensure(otherValue)(_ => false) should ===(failed)
+ failed.ensure(otherValue)(_ => true) should ===(failed)
}
test("ensureOr raises an error if the predicate fails") {
- successful.ensureOr(_ => failedValue)(_ => false) should === (failed)
+ successful.ensureOr(_ => failedValue)(_ => false) should ===(failed)
}
test("ensureOr returns the successful value if the predicate succeeds") {
- successful.ensureOr(_ => failedValue)(_ => true) should === (successful)
+ successful.ensureOr(_ => failedValue)(_ => true) should ===(successful)
}
test("ensureOr returns the original failure, when applied to a failure") {
- failed.ensureOr(_ => otherValue)(_ => false) should === (failed)
- failed.ensureOr(_ => otherValue)(_ => true) should === (failed)
+ failed.ensureOr(_ => otherValue)(_ => false) should ===(failed)
+ failed.ensureOr(_ => otherValue)(_ => true) should ===(failed)
}
test("ensureP returns the successful value if the partial function is not defined") {
successful.reject {
case i if i < 0 => failedValue
- } should === (successful)
+ } should ===(successful)
}
test("ensureP returns the original failure, when applied to a failure") {
failed.reject {
case i if i < 0 => otherValue
- } should === (failed)
+ } should ===(failed)
}
test("ensureP raises an error if the partial function is defined") {
successful.reject {
case i if i > 0 => failedValue
- } should === (failed)
+ } should ===(failed)
}
}
diff --git a/tests/src/test/scala/cats/tests/MonadSuite.scala b/tests/src/test/scala/cats/tests/MonadSuite.scala
index 25d2b3ac14..df5bfdadb8 100644
--- a/tests/src/test/scala/cats/tests/MonadSuite.scala
+++ b/tests/src/test/scala/cats/tests/MonadSuite.scala
@@ -23,7 +23,7 @@ class MonadSuite extends CatsSuite {
forAll(smallPosInt) { (max: Int) =>
val (result, aggregation) = incrementAndGet.whileM[Vector](StateT.inspect(i => !(i >= max))).run(0)
result should ===(Math.max(0, max))
- aggregation should === ( if(max > 0) (1 to max).toVector else Vector.empty )
+ aggregation should ===(if (max > 0) (1 to max).toVector else Vector.empty)
}
}
@@ -38,7 +38,7 @@ class MonadSuite extends CatsSuite {
forAll(smallPosInt) { (max: Int) =>
val (result, aggregation) = incrementAndGet.untilM[Vector](StateT.inspect(_ >= max)).run(-1)
result should ===(max)
- aggregation should === ((0 to max).toVector)
+ aggregation should ===((0 to max).toVector)
}
}
@@ -78,25 +78,25 @@ class MonadSuite extends CatsSuite {
test("iterateWhileM") {
forAll(smallPosInt) { (max: Int) =>
- val (n, sum) = 0.iterateWhileM(s => incrementAndGet map (_ + s))(_ < max).run(0)
+ val (n, sum) = 0.iterateWhileM(s => incrementAndGet.map(_ + s))(_ < max).run(0)
sum should ===(n * (n + 1) / 2)
}
}
test("iterateWhileM is stack safe") {
- val (n, sum) = 0.iterateWhileM(s => incrementAndGet map (_ + s))(_ < 50000000).run(0)
+ val (n, sum) = 0.iterateWhileM(s => incrementAndGet.map(_ + s))(_ < 50000000).run(0)
sum should ===(n * (n + 1) / 2)
}
test("iterateUntilM") {
forAll(smallPosInt) { (max: Int) =>
- val (n, sum) = 0.iterateUntilM(s => incrementAndGet map (_ + s))(_ > max).run(0)
+ val (n, sum) = 0.iterateUntilM(s => incrementAndGet.map(_ + s))(_ > max).run(0)
sum should ===(n * (n + 1) / 2)
}
}
test("iterateUntilM is stack safe") {
- val (n, sum) = 0.iterateUntilM(s => incrementAndGet map (_ + s))(_ > 50000000).run(0)
+ val (n, sum) = 0.iterateUntilM(s => incrementAndGet.map(_ + s))(_ > 50000000).run(0)
sum should ===(n * (n + 1) / 2)
}
diff --git a/tests/src/test/scala/cats/tests/MonoidSuite.scala b/tests/src/test/scala/cats/tests/MonoidSuite.scala
index 702297b92c..4eecd0d5b5 100644
--- a/tests/src/test/scala/cats/tests/MonoidSuite.scala
+++ b/tests/src/test/scala/cats/tests/MonoidSuite.scala
@@ -1,8 +1,6 @@
package cats
package tests
-
-
class MonoidSuite extends CatsSuite {
{
Invariant[Monoid]
diff --git a/tests/src/test/scala/cats/tests/NestedSuite.scala b/tests/src/test/scala/cats/tests/NestedSuite.scala
index e5b2c25bd2..a35c423072 100644
--- a/tests/src/test/scala/cats/tests/NestedSuite.scala
+++ b/tests/src/test/scala/cats/tests/NestedSuite.scala
@@ -16,13 +16,15 @@ class NestedSuite extends CatsSuite {
implicit override val generatorDrivenConfig: PropertyCheckConfiguration =
PropertyCheckConfiguration(minSuccessful = 20, sizeRange = 5)
- checkAll("Nested[Eval, List, ?]", DeferTests[Nested[Eval, List, ?]].defer[Int])
+ checkAll("Nested[Eval, List, ?]", DeferTests[Nested[Eval, List, ?]].defer[Int])
{
// Invariant composition
implicit val instance = ListWrapper.invariant
- checkAll("Nested[ListWrapper, ListWrapper]", InvariantTests[Nested[ListWrapper, ListWrapper, ?]].invariant[Int, Int, Int])
- checkAll("Invariant[Nested[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Invariant[Nested[ListWrapper, ListWrapper, ?]]))
+ checkAll("Nested[ListWrapper, ListWrapper]",
+ InvariantTests[Nested[ListWrapper, ListWrapper, ?]].invariant[Int, Int, Int])
+ checkAll("Invariant[Nested[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Invariant[Nested[ListWrapper, ListWrapper, ?]]))
}
{
@@ -30,9 +32,9 @@ class NestedSuite extends CatsSuite {
implicit val instance = ListWrapper.functorFilter
implicit val functorInstance = ListWrapper.functor
checkAll("Nested[ListWrapper, ListWrapper]",
- FunctorFilterTests[Nested[ListWrapper, ListWrapper, ?]].functorFilter[Int, Int, Int])
+ FunctorFilterTests[Nested[ListWrapper, ListWrapper, ?]].functorFilter[Int, Int, Int])
checkAll("FunctorFilter[Nested[ListWrapper, ListWrapper, ?]]",
- SerializableTests.serializable(FunctorFilter[Nested[ListWrapper, ListWrapper, ?]]))
+ SerializableTests.serializable(FunctorFilter[Nested[ListWrapper, ListWrapper, ?]]))
}
{
@@ -40,22 +42,25 @@ class NestedSuite extends CatsSuite {
implicit val instance = ListWrapper.traverseFilter
implicit val traverseInstance = ListWrapper.traverse
checkAll("Nested[ListWrapper, ListWrapper]",
- TraverseFilterTests[Nested[ListWrapper, ListWrapper, ?]].traverseFilter[Int, Int, Int])
+ TraverseFilterTests[Nested[ListWrapper, ListWrapper, ?]].traverseFilter[Int, Int, Int])
checkAll("TraverseFilter[Nested[ListWrapper, ListWrapper, ?]]",
- SerializableTests.serializable(TraverseFilter[Nested[ListWrapper, ListWrapper, ?]]))
+ SerializableTests.serializable(TraverseFilter[Nested[ListWrapper, ListWrapper, ?]]))
}
{
// Invariant + Covariant = Invariant
val instance = Nested.catsDataInvariantForCovariantNested(ListWrapper.invariant, ListWrapper.functor)
- checkAll("Nested[ListWrapper, ListWrapper] - Invariant + Covariant", InvariantTests[Nested[ListWrapper, ListWrapper, ?]](instance).invariant[Int, Int, Int])
- checkAll("Invariant[Nested[ListWrapper, ListWrapper, ?]] - Invariant + Covariant", SerializableTests.serializable(instance))
+ checkAll("Nested[ListWrapper, ListWrapper] - Invariant + Covariant",
+ InvariantTests[Nested[ListWrapper, ListWrapper, ?]](instance).invariant[Int, Int, Int])
+ checkAll("Invariant[Nested[ListWrapper, ListWrapper, ?]] - Invariant + Covariant",
+ SerializableTests.serializable(instance))
}
{
// Invariant + Contravariant = Invariant
val instance = Nested.catsDataInvariantForNestedContravariant(ListWrapper.invariant, Contravariant[Show])
- checkAll("Nested[ListWrapper, Show]", InvariantTests[Nested[ListWrapper, Show, ?]](instance).invariant[Int, Int, Int])
+ checkAll("Nested[ListWrapper, Show]",
+ InvariantTests[Nested[ListWrapper, Show, ?]](instance).invariant[Int, Int, Int])
checkAll("Invariant[Nested[ListWrapper, Show, ?]]", SerializableTests.serializable(instance))
}
@@ -63,43 +68,47 @@ class NestedSuite extends CatsSuite {
// Functor composition
implicit val instance = ListWrapper.functor
checkAll("Nested[Option, ListWrapper, ?]", FunctorTests[Nested[Option, ListWrapper, ?]].functor[Int, Int, Int])
- checkAll("Functor[Nested[Option, ListWrapper, ?]]", SerializableTests.serializable(Functor[Nested[Option, ListWrapper, ?]]))
+ checkAll("Functor[Nested[Option, ListWrapper, ?]]",
+ SerializableTests.serializable(Functor[Nested[Option, ListWrapper, ?]]))
}
{
// Covariant + contravariant functor composition
checkAll("Nested[Option, Show, ?]", ContravariantTests[Nested[Option, Show, ?]].contravariant[Int, Int, Int])
- checkAll("Contravariant[Nested[Option, Show, ?]]", SerializableTests.serializable(Contravariant[Nested[Option, Show, ?]]))
+ checkAll("Contravariant[Nested[Option, Show, ?]]",
+ SerializableTests.serializable(Contravariant[Nested[Option, Show, ?]]))
}
{
// InvariantSemigroupal + Apply functor composition
implicit val instance = ListWrapper.invariantSemigroupal
checkAll("Nested[ListWrapper, Option, ?]",
- InvariantSemigroupalTests[Nested[ListWrapper, Option, ?]].invariantSemigroupal[Int, Int, Int])
+ InvariantSemigroupalTests[Nested[ListWrapper, Option, ?]].invariantSemigroupal[Int, Int, Int])
checkAll("InvariantSemigroupal[Nested[ListWrapper, Const[String, ?], ?]",
- SerializableTests.serializable(InvariantSemigroupal[Nested[ListWrapper, Option, ?]]))
+ SerializableTests.serializable(InvariantSemigroupal[Nested[ListWrapper, Option, ?]]))
}
{
// Applicative + ContravariantMonoidal functor composition
checkAll("Nested[Option, Const[String, ?], ?]",
- ContravariantMonoidalTests[Nested[Option, Const[String, ?], ?]].contravariantMonoidal[Int, Int, Int])
+ ContravariantMonoidalTests[Nested[Option, Const[String, ?], ?]].contravariantMonoidal[Int, Int, Int])
checkAll("ContravariantMonoidal[Nested[Option, Const[String, ?], ?]",
- SerializableTests.serializable(ContravariantMonoidal[Nested[Option, Const[String, ?], ?]]))
+ SerializableTests.serializable(ContravariantMonoidal[Nested[Option, Const[String, ?], ?]]))
}
{
// Contravariant + Contravariant = Functor
type ConstInt[A] = Const[Int, A]
checkAll("Nested[Const[Int, ?], Show, ?]", FunctorTests[Nested[ConstInt, Show, ?]].functor[Int, Int, Int])
- checkAll("Functor[Nested[Const[Int, ?], Show, ?]]", SerializableTests.serializable(Functor[Nested[ConstInt, Show, ?]]))
+ checkAll("Functor[Nested[Const[Int, ?], Show, ?]]",
+ SerializableTests.serializable(Functor[Nested[ConstInt, Show, ?]]))
}
{
// Contravariant + Functor = Contravariant
checkAll("Nested[Show, Option, ?]", ContravariantTests[Nested[Show, Option, ?]].contravariant[Int, Int, Int])
- checkAll("Contravariant[Nested[Show, Option, ?]]", SerializableTests.serializable(Contravariant[Nested[Show, Option, ?]]))
+ checkAll("Contravariant[Nested[Show, Option, ?]]",
+ SerializableTests.serializable(Contravariant[Nested[Show, Option, ?]]))
}
{
@@ -113,84 +122,110 @@ class NestedSuite extends CatsSuite {
// CommutativeApply composition
implicit val optionApply = Apply[Option]
implicit val validatedApply = Apply[Validated[Int, ?]]
- checkAll("Nested[Option, Validated[Int, ?], ?]", CommutativeApplyTests[Nested[Option, Validated[Int, ?], ?]].commutativeApply[Int, Int, Int])
- checkAll("CommutativeApply[Nested[Option, Validated[Int, ?], ?], ?]]", SerializableTests.serializable(CommutativeApply[Nested[Option, Validated[Int, ?], ?]]))
+ checkAll("Nested[Option, Validated[Int, ?], ?]",
+ CommutativeApplyTests[Nested[Option, Validated[Int, ?], ?]].commutativeApply[Int, Int, Int])
+ checkAll("CommutativeApply[Nested[Option, Validated[Int, ?], ?], ?]]",
+ SerializableTests.serializable(CommutativeApply[Nested[Option, Validated[Int, ?], ?]]))
}
{
// Applicative composition
implicit val instance = ListWrapper.applicative
checkAll("Nested[List, ListWrapper, ?]", ApplicativeTests[Nested[List, ListWrapper, ?]].applicative[Int, Int, Int])
- checkAll("Applicative[Nested[List, ListWrapper, ?]]", SerializableTests.serializable(Applicative[Nested[List, ListWrapper, ?]]))
+ checkAll("Applicative[Nested[List, ListWrapper, ?]]",
+ SerializableTests.serializable(Applicative[Nested[List, ListWrapper, ?]]))
}
{
// CommutativeApplicative composition
implicit val instance = ListWrapper.applicative
- checkAll("Nested[Option, Validated[Int, ?], ?]", CommutativeApplicativeTests[Nested[Option, Validated[Int, ?], ?]].commutativeApplicative[Int, Int, Int])
- checkAll("CommutativeApplicative[Nested[List, ListWrapper, ?]]", SerializableTests.serializable(CommutativeApplicative[Nested[Option, Validated[Int, ?], ?]]))
+ checkAll("Nested[Option, Validated[Int, ?], ?]",
+ CommutativeApplicativeTests[Nested[Option, Validated[Int, ?], ?]].commutativeApplicative[Int, Int, Int])
+ checkAll("CommutativeApplicative[Nested[List, ListWrapper, ?]]",
+ SerializableTests.serializable(CommutativeApplicative[Nested[Option, Validated[Int, ?], ?]]))
}
{
//ApplicativeError composition
implicit val instance = ListWrapper.applicative
- checkAll("Nested[Validated[String, ?], ListWrapper, ?]", ApplicativeErrorTests[Nested[Validated[String, ?], ListWrapper, ?], String].applicativeError[Int, Int, Int])
- checkAll("ApplicativeError[Nested[Validated[String, ?], ListWrapper, ?]]", SerializableTests.serializable(ApplicativeError[Nested[Validated[String, ?], ListWrapper, ?], String]))
+ checkAll(
+ "Nested[Validated[String, ?], ListWrapper, ?]",
+ ApplicativeErrorTests[Nested[Validated[String, ?], ListWrapper, ?], String].applicativeError[Int, Int, Int]
+ )
+ checkAll(
+ "ApplicativeError[Nested[Validated[String, ?], ListWrapper, ?]]",
+ SerializableTests.serializable(ApplicativeError[Nested[Validated[String, ?], ListWrapper, ?], String])
+ )
}
{
// Alternative composition
implicit val instance = ListWrapper.alternative
checkAll("Nested[List, ListWrapper, ?]", AlternativeTests[Nested[List, ListWrapper, ?]].alternative[Int, Int, Int])
- checkAll("Alternative[Nested[List, ListWrapper, ?]]", SerializableTests.serializable(Alternative[Nested[List, ListWrapper, ?]]))
+ checkAll("Alternative[Nested[List, ListWrapper, ?]]",
+ SerializableTests.serializable(Alternative[Nested[List, ListWrapper, ?]]))
}
{
// Foldable composition
implicit val instance = ListWrapper.foldable
checkAll("Nested[List, ListWrapper, ?]", FoldableTests[Nested[List, ListWrapper, ?]].foldable[Int, Int])
- checkAll("Foldable[Nested[List, ListWrapper, ?]]", SerializableTests.serializable(Foldable[Nested[List, ListWrapper, ?]]))
+ checkAll("Foldable[Nested[List, ListWrapper, ?]]",
+ SerializableTests.serializable(Foldable[Nested[List, ListWrapper, ?]]))
}
{
// Traverse composition
implicit val instance = ListWrapper.traverse
- checkAll("Nested[List, ListWrapper, ?]", TraverseTests[Nested[List, ListWrapper, ?]].traverse[Int, Int, Int, Set[Int], Option, Option])
- checkAll("Traverse[Nested[List, ListWrapper, ?]]", SerializableTests.serializable(Traverse[Nested[List, ListWrapper, ?]]))
+ checkAll("Nested[List, ListWrapper, ?]",
+ TraverseTests[Nested[List, ListWrapper, ?]].traverse[Int, Int, Int, Set[Int], Option, Option])
+ checkAll("Traverse[Nested[List, ListWrapper, ?]]",
+ SerializableTests.serializable(Traverse[Nested[List, ListWrapper, ?]]))
}
{
// Reducible composition
implicit val instance = ListWrapper.foldable
- checkAll("Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]", ReducibleTests[Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]].reducible[Option, Int, Int])
- checkAll("Reducible[Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]]", SerializableTests.serializable(Reducible[Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]]))
+ checkAll("Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]",
+ ReducibleTests[Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]].reducible[Option, Int, Int])
+ checkAll("Reducible[Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]]",
+ SerializableTests.serializable(Reducible[Nested[NonEmptyList, OneAnd[ListWrapper, ?], ?]]))
}
{
//NonEmptyTraverse composition
- checkAll("Nested[NonEmptyList, NonEmptyVector, ?]", NonEmptyTraverseTests[Nested[NonEmptyList, NonEmptyVector, ?]].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
- checkAll("NonEmptyTraverse[Nested[NonEmptyList, NonEmptyVector, ?]]", SerializableTests.serializable(NonEmptyTraverse[Nested[NonEmptyList, NonEmptyVector, ?]]))
+ checkAll(
+ "Nested[NonEmptyList, NonEmptyVector, ?]",
+ NonEmptyTraverseTests[Nested[NonEmptyList, NonEmptyVector, ?]]
+ .nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option]
+ )
+ checkAll("NonEmptyTraverse[Nested[NonEmptyList, NonEmptyVector, ?]]",
+ SerializableTests.serializable(NonEmptyTraverse[Nested[NonEmptyList, NonEmptyVector, ?]]))
}
{
// SemigroupK composition
implicit val instance = ListWrapper.semigroupK
checkAll("Nested[ListWrapper, Option, ?]", SemigroupKTests[Nested[ListWrapper, Option, ?]].semigroupK[Int])
- checkAll("SemigroupK[Nested[ListWrapper, Option, ?]]", SerializableTests.serializable(SemigroupK[Nested[ListWrapper, Option, ?]]))
+ checkAll("SemigroupK[Nested[ListWrapper, Option, ?]]",
+ SerializableTests.serializable(SemigroupK[Nested[ListWrapper, Option, ?]]))
}
{
// MonoidK composition
implicit val instance = ListWrapper.monoidK
checkAll("Nested[ListWrapper, Option, ?]", MonoidKTests[Nested[ListWrapper, Option, ?]].monoidK[Int])
- checkAll("MonoidK[Nested[ListWrapper, Option, ?]]", SerializableTests.serializable(MonoidK[Nested[ListWrapper, Option, ?]]))
+ checkAll("MonoidK[Nested[ListWrapper, Option, ?]]",
+ SerializableTests.serializable(MonoidK[Nested[ListWrapper, Option, ?]]))
}
{
import cats.laws.discipline.eq._
//Distributive composition
- checkAll("Nested[Function1[Int, ?], Function0, ?]", DistributiveTests[Nested[Function1[Int, ?], Function0, ?]].distributive[Int, Int, Int, Option, Function0])
- checkAll("Distributive[Nested[Function1[Int,?], Function0, ?]]", SerializableTests.serializable(Distributive[Nested[Function1[Int,?], Function0, ?]]))
+ checkAll("Nested[Function1[Int, ?], Function0, ?]",
+ DistributiveTests[Nested[Function1[Int, ?], Function0, ?]].distributive[Int, Int, Int, Option, Function0])
+ checkAll("Distributive[Nested[Function1[Int,?], Function0, ?]]",
+ SerializableTests.serializable(Distributive[Nested[Function1[Int, ?], Function0, ?]]))
}
}
diff --git a/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala b/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala
index 77e26a9d35..640db1db2a 100644
--- a/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala
+++ b/tests/src/test/scala/cats/tests/NonEmptyChainSuite.scala
@@ -10,7 +10,8 @@ class NonEmptyChainSuite extends CatsSuite {
checkAll("NonEmptyChain[Int]", SemigroupKTests[NonEmptyChain].semigroupK[Int])
checkAll("SemigroupK[NonEmptyChain]", SerializableTests.serializable(SemigroupK[NonEmptyChain]))
- checkAll("NonEmptyChain[Int] with Option", NonEmptyTraverseTests[NonEmptyChain].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
+ checkAll("NonEmptyChain[Int] with Option",
+ NonEmptyTraverseTests[NonEmptyChain].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
checkAll("NonEmptyTraverse[NonEmptyChain]", SerializableTests.serializable(Traverse[NonEmptyChain]))
checkAll("NonEmptyChain[Int]", BimonadTests[NonEmptyChain].bimonad[Int, Int, Int])
@@ -24,115 +25,112 @@ class NonEmptyChainSuite extends CatsSuite {
{
implicit val partialOrder = ListWrapper.partialOrder[Int]
- checkAll("NonEmptyChain[ListWrapper[Int]]",
- PartialOrderTests[NonEmptyChain[ListWrapper[Int]]].partialOrder)
+ checkAll("NonEmptyChain[ListWrapper[Int]]", PartialOrderTests[NonEmptyChain[ListWrapper[Int]]].partialOrder)
checkAll("PartialOrder[NonEmptyChain[ListWrapper[Int]]",
- SerializableTests.serializable(PartialOrder[NonEmptyChain[ListWrapper[Int]]]))
+ SerializableTests.serializable(PartialOrder[NonEmptyChain[ListWrapper[Int]]]))
}
{
implicit val eqv = ListWrapper.eqv[Int]
- checkAll("NonEmptyChain[ListWrapper[Int]]",
- EqTests[NonEmptyChain[ListWrapper[Int]]].eqv)
- checkAll("Eq[NonEmptyChain[ListWrapper[Int]]",
- SerializableTests.serializable(Eq[NonEmptyChain[ListWrapper[Int]]]))
+ checkAll("NonEmptyChain[ListWrapper[Int]]", EqTests[NonEmptyChain[ListWrapper[Int]]].eqv)
+ checkAll("Eq[NonEmptyChain[ListWrapper[Int]]", SerializableTests.serializable(Eq[NonEmptyChain[ListWrapper[Int]]]))
}
- test("show"){
- Show[NonEmptyChain[Int]].show(NonEmptyChain(1, 2, 3)) should === ("NonEmptyChain(1, 2, 3)")
+ test("show") {
+ Show[NonEmptyChain[Int]].show(NonEmptyChain(1, 2, 3)) should ===("NonEmptyChain(1, 2, 3)")
}
test("size is consistent with toChain.size") {
forAll { (ci: NonEmptyChain[Int]) =>
- ci.size should === (ci.toChain.size)
+ ci.size should ===(ci.toChain.size)
}
}
test("filterNot and then exists should always be false") {
forAll { (ci: NonEmptyChain[Int], f: Int => Boolean) =>
- ci.filterNot(f).exists(f) should === (false)
+ ci.filterNot(f).exists(f) should ===(false)
}
}
test("filter and then forall should always be true") {
forAll { (ci: NonEmptyChain[Int], f: Int => Boolean) =>
- ci.filter(f).forall(f) should === (true)
+ ci.filter(f).forall(f) should ===(true)
}
}
test("exists should be consistent with find + isDefined") {
forAll { (ci: NonEmptyChain[Int], f: Int => Boolean) =>
- ci.exists(f) should === (ci.find(f).isDefined)
+ ci.exists(f) should ===(ci.find(f).isDefined)
}
}
test("deleteFirst consistent with find") {
forAll { (ci: NonEmptyChain[Int], f: Int => Boolean) =>
- ci.find(f) should === (ci.deleteFirst(f).map(_._1))
+ ci.find(f) should ===(ci.deleteFirst(f).map(_._1))
}
}
test("filterNot element and then contains should be false") {
forAll { (ci: NonEmptyChain[Int], i: Int) =>
- ci.filterNot(_ === i).contains(i) should === (false)
+ ci.filterNot(_ === i).contains(i) should ===(false)
}
}
test("Always nonempty after cons") {
forAll { (ci: NonEmptyChain[Int], i: Int) =>
- (i +: ci).nonEmpty should === (true)
+ (i +: ci).nonEmpty should ===(true)
}
}
test("fromNonEmptyVector . toNonEmptyVector is id") {
forAll { (ci: NonEmptyChain[Int]) =>
- NonEmptyChain.fromNonEmptyVector(ci.toNonEmptyVector) should === (ci)
+ NonEmptyChain.fromNonEmptyVector(ci.toNonEmptyVector) should ===(ci)
}
}
test("fromNonEmptyList . toNonEmptyList is id") {
forAll { (ci: NonEmptyChain[Int]) =>
- NonEmptyChain.fromNonEmptyList(ci.toNonEmptyList) should === (ci)
+ NonEmptyChain.fromNonEmptyList(ci.toNonEmptyList) should ===(ci)
}
}
test("fromChain . toChain is Option.some") {
forAll { (ci: NonEmptyChain[Int]) =>
- NonEmptyChain.fromChain(ci.toChain) should === (Some(ci))
+ NonEmptyChain.fromChain(ci.toChain) should ===(Some(ci))
}
}
test("fromChainUnsafe throws exception when used with empty chain") {
- Either.catchNonFatal(NonEmptyChain.fromChainUnsafe(Chain.empty[Int])).isLeft should === (true)
+ Either.catchNonFatal(NonEmptyChain.fromChainUnsafe(Chain.empty[Int])).isLeft should ===(true)
}
test("fromSeq . toList . iterator is id") {
forAll { (ci: NonEmptyChain[Int]) =>
- NonEmptyChain.fromSeq(ci.iterator.toList) should === (Option(ci))
+ NonEmptyChain.fromSeq(ci.iterator.toList) should ===(Option(ci))
}
}
test("zipWith consistent with List#zip and then List#map") {
forAll { (a: NonEmptyChain[String], b: NonEmptyChain[Int], f: (String, Int) => Int) =>
- a.zipWith(b)(f).toList should === (a.toList.zip(b.toList).map { case (x, y) => f(x, y) })
+ a.zipWith(b)(f).toList should ===(a.toList.zip(b.toList).map { case (x, y) => f(x, y) })
}
}
test("groupBy consistent with List#groupBy") {
forAll { (cs: NonEmptyChain[String], f: String => Int) =>
- cs.groupBy(f).map(_.toNonEmptyList) should === (cs.toNonEmptyList.groupByNem(f))
+ cs.groupBy(f).map(_.toNonEmptyList) should ===(cs.toNonEmptyList.groupByNem(f))
}
}
test("reverse . reverse is id") {
forAll { (ci: NonEmptyChain[Int]) =>
- ci.reverse.reverse should === (ci)
+ ci.reverse.reverse should ===(ci)
}
}
test("reverse consistent with Chain#reverse") {
forAll { (ci: NonEmptyChain[Int]) =>
- ci.reverse.toChain should === (ci.toChain.reverse)
+ ci.reverse.toChain should ===(ci.toChain.reverse)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/NonEmptyListSuite.scala b/tests/src/test/scala/cats/tests/NonEmptyListSuite.scala
index 948dac307c..ed2b9a9ff3 100644
--- a/tests/src/test/scala/cats/tests/NonEmptyListSuite.scala
+++ b/tests/src/test/scala/cats/tests/NonEmptyListSuite.scala
@@ -1,12 +1,19 @@
package cats
package tests
-import cats.kernel.laws.discipline.{SemigroupTests, OrderTests, PartialOrderTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, OrderTests, PartialOrderTests, SemigroupTests}
-import cats.data.{NonEmptyList, NonEmptyVector, NonEmptyMap}
+import cats.data.{NonEmptyList, NonEmptyMap, NonEmptyVector}
import cats.data.NonEmptyList.ZipNonEmptyList
import cats.laws.discipline.arbitrary._
-import cats.laws.discipline.{CommutativeApplyTests, BimonadTests, NonEmptyTraverseTests, ReducibleTests, SemigroupKTests, SerializableTests}
+import cats.laws.discipline.{
+ BimonadTests,
+ CommutativeApplyTests,
+ NonEmptyTraverseTests,
+ ReducibleTests,
+ SemigroupKTests,
+ SerializableTests
+}
import scala.collection.immutable.SortedMap
class NonEmptyListSuite extends CatsSuite {
@@ -16,7 +23,8 @@ class NonEmptyListSuite extends CatsSuite {
checkAll("NonEmptyList[Int]", OrderTests[NonEmptyList[Int]].order)
- checkAll("NonEmptyList[Int] with Option", NonEmptyTraverseTests[NonEmptyList].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
+ checkAll("NonEmptyList[Int] with Option",
+ NonEmptyTraverseTests[NonEmptyList].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
checkAll("NonEmptyTraverse[NonEmptyList[A]]", SerializableTests.serializable(NonEmptyTraverse[NonEmptyList]))
checkAll("NonEmptyList[Int]", ReducibleTests[NonEmptyList].reducible[Option, Int, Int])
@@ -39,7 +47,8 @@ class NonEmptyListSuite extends CatsSuite {
{
implicit val A = ListWrapper.partialOrder[Int]
checkAll("NonEmptyList[ListWrapper[Int]]", PartialOrderTests[NonEmptyList[ListWrapper[Int]]].partialOrder)
- checkAll("PartialOrder[NonEmptyList[ListWrapper[Int]]]", SerializableTests.serializable(PartialOrder[NonEmptyList[ListWrapper[Int]]]))
+ checkAll("PartialOrder[NonEmptyList[ListWrapper[Int]]]",
+ SerializableTests.serializable(PartialOrder[NonEmptyList[ListWrapper[Int]]]))
Eq[NonEmptyList[ListWrapper[Int]]]
}
@@ -47,7 +56,8 @@ class NonEmptyListSuite extends CatsSuite {
{
implicit val A = ListWrapper.order[Int]
checkAll("NonEmptyList[ListWrapper[Int]]", OrderTests[NonEmptyList[ListWrapper[Int]]].order)
- checkAll("Order[NonEmptyList[ListWrapper[Int]]]", SerializableTests.serializable(Order[NonEmptyList[ListWrapper[Int]]]))
+ checkAll("Order[NonEmptyList[ListWrapper[Int]]]",
+ SerializableTests.serializable(Order[NonEmptyList[ListWrapper[Int]]]))
Eq[NonEmptyList[ListWrapper[Int]]]
PartialOrder[NonEmptyList[ListWrapper[Int]]]
@@ -55,23 +65,23 @@ class NonEmptyListSuite extends CatsSuite {
test("Show is not empty and is formatted as expected") {
forAll { (nel: NonEmptyList[Int]) =>
- nel.show.nonEmpty should === (true)
- nel.show.startsWith("NonEmptyList(") should === (true)
- nel.show should === (implicitly[Show[NonEmptyList[Int]]].show(nel))
- nel.show.contains(nel.head.show) should === (true)
+ nel.show.nonEmpty should ===(true)
+ nel.show.startsWith("NonEmptyList(") should ===(true)
+ nel.show should ===(implicitly[Show[NonEmptyList[Int]]].show(nel))
+ nel.show.contains(nel.head.show) should ===(true)
}
}
test("Show is formatted correctly") {
val nonEmptyList = NonEmptyList("Test", Nil)
- nonEmptyList.show should === ("NonEmptyList(Test)")
+ nonEmptyList.show should ===("NonEmptyList(Test)")
}
test("Creating NonEmptyList + toList is identity") {
forAll { (i: Int, tail: List[Int]) =>
val list = i :: tail
val nonEmptyList = NonEmptyList.of(i, tail: _*)
- list should === (nonEmptyList.toList)
+ list should ===(nonEmptyList.toList)
}
}
@@ -79,62 +89,62 @@ class NonEmptyListSuite extends CatsSuite {
forAll { (init: List[Int], last: Int) =>
val list = init :+ last
val nonEmptyList = NonEmptyList.ofInitLast(init, last)
- list should === (nonEmptyList.toList)
+ list should ===(nonEmptyList.toList)
}
}
test("NonEmptyList#filter is consistent with List#filter") {
forAll { (nel: NonEmptyList[Int], p: Int => Boolean) =>
val list = nel.toList
- nel.filter(p) should === (list.filter(p))
+ nel.filter(p) should ===(list.filter(p))
}
}
test("NonEmptyList#filterNot is consistent with List#filterNot") {
forAll { (nel: NonEmptyList[Int], p: Int => Boolean) =>
val list = nel.toList
- nel.filterNot(p) should === (list.filterNot(p))
+ nel.filterNot(p) should ===(list.filterNot(p))
}
}
test("NonEmptyList#collect is consistent with List#collect") {
forAll { (nel: NonEmptyList[Int], pf: PartialFunction[Int, String]) =>
val list = nel.toList
- nel.collect(pf) should === (list.collect(pf))
+ nel.collect(pf) should ===(list.collect(pf))
}
}
test("NonEmptyList#find is consistent with List#find") {
forAll { (nel: NonEmptyList[Int], p: Int => Boolean) =>
val list = nel.toList
- nel.find(p) should === (list.find(p))
+ nel.find(p) should ===(list.find(p))
}
}
test("NonEmptyList#exists is consistent with List#exists") {
forAll { (nel: NonEmptyList[Int], p: Int => Boolean) =>
val list = nel.toList
- nel.exists(p) should === (list.exists(p))
+ nel.exists(p) should ===(list.exists(p))
}
}
test("NonEmptyList#forall is consistent with List#forall") {
forAll { (nel: NonEmptyList[Int], p: Int => Boolean) =>
val list = nel.toList
- nel.forall(p) should === (list.forall(p))
+ nel.forall(p) should ===(list.forall(p))
}
}
test("NonEmptyList#map is consistent with List#map") {
forAll { (nel: NonEmptyList[Int], p: Int => String) =>
val list = nel.toList
- nel.map(p).toList should === (list.map(p))
+ nel.map(p).toList should ===(list.map(p))
}
}
test("reduceLeft consistent with foldLeft") {
forAll { (nel: NonEmptyList[Int], f: (Int, Int) => Int) =>
- nel.reduceLeft(f) should === (nel.tail.foldLeft(nel.head)(f))
+ nel.reduceLeft(f) should ===(nel.tail.foldLeft(nel.head)(f))
}
}
@@ -143,19 +153,19 @@ class NonEmptyListSuite extends CatsSuite {
val got = nel.reduceRight(f).value
val last :: rev = nel.toList.reverse
val expected = rev.reverse.foldRight(last)((a, b) => f(a, Now(b)).value)
- got should === (expected)
+ got should ===(expected)
}
}
test("reduce consistent with fold") {
forAll { (nel: NonEmptyList[Int]) =>
- nel.reduce should === (nel.fold)
+ nel.reduce should ===(nel.fold)
}
}
test("reduce consistent with reduceK") {
forAll { (nel: NonEmptyList[Option[Int]]) =>
- nel.reduce(SemigroupK[Option].algebra[Int]) should === (nel.reduceK)
+ nel.reduce(SemigroupK[Option].algebra[Int]) should ===(nel.reduceK)
}
}
@@ -164,7 +174,7 @@ class NonEmptyListSuite extends CatsSuite {
val expected = nel.tail.foldLeft(Option(f(nel.head))) { (opt, i) =>
opt.map(s => g(s, i))
}
- nel.reduceLeftToOption(f)(g) should === (expected)
+ nel.reduceLeftToOption(f)(g) should ===(expected)
}
}
@@ -175,7 +185,7 @@ class NonEmptyListSuite extends CatsSuite {
val expected = rev.reverse.foldRight(Option(f(last))) { (i, opt) =>
opt.map(s => g(i, Now(s)).value)
}
- got should === (expected)
+ got should ===(expected)
}
}
@@ -185,29 +195,29 @@ class NonEmptyListSuite extends CatsSuite {
val expected = f(nel.head).flatMap { hd =>
nel.tail.foldM(hd)((acc, i) => f(i).map(acc + _))
}
- got should === (expected)
+ got should ===(expected)
}
}
test("reduceMapM consistent with foldMapM") {
forAll { (nel: NonEmptyList[Int], f: Int => Option[Int]) =>
- nel.reduceMapM(f) should === (nel.foldMapM(f))
+ nel.reduceMapM(f) should ===(nel.foldMapM(f))
}
}
test("fromList round trip") {
forAll { l: List[Int] =>
- NonEmptyList.fromList(l).map(_.toList).getOrElse(List.empty) should === (l)
+ NonEmptyList.fromList(l).map(_.toList).getOrElse(List.empty) should ===(l)
}
forAll { nel: NonEmptyList[Int] =>
- NonEmptyList.fromList(nel.toList) should === (Some(nel))
+ NonEmptyList.fromList(nel.toList) should ===(Some(nel))
}
}
test("fromListUnsafe/fromList consistency") {
forAll { nel: NonEmptyList[Int] =>
- NonEmptyList.fromList(nel.toList) should === (Some(NonEmptyList.fromListUnsafe(nel.toList)))
+ NonEmptyList.fromList(nel.toList) should ===(Some(NonEmptyList.fromListUnsafe(nel.toList)))
}
}
@@ -219,88 +229,86 @@ class NonEmptyListSuite extends CatsSuite {
test(":: consistent with List") {
forAll { (nel: NonEmptyList[Int], i: Int) =>
- (i :: nel).toList should === (i :: nel.toList)
- nel.prepend(i).toList should === (i :: nel.toList)
+ (i :: nel).toList should ===(i :: nel.toList)
+ nel.prepend(i).toList should ===(i :: nel.toList)
}
}
test("NonEmptyList#distinct is consistent with List#distinct") {
forAll { nel: NonEmptyList[Int] =>
- nel.distinct.toList should === (nel.toList.distinct)
+ nel.distinct.toList should ===(nel.toList.distinct)
}
}
test("NonEmptyList#reverse is consistent with List#reverse") {
forAll { nel: NonEmptyList[Int] =>
- nel.reverse.toList should === (nel.toList.reverse)
+ nel.reverse.toList should ===(nel.toList.reverse)
}
}
test("NonEmptyList#zipWithIndex is consistent with List#zipWithIndex") {
forAll { nel: NonEmptyList[Int] =>
- nel.zipWithIndex.toList should === (nel.toList.zipWithIndex)
+ nel.zipWithIndex.toList should ===(nel.toList.zipWithIndex)
}
}
test("NonEmptyList#last is consistent with List#last") {
forAll { nel: NonEmptyList[Int] =>
- nel.last should === (nel.toList.last)
+ nel.last should ===(nel.toList.last)
}
}
test("NonEmptyList#init is consistent with List#init") {
forAll { nel: NonEmptyList[Int] =>
- nel.init should === (nel.toList.init)
+ nel.init should ===(nel.toList.init)
}
}
test("NonEmptyList#size and length is consistent with List#size") {
forAll { nel: NonEmptyList[Int] =>
- nel.size should === (nel.toList.size)
- nel.length should === (nel.toList.size)
+ nel.size should ===(nel.toList.size)
+ nel.length should ===(nel.toList.size)
}
}
test("NonEmptyList#sorted is consistent with List#sorted") {
forAll { nel: NonEmptyList[Int] =>
- nel.sorted.toList should === (nel.toList.sorted)
+ nel.sorted.toList should ===(nel.toList.sorted)
}
}
test("NonEmptyList#sortBy is consistent with List#sortBy") {
forAll { (nel: NonEmptyList[Int], f: Int => Int) =>
- nel.sortBy(f).toList should === (nel.toList.sortBy(f))
+ nel.sortBy(f).toList should ===(nel.toList.sortBy(f))
}
}
-
test("NonEmptyList#groupBy is consistent with List#groupBy") {
forAll { (nel: NonEmptyList[Int], f: Int => Int) =>
- nel.groupBy(f).map{ case (k, v) => (k, v.toList) } should === (nel.toList.groupBy(f))
+ nel.groupBy(f).map { case (k, v) => (k, v.toList) } should ===(nel.toList.groupBy(f))
}
}
test("NonEmptyList#concat/concatNel is consistent with List#:::") {
forAll { (nel: NonEmptyList[Int], l: List[Int], n: Int) =>
- (nel ++ l).toList should === (nel.toList ::: l)
- nel.concat(l).toList should === (nel.toList ::: l)
- nel.concatNel(NonEmptyList(n, l)).toList should === (nel.toList ::: (n :: l))
+ (nel ++ l).toList should ===(nel.toList ::: l)
+ nel.concat(l).toList should ===(nel.toList ::: l)
+ nel.concatNel(NonEmptyList(n, l)).toList should ===(nel.toList ::: (n :: l))
}
}
test("NonEmptyList#fromFoldabale is consistent with NonEmptyList#fromList") {
forAll { (xs: List[Int]) =>
- NonEmptyList.fromList(xs) should === (NonEmptyList.fromFoldable(xs))
+ NonEmptyList.fromList(xs) should ===(NonEmptyList.fromFoldable(xs))
}
}
test("NonEmptyList#fromReducible is consistent with Reducible#toNonEmptyList") {
forAll { (xs: NonEmptyVector[Int]) =>
- NonEmptyList.fromReducible(xs) should === (Reducible[NonEmptyVector].toNonEmptyList(xs))
+ NonEmptyList.fromReducible(xs) should ===(Reducible[NonEmptyVector].toNonEmptyList(xs))
}
}
-
test("NonEmptyList#zipWith is consistent with List#zip and then List#map") {
forAll { (a: NonEmptyList[Int], b: NonEmptyList[Int], f: (Int, Int) => Int) =>
a.zipWith(b)(f).toList should ===(a.toList.zip(b.toList).map { case (x, y) => f(x, y) })
@@ -308,12 +316,11 @@ class NonEmptyListSuite extends CatsSuite {
}
test("NonEmptyList#nonEmptyPartition remains sorted") {
forAll { (nel: NonEmptyList[Int], f: Int => Either[String, String]) =>
-
val sorted = nel.map(f).sorted
val ior = Reducible[NonEmptyList].nonEmptyPartition(sorted)(identity)
- ior.left.map(xs => xs.sorted should === (xs))
- ior.right.map(xs => xs.sorted should === (xs))
+ ior.left.map(xs => xs.sorted should ===(xs))
+ ior.right.map(xs => xs.sorted should ===(xs))
}
}
@@ -329,7 +336,7 @@ class DeprecatedNonEmptyListSuite extends CatsSuite {
test("Deprecated NonEmptyList#concat is consistent with List#:::") {
forAll { (nel: NonEmptyList[Int], l: List[Int], n: Int) =>
- nel.concat(NonEmptyList(n, l)).toList should === (nel.toList ::: (n :: l))
+ nel.concat(NonEmptyList(n, l)).toList should ===(nel.toList ::: (n :: l))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/NonEmptyMapSuite.scala b/tests/src/test/scala/cats/tests/NonEmptyMapSuite.scala
index 756f9c784d..9b11b522af 100644
--- a/tests/src/test/scala/cats/tests/NonEmptyMapSuite.scala
+++ b/tests/src/test/scala/cats/tests/NonEmptyMapSuite.scala
@@ -26,9 +26,11 @@ import scala.collection.immutable.SortedMap
class NonEmptyMapSuite extends CatsSuite {
-
checkAll("NonEmptyMap[String, Int]", SemigroupKTests[NonEmptyMap[String, ?]].semigroupK[Int])
- checkAll("NonEmptyMap[String, Int]", NonEmptyTraverseTests[NonEmptyMap[String, ?]].nonEmptyTraverse[Option, Int, Int, Double, Int, Option, Option])
+ checkAll(
+ "NonEmptyMap[String, Int]",
+ NonEmptyTraverseTests[NonEmptyMap[String, ?]].nonEmptyTraverse[Option, Int, Int, Double, Int, Option, Option]
+ )
checkAll("NonEmptyMap[String, Int]", BandTests[NonEmptyMap[String, Int]].band)
checkAll("NonEmptyMap[String, Int]", EqTests[NonEmptyMap[String, Int]].eqv)
@@ -90,13 +92,13 @@ class NonEmptyMapSuite extends CatsSuite {
test("lookup is consistent with contains") {
forAll { (nem: NonEmptyMap[String, Int], key: String) =>
- nem(key).isDefined should === (nem.contains(key))
+ nem(key).isDefined should ===(nem.contains(key))
}
}
test("keys.contains is consistent with contains") {
forAll { (nem: NonEmptyMap[String, Int], key: String) =>
- nem(key).isDefined should === (nem.keys.contains(key))
+ nem(key).isDefined should ===(nem.keys.contains(key))
}
}
@@ -191,7 +193,7 @@ class NonEmptyMapSuite extends CatsSuite {
test("+ consistent with Map") {
forAll { (nem: NonEmptyMap[String, Int], i: (String, Int)) =>
- (nem add i).toSortedMap should ===(nem.toSortedMap + i)
+ nem.add(i).toSortedMap should ===(nem.toSortedMap + i)
}
}
@@ -202,8 +204,8 @@ class NonEmptyMapSuite extends CatsSuite {
}
}
- test("NonEmptyMap#toNonEmptyList is consistent with Map#toList and creating NonEmptyList from it"){
- forAll{ nem: NonEmptyMap[String, Int] =>
+ test("NonEmptyMap#toNonEmptyList is consistent with Map#toList and creating NonEmptyList from it") {
+ forAll { nem: NonEmptyMap[String, Int] =>
nem.toNel should ===(NonEmptyList.fromListUnsafe(nem.toSortedMap.toList))
}
}
diff --git a/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala b/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala
index 30b5dee895..f65b86061a 100644
--- a/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala
+++ b/tests/src/test/scala/cats/tests/NonEmptySetSuite.scala
@@ -20,7 +20,7 @@ package tests
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
import cats.data.NonEmptySet
-import cats.kernel.laws.discipline.{SemilatticeTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, SemilatticeTests}
import scala.collection.immutable.SortedSet
@@ -33,85 +33,87 @@ class NonEmptySetSuite extends CatsSuite {
test("First element is always the smallest") {
forAll { (nes: NonEmptySet[Int]) =>
- nes.forall { v => Order[Int].lteqv(nes.head, v) } should === (true)
+ nes.forall { v =>
+ Order[Int].lteqv(nes.head, v)
+ } should ===(true)
}
}
test("Show is not empty and is formatted as expected") {
forAll { (nes: NonEmptySet[Int]) =>
- nes.show.nonEmpty should === (true)
- nes.show.startsWith("NonEmptySortedSet(") should === (true)
- nes.show should === (implicitly[Show[NonEmptySet[Int]]].show(nes))
- nes.show.contains(nes.head.show) should === (true)
+ nes.show.nonEmpty should ===(true)
+ nes.show.startsWith("NonEmptySortedSet(") should ===(true)
+ nes.show should ===(implicitly[Show[NonEmptySet[Int]]].show(nes))
+ nes.show.contains(nes.head.show) should ===(true)
}
}
test("Show is formatted correctly") {
val nonEmptySet = NonEmptySet("Test", SortedSet.empty[String])
- nonEmptySet.show should === ("NonEmptySortedSet(Test)")
+ nonEmptySet.show should ===("NonEmptySortedSet(Test)")
}
test("Creating NonEmptySet + toSet is identity") {
forAll { (i: Int, tail: SortedSet[Int]) =>
val set = tail + i
val nonEmptySet = NonEmptySet(i, tail)
- set should === (nonEmptySet.toSortedSet)
+ set should ===(nonEmptySet.toSortedSet)
}
}
test("NonEmptySet#filter is consistent with Set#filter") {
forAll { (nes: NonEmptySet[Int], p: Int => Boolean) =>
val set = nes.toSortedSet
- nes.filter(p) should === (set.filter(p))
+ nes.filter(p) should ===(set.filter(p))
}
}
test("NonEmptySet#filterNot is consistent with Set#filterNot") {
forAll { (nes: NonEmptySet[Int], p: Int => Boolean) =>
val set = nes.toSortedSet
- nes.filterNot(p) should === (set.filterNot(p))
+ nes.filterNot(p) should ===(set.filterNot(p))
}
}
test("NonEmptySet#collect is consistent with Set#collect") {
forAll { (nes: NonEmptySet[Int], pf: PartialFunction[Int, String]) =>
val set = nes.toSortedSet
- nes.collect(pf) should === (set.collect(pf))
+ nes.collect(pf) should ===(set.collect(pf))
}
}
test("NonEmptySet#find is consistent with Set#find") {
forAll { (nes: NonEmptySet[Int], p: Int => Boolean) =>
val set = nes.toSortedSet
- nes.find(p) should === (set.find(p))
+ nes.find(p) should ===(set.find(p))
}
}
test("NonEmptySet#exists is consistent with Set#exists") {
forAll { (nes: NonEmptySet[Int], p: Int => Boolean) =>
val set = nes.toSortedSet
- nes.exists(p) should === (set.exists(p))
+ nes.exists(p) should ===(set.exists(p))
}
}
test("NonEmptySet#forall is consistent with Set#forall") {
forAll { (nes: NonEmptySet[Int], p: Int => Boolean) =>
val set = nes.toSortedSet
- nes.forall(p) should === (set.forall(p))
+ nes.forall(p) should ===(set.forall(p))
}
}
test("NonEmptySet#map is consistent with Set#map") {
forAll { (nes: NonEmptySet[Int], p: Int => String) =>
val set = nes.toSortedSet
- nes.map(p).toSortedSet should === (set.map(p))
+ nes.map(p).toSortedSet should ===(set.map(p))
}
}
test("reduceLeft consistent with foldLeft") {
forAll { (nes: NonEmptySet[Int], f: (Int, Int) => Int) =>
- nes.reduceLeft(f) should === (nes.tail.foldLeft(nes.head)(f))
+ nes.reduceLeft(f) should ===(nes.tail.foldLeft(nes.head)(f))
}
}
@@ -121,20 +123,19 @@ class NonEmptySetSuite extends CatsSuite {
val last = nes.last
val rev = nes - last
val expected = rev.foldRight(last)((a, b) => f(a, Now(b)).value)
- got should === (expected)
+ got should ===(expected)
}
}
test("reduce consistent with fold") {
forAll { (nes: NonEmptySet[Int]) =>
- nes.reduce should === (nes.fold)
+ nes.reduce should ===(nes.fold)
}
}
-
test("reduce consistent with reduceK") {
forAll { (nes: NonEmptySet[Option[Int]]) =>
- nes.reduce(SemigroupK[Option].algebra[Int]) should === (nes.reduceK)
+ nes.reduce(SemigroupK[Option].algebra[Int]) should ===(nes.reduceK)
}
}
@@ -143,7 +144,7 @@ class NonEmptySetSuite extends CatsSuite {
val expected = nes.tail.foldLeft(Option(f(nes.head))) { (opt, i) =>
opt.map(s => g(s, i))
}
- nes.reduceLeftToOption(f)(g) should === (expected)
+ nes.reduceLeftToOption(f)(g) should ===(expected)
}
}
@@ -155,7 +156,7 @@ class NonEmptySetSuite extends CatsSuite {
val expected = rev.foldRight(Option(f(last))) { (i, opt) =>
opt.map(s => g(i, Now(s)).value)
}
- got should === (expected)
+ got should ===(expected)
}
}
@@ -165,29 +166,29 @@ class NonEmptySetSuite extends CatsSuite {
val expected = f(nes.head).flatMap { hd =>
nes.tail.foldM(hd)((acc, i) => f(i).map(acc + _))
}
- got should === (expected)
+ got should ===(expected)
}
}
test("reduceMapM consistent with foldMapM") {
forAll { (nes: NonEmptySet[Int], f: Int => Option[Int]) =>
- nes.reduceMapM(f) should === (nes.foldMapM(f))
+ nes.reduceMapM(f) should ===(nes.foldMapM(f))
}
}
test("fromSet round trip") {
forAll { l: SortedSet[Int] =>
- NonEmptySet.fromSet(l).map(_.toSortedSet).getOrElse(SortedSet.empty[Int]) should === (l)
+ NonEmptySet.fromSet(l).map(_.toSortedSet).getOrElse(SortedSet.empty[Int]) should ===(l)
}
forAll { nes: NonEmptySet[Int] =>
- NonEmptySet.fromSet(nes.toSortedSet) should === (Some(nes))
+ NonEmptySet.fromSet(nes.toSortedSet) should ===(Some(nes))
}
}
test("fromSetUnsafe/fromSet consistency") {
forAll { nes: NonEmptySet[Int] =>
- NonEmptySet.fromSet(nes.toSortedSet) should === (Some(NonEmptySet.fromSetUnsafe(nes.toSortedSet)))
+ NonEmptySet.fromSet(nes.toSortedSet) should ===(Some(NonEmptySet.fromSetUnsafe(nes.toSortedSet)))
}
}
@@ -199,25 +200,25 @@ class NonEmptySetSuite extends CatsSuite {
test("+ consistent with Set") {
forAll { (nes: NonEmptySet[Int], i: Int) =>
- (nes add i).toSortedSet should === (nes.toSortedSet + i)
+ nes.add(i).toSortedSet should ===(nes.toSortedSet + i)
}
}
test("NonEmptySet#zipWithIndex is consistent with Set#zipWithIndex") {
forAll { nes: NonEmptySet[Int] =>
- nes.zipWithIndex.toSortedSet should === (nes.toSortedSet.zipWithIndex)
+ nes.zipWithIndex.toSortedSet should ===(nes.toSortedSet.zipWithIndex)
}
}
test("NonEmptySet#length is consistent with Set#size") {
forAll { nes: NonEmptySet[Int] =>
- nes.length should === (nes.toSortedSet.size)
+ nes.length should ===(nes.toSortedSet.size)
}
}
test("NonEmptySet#concat is consistent with Set#++") {
forAll { (nes: NonEmptySet[Int], l: SortedSet[Int], n: Int) =>
- nes.union(NonEmptySet(n, l)).toSortedSet should === (nes.toSortedSet ++ (l + n))
+ nes.union(NonEmptySet(n, l)).toSortedSet should ===(nes.toSortedSet ++ (l + n))
}
}
@@ -235,7 +236,7 @@ class NonEmptySetSuite extends CatsSuite {
test("NonEmptySet#groupBy is consistent with Set#groupBy") {
forAll { (nes: NonEmptySet[Int], f: Int => Int) =>
- nes.groupBy(f).map(_.toSortedSet).toSortedMap should === (nes.toSortedSet.groupBy(f))
+ nes.groupBy(f).map(_.toSortedSet).toSortedMap should ===(nes.toSortedSet.groupBy(f))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala b/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala
index 55b3798b40..2c319b46d7 100644
--- a/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala
+++ b/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala
@@ -5,10 +5,18 @@ import catalysts.Platform
import cats.data.NonEmptyVector.ZipNonEmptyVector
-import cats.kernel.laws.discipline.{SemigroupTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, SemigroupTests}
import cats.data.NonEmptyVector
-import cats.laws.discipline.{CommutativeApplyTests, BimonadTests, SemigroupKTests, FoldableTests, SerializableTests, NonEmptyTraverseTests, ReducibleTests}
+import cats.laws.discipline.{
+ BimonadTests,
+ CommutativeApplyTests,
+ FoldableTests,
+ NonEmptyTraverseTests,
+ ReducibleTests,
+ SemigroupKTests,
+ SerializableTests
+}
import cats.laws.discipline.arbitrary._
import scala.util.Properties
@@ -20,13 +28,13 @@ class NonEmptyVectorSuite extends CatsSuite {
checkAll("NonEmptyVector[Int]", EqTests[NonEmptyVector[Int]].eqv)
- checkAll("NonEmptyVector[Int] with Option", NonEmptyTraverseTests[NonEmptyVector].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
+ checkAll("NonEmptyVector[Int] with Option",
+ NonEmptyTraverseTests[NonEmptyVector].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
checkAll("NonEmptyTraverse[NonEmptyVector[A]]", SerializableTests.serializable(NonEmptyTraverse[NonEmptyVector]))
checkAll("NonEmptyVector[Int]", ReducibleTests[NonEmptyVector].reducible[Option, Int, Int])
checkAll("Reducible[NonEmptyVector]", SerializableTests.serializable(Reducible[NonEmptyVector]))
-
// Test instances that have more general constraints
checkAll("NonEmptyVector[Int]", SemigroupKTests[NonEmptyVector].semigroupK[Int])
@@ -34,12 +42,9 @@ class NonEmptyVectorSuite extends CatsSuite {
checkAll("SemigroupK[NonEmptyVector]", SerializableTests.serializable(SemigroupK[NonEmptyVector]))
checkAll("Semigroup[NonEmptyVector[Int]]", SerializableTests.serializable(Semigroup[NonEmptyVector[Int]]))
-
-
checkAll("NonEmptyVector[Int]", FoldableTests[NonEmptyVector].foldable[Int, Int])
checkAll("Foldable[NonEmptyVector]", SerializableTests.serializable(Foldable[NonEmptyVector]))
-
checkAll("ZipNonEmptyVector[Int]", CommutativeApplyTests[ZipNonEmptyVector].commutativeApply[Int, Int, Int])
checkAll("CommutativeApply[ZipNonEmptyVector]", SerializableTests.serializable(CommutativeApply[ZipNonEmptyVector]))
@@ -49,89 +54,85 @@ class NonEmptyVectorSuite extends CatsSuite {
implicitly[Comonad[NonEmptyVector]]
implicitly[Bimonad[NonEmptyVector]]
-
-
checkAll("NonEmptyVector[Int]", BimonadTests[NonEmptyVector].bimonad[Int, Int, Int])
checkAll("Bimonad[NonEmptyVector]", SerializableTests.serializable(Bimonad[NonEmptyVector]))
-
test("size is consistent with toList.size") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
- nonEmptyVector.size should === (nonEmptyVector.toList.size.toLong)
+ nonEmptyVector.size should ===(nonEmptyVector.toList.size.toLong)
}
}
-
test("Show is not empty and is formatted as expected") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
- nonEmptyVector.show.nonEmpty should === (true)
- nonEmptyVector.show.startsWith("NonEmptyVector(") should === (true)
- nonEmptyVector.show should === (implicitly[Show[NonEmptyVector[Int]]].show(nonEmptyVector))
- nonEmptyVector.show.contains(nonEmptyVector.head.show) should === (true)
+ nonEmptyVector.show.nonEmpty should ===(true)
+ nonEmptyVector.show.startsWith("NonEmptyVector(") should ===(true)
+ nonEmptyVector.show should ===(implicitly[Show[NonEmptyVector[Int]]].show(nonEmptyVector))
+ nonEmptyVector.show.contains(nonEmptyVector.head.show) should ===(true)
}
}
test("Show is formatted correctly") {
val v1 = NonEmptyVector("Test", Vector.empty)
- v1.show should === ("NonEmptyVector(Test)")
+ v1.show should ===("NonEmptyVector(Test)")
val v2 = NonEmptyVector.of("foo", "bar", "baz")
- v2.show should === ("NonEmptyVector(foo, bar, baz)")
+ v2.show should ===("NonEmptyVector(foo, bar, baz)")
}
test("Creating NonEmptyVector + toVector is identity") {
forAll { (i: Int, tail: Vector[Int]) =>
val vector = i +: tail
val nonEmptyVector = NonEmptyVector(i, tail)
- vector should === (nonEmptyVector.toVector)
+ vector should ===(nonEmptyVector.toVector)
}
}
test("NonEmptyVector#filter is consistent with Vector#filter") {
forAll { (nonEmptyVector: NonEmptyVector[Int], p: Int => Boolean) =>
val vector = nonEmptyVector.toVector
- nonEmptyVector.filter(p) should === (vector.filter(p))
+ nonEmptyVector.filter(p) should ===(vector.filter(p))
}
}
test("NonEmptyVector#filterNot is consistent with Vector#filterNot") {
forAll { (nonEmptyVector: NonEmptyVector[Int], p: Int => Boolean) =>
val vector = nonEmptyVector.toVector
- nonEmptyVector.filterNot(p) should === (vector.filterNot(p))
+ nonEmptyVector.filterNot(p) should ===(vector.filterNot(p))
}
}
test("NonEmptyVector#find is consistent with Vector#find") {
forAll { (nonEmptyVector: NonEmptyVector[Int], p: Int => Boolean) =>
val vector = nonEmptyVector.toVector
- nonEmptyVector.find(p) should === (vector.find(p))
+ nonEmptyVector.find(p) should ===(vector.find(p))
}
}
test("NonEmptyVector#exists is consistent with Vector#exists") {
forAll { (nonEmptyVector: NonEmptyVector[Int], p: Int => Boolean) =>
val vector = nonEmptyVector.toVector
- nonEmptyVector.exists(p) should === (vector.exists(p))
+ nonEmptyVector.exists(p) should ===(vector.exists(p))
}
}
test("NonEmptyVector#forall is consistent with Vector#forall") {
forAll { (nonEmptyVector: NonEmptyVector[Int], p: Int => Boolean) =>
val vector = nonEmptyVector.toVector
- nonEmptyVector.forall(p) should === (vector.forall(p))
+ nonEmptyVector.forall(p) should ===(vector.forall(p))
}
}
test("NonEmptyVector#map is consistent with Vector#map") {
forAll { (nonEmptyVector: NonEmptyVector[Int], p: Int => String) =>
val vector = nonEmptyVector.toVector
- nonEmptyVector.map(p).toVector should === (vector.map(p))
+ nonEmptyVector.map(p).toVector should ===(vector.map(p))
}
}
test("reduceLeft consistent with foldLeft") {
forAll { (nonEmptyVector: NonEmptyVector[Int], f: (Int, Int) => Int) =>
- nonEmptyVector.reduceLeft(f) should === (nonEmptyVector.tail.foldLeft(nonEmptyVector.head)(f))
+ nonEmptyVector.reduceLeft(f) should ===(nonEmptyVector.tail.foldLeft(nonEmptyVector.head)(f))
}
}
@@ -143,19 +144,19 @@ class NonEmptyVectorSuite extends CatsSuite {
val got = nonEmptyVector.reduceRight(f).value
val (first, last) = excise(nonEmptyVector.toVector)
val expected = first.foldRight(last)((a, b) => f(a, Now(b)).value)
- got should === (expected)
+ got should ===(expected)
}
}
test("reduce consistent with fold") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
- nonEmptyVector.reduce should === (nonEmptyVector.fold)
+ nonEmptyVector.reduce should ===(nonEmptyVector.fold)
}
}
test("reduce consistent with reduceK") {
forAll { (nonEmptyVector: NonEmptyVector[Option[Int]]) =>
- nonEmptyVector.reduce(SemigroupK[Option].algebra[Int]) should === (nonEmptyVector.reduceK)
+ nonEmptyVector.reduce(SemigroupK[Option].algebra[Int]) should ===(nonEmptyVector.reduceK)
}
}
@@ -164,7 +165,7 @@ class NonEmptyVectorSuite extends CatsSuite {
val expected = nonEmptyVector.tail.foldLeft(Option(f(nonEmptyVector.head))) { (opt, i) =>
opt.map(s => g(s, i))
}
- nonEmptyVector.reduceLeftToOption(f)(g) should === (expected)
+ nonEmptyVector.reduceLeftToOption(f)(g) should ===(expected)
}
}
@@ -174,12 +175,12 @@ class NonEmptyVectorSuite extends CatsSuite {
val expected = first.foldRight(Option(f(last))) { (i, opt) =>
opt.map(s => g(i, Now(s)).value)
}
- nonEmptyVector.reduceRightToOption(f)(g).value should === (expected)
+ nonEmptyVector.reduceRightToOption(f)(g).value should ===(expected)
}
}
test("fromVector returns None when the input vector is empty") {
- NonEmptyVector.fromVector(Vector.empty[Int]) should === (Option.empty[NonEmptyVector[Int]])
+ NonEmptyVector.fromVector(Vector.empty[Int]) should ===(Option.empty[NonEmptyVector[Int]])
}
test("fromVectorUnsafe throws an exception when the input vector is empty") {
@@ -190,53 +191,53 @@ class NonEmptyVectorSuite extends CatsSuite {
test("++ Vector is consistent with concatNev") {
forAll { (nonEmptyVector: NonEmptyVector[Int], other: NonEmptyVector[Int]) =>
- nonEmptyVector ++ other.toVector should === (nonEmptyVector.concatNev(other))
+ nonEmptyVector ++ other.toVector should ===(nonEmptyVector.concatNev(other))
}
}
test("++ Vector is consistent with concat") {
forAll { (nonEmptyVector: NonEmptyVector[Int], vector: Vector[Int]) =>
- nonEmptyVector ++ vector should === (nonEmptyVector.concat(vector))
+ nonEmptyVector ++ vector should ===(nonEmptyVector.concat(vector))
}
}
test(":+ is consistent with concat") {
forAll { (nonEmptyVector: NonEmptyVector[Int], i: Int) =>
- nonEmptyVector :+ i should === (nonEmptyVector.concat(Vector(i)))
+ nonEmptyVector :+ i should ===(nonEmptyVector.concat(Vector(i)))
}
}
test("append is consistent with :+") {
forAll { (nonEmptyVector: NonEmptyVector[Int], i: Int) =>
- nonEmptyVector append i should === (nonEmptyVector :+ i)
+ nonEmptyVector.append(i) should ===(nonEmptyVector :+ i)
}
}
test("+: is consistent with concatNev") {
forAll { (nonEmptyVector: NonEmptyVector[Int], i: Int) =>
- i +: nonEmptyVector should === (NonEmptyVector.one(i).concatNev(nonEmptyVector))
+ i +: nonEmptyVector should ===(NonEmptyVector.one(i).concatNev(nonEmptyVector))
}
}
test("prepend is consistent with +:") {
forAll { (nonEmptyVector: NonEmptyVector[Int], i: Int) =>
- nonEmptyVector prepend i should === (i +: nonEmptyVector)
+ nonEmptyVector.prepend(i) should ===(i +: nonEmptyVector)
}
}
test("NonEmptyVector#of on varargs is consistent with NonEmptyVector#apply on Vector") {
forAll { (head: Int, tail: Vector[Int]) =>
- NonEmptyVector.of(head, tail:_*) should === (NonEmptyVector(head, tail))
+ NonEmptyVector.of(head, tail: _*) should ===(NonEmptyVector(head, tail))
}
}
test("NonEmptyVector#get returns a None when the element does not exist") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
val size = nonEmptyVector.toVector.size
- nonEmptyVector.get(size) should === (None)
+ nonEmptyVector.get(size) should ===(None)
}
}
test("NonEmptyVector#getUnsafe throws an exception when the element does not exist") {
- forAll{ (nonEmptyVector: NonEmptyVector[Int]) =>
+ forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
val size = nonEmptyVector.toVector.size
val _ = intercept[IndexOutOfBoundsException] {
nonEmptyVector.getUnsafe(size)
@@ -247,7 +248,7 @@ class NonEmptyVectorSuite extends CatsSuite {
test("NonEmptyVector#updated returns a None when the element does not exist") {
forAll { (nonEmptyVector: NonEmptyVector[Int], element: Int) =>
val size = nonEmptyVector.toVector.size
- nonEmptyVector.updated(size, element) should === (None)
+ nonEmptyVector.updated(size, element) should ===(None)
}
}
@@ -262,36 +263,36 @@ class NonEmptyVectorSuite extends CatsSuite {
test("NonEmptyVector#hashCode consistent with Vector#hashCode") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
- nonEmptyVector.hashCode should === (nonEmptyVector.toVector.hashCode)
+ nonEmptyVector.hashCode should ===(nonEmptyVector.toVector.hashCode)
}
}
test("NonEmptyVector#equals consistent with Vector#equals") {
forAll { (lhs: NonEmptyVector[Int], rhs: NonEmptyVector[Int]) =>
- lhs.equals(rhs) should === (lhs.toVector.equals(rhs.toVector))
+ lhs.equals(rhs) should ===(lhs.toVector.equals(rhs.toVector))
}
}
test("NonEmptyVector#toString produces correct output") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
- nonEmptyVector.toString should === (s"NonEmpty${nonEmptyVector.toVector.toString}")
+ nonEmptyVector.toString should ===(s"NonEmpty${nonEmptyVector.toVector.toString}")
}
- NonEmptyVector(1, Vector.empty).toString should === ("NonEmptyVector(1)")
- NonEmptyVector(1, Vector.empty).toVector.toString should === ("Vector(1)")
+ NonEmptyVector(1, Vector.empty).toString should ===("NonEmptyVector(1)")
+ NonEmptyVector(1, Vector.empty).toVector.toString should ===("Vector(1)")
}
test("NonEmptyVector.unapply supports pattern matching") {
forAll { (nonEmptyVector: NonEmptyVector[Int]) =>
nonEmptyVector match {
case NonEmptyVector(head, tail) =>
- head should === (nonEmptyVector.head)
- tail should === (nonEmptyVector.tail)
+ head should ===(nonEmptyVector.head)
+ tail should ===(nonEmptyVector.tail)
}
}
}
test("Cannot create a new NonEmptyVector from constructor") {
- if(Platform.isJvm) {
+ if (Platform.isJvm) {
if (!Properties.versionNumberString.startsWith("2.10")) {
// A bug in scala 2.10 allows private constructors to be accessed.
// We should still ensure that on scala 2.11 and up we cannot construct the
@@ -311,7 +312,7 @@ class NonEmptyVectorSuite extends CatsSuite {
test("NonEmptyVector#distinct is consistent with Vector#distinct") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.distinct.toVector should === (nonEmptyVector.toVector.distinct)
+ nonEmptyVector.distinct.toVector should ===(nonEmptyVector.toVector.distinct)
}
}
@@ -324,30 +325,29 @@ class NonEmptyVectorSuite extends CatsSuite {
test("NonEmptyVector#zipWith is consistent with #zipWithIndex") {
forAll { nev: NonEmptyVector[Int] =>
val zw = nev.zipWith(NonEmptyVector.fromVectorUnsafe((0 until nev.length).toVector))(Tuple2.apply)
- nev.zipWithIndex should === (zw)
+ nev.zipWithIndex should ===(zw)
}
}
test("NonEmptyVector#nonEmptyPartition remains sorted") {
forAll { (nev: NonEmptyVector[Int], f: Int => Either[String, String]) =>
-
val sorted = NonEmptyVector.fromVectorUnsafe(nev.map(f).toVector.sorted)
val ior = Reducible[NonEmptyVector].nonEmptyPartition(sorted)(identity)
- ior.left.map(xs => xs.sorted should === (xs))
- ior.right.map(xs => xs.sorted should === (xs))
+ ior.left.map(xs => xs.sorted should ===(xs))
+ ior.right.map(xs => xs.sorted should ===(xs))
}
}
test("NonEmptyVector#last is consistent with Vector#last") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.last should === (nonEmptyVector.toVector.last)
+ nonEmptyVector.last should ===(nonEmptyVector.toVector.last)
}
}
test("NonEmptyVector#init is consistent with Vector#init") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.init should === (nonEmptyVector.toVector.init)
+ nonEmptyVector.init should ===(nonEmptyVector.toVector.init)
}
}
@@ -356,35 +356,37 @@ class NonEmptyVectorSuite extends CatsSuite {
case i if (i % 2 == 0) => i.toDouble
}
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.collect(pf) should === (nonEmptyVector.toVector.collect(pf))
+ nonEmptyVector.collect(pf) should ===(nonEmptyVector.toVector.collect(pf))
}
}
test("NonEmptyVector#length and size is consistent with Vector#length") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.length should === (nonEmptyVector.toVector.length)
- nonEmptyVector.size should === (nonEmptyVector.toVector.length.toLong)
+ nonEmptyVector.length should ===(nonEmptyVector.toVector.length)
+ nonEmptyVector.size should ===(nonEmptyVector.toVector.length.toLong)
}
}
test("NonEmptyVector#reverse is consistent with Vector#reverse") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.reverse should === (NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.reverse))
+ nonEmptyVector.reverse should ===(NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.reverse))
}
}
test("NonEmptyVector#zipWithIndex is consistent with Vector#zipWithIndex") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
val expected = NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.zipWithIndex)
- nonEmptyVector.zipWithIndex should === (expected)
- Traverse[NonEmptyVector].zipWithIndex(nonEmptyVector) should === (expected)
+ nonEmptyVector.zipWithIndex should ===(expected)
+ Traverse[NonEmptyVector].zipWithIndex(nonEmptyVector) should ===(expected)
}
}
test("NonEmptyVector#sorted and sortBy is consistent with Vector#sorted and sortBy") {
forAll { nonEmptyVector: NonEmptyVector[Int] =>
- nonEmptyVector.sorted should === (NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.sorted))
- nonEmptyVector.sortBy(i => -i) should === (NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.sortBy(i => -i)))
+ nonEmptyVector.sorted should ===(NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.sorted))
+ nonEmptyVector.sortBy(i => -i) should ===(
+ NonEmptyVector.fromVectorUnsafe(nonEmptyVector.toVector.sortBy(i => -i))
+ )
}
}
}
diff --git a/tests/src/test/scala/cats/tests/OneAndSuite.scala b/tests/src/test/scala/cats/tests/OneAndSuite.scala
index 04bb440f08..f73f0e20f7 100644
--- a/tests/src/test/scala/cats/tests/OneAndSuite.scala
+++ b/tests/src/test/scala/cats/tests/OneAndSuite.scala
@@ -1,11 +1,23 @@
package cats
package tests
-import cats.kernel.laws.discipline.{SemigroupTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, SemigroupTests}
import cats.instances.stream._
import cats.data.{NonEmptyStream, OneAnd}
-import cats.laws.discipline.{ApplicativeTests, SemigroupalTests, ComonadTests, FoldableTests, FunctorTests, MonadTests, NonEmptyTraverseTests, ReducibleTests, SemigroupKTests, SerializableTests, TraverseTests}
+import cats.laws.discipline.{
+ ApplicativeTests,
+ ComonadTests,
+ FoldableTests,
+ FunctorTests,
+ MonadTests,
+ NonEmptyTraverseTests,
+ ReducibleTests,
+ SemigroupKTests,
+ SemigroupalTests,
+ SerializableTests,
+ TraverseTests
+}
import cats.laws.discipline.arbitrary._
class OneAndSuite extends CatsSuite {
@@ -15,19 +27,22 @@ class OneAndSuite extends CatsSuite {
checkAll("OneAnd[Stream, Int]", EqTests[OneAnd[Stream, Int]].eqv)
- checkAll("OneAnd[Stream, Int] with Option", NonEmptyTraverseTests[OneAnd[Stream, ?]].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
+ checkAll("OneAnd[Stream, Int] with Option",
+ NonEmptyTraverseTests[OneAnd[Stream, ?]].nonEmptyTraverse[Option, Int, Int, Int, Int, Option, Option])
checkAll("NonEmptyTraverse[OneAnd[Stream, A]]", SerializableTests.serializable(NonEmptyTraverse[OneAnd[Stream, ?]]))
{
implicit val traverse = OneAnd.catsDataTraverseForOneAnd(ListWrapper.traverse)
- checkAll("OneAnd[ListWrapper, Int] with Option", TraverseTests[OneAnd[ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("OneAnd[ListWrapper, Int] with Option",
+ TraverseTests[OneAnd[ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[OneAnd[ListWrapper, A]]", SerializableTests.serializable(Traverse[OneAnd[ListWrapper, ?]]))
}
checkAll("OneAnd[Stream, Int]", ReducibleTests[OneAnd[Stream, ?]].reducible[Option, Int, Int])
checkAll("Reducible[OneAnd[Stream, ?]]", SerializableTests.serializable(Reducible[OneAnd[Stream, ?]]))
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[OneAnd[ListWrapper, ?]](OneAnd.catsDataFunctorForOneAnd(ListWrapper.functor))
+ implicit val iso = SemigroupalTests.Isomorphisms
+ .invariant[OneAnd[ListWrapper, ?]](OneAnd.catsDataFunctorForOneAnd(ListWrapper.functor))
// Test instances that have more general constraints
{
@@ -80,76 +95,75 @@ class OneAndSuite extends CatsSuite {
test("size is consistent with toList.size") {
forAll { (oa: OneAnd[Vector, Int]) =>
- oa.size should === (oa.toList.size.toLong)
+ oa.size should ===(oa.toList.size.toLong)
}
}
test("Show is not empty and is formatted as expected") {
forAll { (nel: NonEmptyStream[Int]) =>
- nel.show.nonEmpty should === (true)
- nel.show.startsWith("OneAnd(") should === (true)
- nel.show should === (implicitly[Show[NonEmptyStream[Int]]].show(nel))
- nel.show.contains(nel.head.show) should === (true)
+ nel.show.nonEmpty should ===(true)
+ nel.show.startsWith("OneAnd(") should ===(true)
+ nel.show should ===(implicitly[Show[NonEmptyStream[Int]]].show(nel))
+ nel.show.contains(nel.head.show) should ===(true)
}
}
test("Show is formatted correctly") {
val oneAnd = NonEmptyStream("Test")
- oneAnd.show should === ("OneAnd(Test, Stream())")
+ oneAnd.show should ===("OneAnd(Test, Stream())")
}
test("Creating OneAnd + unwrap is identity") {
forAll { (i: Int, tail: Stream[Int]) =>
val stream = i #:: tail
val oneAnd = NonEmptyStream(i, tail: _*)
- stream should === (oneAnd.unwrap)
+ stream should ===(oneAnd.unwrap)
}
}
test("NonEmptyStream#find is consistent with Stream#find") {
forAll { (nel: NonEmptyStream[Int], p: Int => Boolean) =>
val stream = nel.unwrap
- nel.find(p) should === (stream.find(p))
+ nel.find(p) should ===(stream.find(p))
}
}
test("NonEmptyStream#exists is consistent with Stream#exists") {
forAll { (nel: NonEmptyStream[Int], p: Int => Boolean) =>
val stream = nel.unwrap
- nel.exists(p) should === (stream.exists(p))
+ nel.exists(p) should ===(stream.exists(p))
}
}
test("NonEmptyStream#forall is consistent with Stream#forall") {
forAll { (nel: NonEmptyStream[Int], p: Int => Boolean) =>
val stream = nel.unwrap
- nel.forall(p) should === (stream.forall(p))
+ nel.forall(p) should ===(stream.forall(p))
}
}
test("NonEmptyStream#map is consistent with Stream#map") {
forAll { (nel: NonEmptyStream[Int], p: Int => String) =>
val stream = nel.unwrap
- nel.map(p).unwrap should === (stream.map(p))
+ nel.map(p).unwrap should ===(stream.map(p))
}
}
test("NonEmptyStream#nonEmptyPartition remains sorted") {
forAll { (nes: NonEmptyStream[Int], f: Int => Either[String, String]) =>
-
val nesf = nes.map(f)
val sortedStream = (nesf.head #:: nesf.tail).sorted
val sortedNes = OneAnd(sortedStream.head, sortedStream.tail)
val ior = Reducible[NonEmptyStream].nonEmptyPartition(sortedNes)(identity)
- ior.left.map(xs => xs.sorted should === (xs))
- ior.right.map(xs => xs.sorted should === (xs))
+ ior.left.map(xs => xs.sorted should ===(xs))
+ ior.right.map(xs => xs.sorted should ===(xs))
}
}
test("reduceLeft consistent with foldLeft") {
forAll { (nel: NonEmptyStream[Int], f: (Int, Int) => Int) =>
- nel.reduceLeft(f) should === (nel.tail.foldLeft(nel.head)(f))
+ nel.reduceLeft(f) should ===(nel.tail.foldLeft(nel.head)(f))
}
}
@@ -158,19 +172,19 @@ class OneAndSuite extends CatsSuite {
val got = nel.reduceRight(f).value
val last :: rev = nel.unwrap.toList.reverse
val expected = rev.reverse.foldRight(last)((a, b) => f(a, Now(b)).value)
- got should === (expected)
+ got should ===(expected)
}
}
test("reduce consistent with fold") {
forAll { (nel: NonEmptyStream[Int]) =>
- nel.reduce should === (nel.fold)
+ nel.reduce should ===(nel.fold)
}
}
test("reduce consistent with reduceK") {
forAll { (nel: NonEmptyStream[Option[Int]]) =>
- nel.reduce(SemigroupK[Option].algebra[Int]) should === (nel.reduceK)
+ nel.reduce(SemigroupK[Option].algebra[Int]) should ===(nel.reduceK)
}
}
@@ -179,7 +193,7 @@ class OneAndSuite extends CatsSuite {
val expected = nel.tail.foldLeft(Option(f(nel.head))) { (opt, i) =>
opt.map(s => g(s, i))
}
- nel.reduceLeftToOption(f)(g) should === (expected)
+ nel.reduceLeftToOption(f)(g) should ===(expected)
}
}
@@ -190,7 +204,7 @@ class OneAndSuite extends CatsSuite {
val expected = rev.reverse.foldRight(Option(f(last))) { (i, opt) =>
opt.map(s => g(i, Now(s)).value)
}
- got should === (expected)
+ got should ===(expected)
}
}
diff --git a/tests/src/test/scala/cats/tests/OptionSuite.scala b/tests/src/test/scala/cats/tests/OptionSuite.scala
index ae36f20129..e76a681fd9 100644
--- a/tests/src/test/scala/cats/tests/OptionSuite.scala
+++ b/tests/src/test/scala/cats/tests/OptionSuite.scala
@@ -28,11 +28,11 @@ class OptionSuite extends CatsSuite {
checkAll("MonadError[Option, Unit]", SerializableTests.serializable(MonadError[Option, Unit]))
test("show") {
- none[Int].show should === ("None")
- 1.some.show should === ("Some(1)")
+ none[Int].show should ===("None")
+ 1.some.show should ===("Some(1)")
forAll { fs: Option[String] =>
- fs.show should === (fs.toString)
+ fs.show should ===(fs.toString)
}
}
@@ -42,31 +42,23 @@ class OptionSuite extends CatsSuite {
// instances.
test("Kleisli associativity") {
- forAll { (l: Long,
- f: Long => Option[Int],
- g: Int => Option[Char],
- h: Char => Option[String]) =>
+ forAll { (l: Long, f: Long => Option[Int], g: Int => Option[Char], h: Char => Option[String]) =>
val isEq = FlatMapLaws[Option].kleisliAssociativity(f, g, h, l)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("Cokleisli associativity") {
- forAll { (l: Option[Long],
- f: Option[Long] => Int,
- g: Option[Int] => Char,
- h: Option[Char] => String) =>
+ forAll { (l: Option[Long], f: Option[Long] => Int, g: Option[Int] => Char, h: Option[Char] => String) =>
val isEq = CoflatMapLaws[Option].cokleisliAssociativity(f, g, h, l)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("applicative composition") {
- forAll { (fa: Option[Int],
- fab: Option[Int => Long],
- fbc: Option[Long => Char]) =>
+ forAll { (fa: Option[Int], fab: Option[Int => Long], fbc: Option[Long => Char]) =>
val isEq = ApplicativeLaws[Option].applicativeComposition(fa, fab, fbc)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
@@ -75,14 +67,14 @@ class OptionSuite extends CatsSuite {
test("Kleisli left identity") {
forAll { (a: Int, f: Int => Option[Long]) =>
val isEq = monadLaws.kleisliLeftIdentity(a, f)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("Kleisli right identity") {
forAll { (a: Int, f: Int => Option[Long]) =>
val isEq = monadLaws.kleisliRightIdentity(a, f)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
@@ -96,11 +88,11 @@ class OptionSuite extends CatsSuite {
test("map2Eval is lazy") {
val bomb: Eval[Option[Int]] = Later(sys.error("boom"))
- none[Int].map2Eval(bomb)(_ + _).value should === (None)
+ none[Int].map2Eval(bomb)(_ + _).value should ===(None)
}
- test("toOptionT consistency"){
- List(false) should === (1.some.toOptionT[List].isEmpty)
- List(true) should === (Option.empty[Int].toOptionT[List].isEmpty)
+ test("toOptionT consistency") {
+ List(false) should ===(1.some.toOptionT[List].isEmpty)
+ List(true) should ===(Option.empty[Int].toOptionT[List].isEmpty)
}
}
diff --git a/tests/src/test/scala/cats/tests/OptionTSuite.scala b/tests/src/test/scala/cats/tests/OptionTSuite.scala
index d8bb1474ff..9b9e25160d 100644
--- a/tests/src/test/scala/cats/tests/OptionTSuite.scala
+++ b/tests/src/test/scala/cats/tests/OptionTSuite.scala
@@ -9,32 +9,29 @@ import cats.laws.discipline.arbitrary._
import cats.laws.discipline.eq._
class OptionTSuite extends CatsSuite {
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[OptionT[ListWrapper, ?]](OptionT.catsDataFunctorForOptionT(ListWrapper.functor))
+ implicit val iso = SemigroupalTests.Isomorphisms
+ .invariant[OptionT[ListWrapper, ?]](OptionT.catsDataFunctorForOptionT(ListWrapper.functor))
checkAll("OptionT[Eval, ?]", DeferTests[OptionT[Eval, ?]].defer[Int])
checkAll("OptionT[Eval, ?]", FunctorFilterTests[OptionT[Eval, ?]].functorFilter[Int, Int, Int])
-
{
//If a Functor for F is defined
implicit val F = ListWrapper.functor
- checkAll("OptionT[ListWrapper, ?]",
- FunctorFilterTests[OptionT[ListWrapper, ?]].functorFilter[Int, Int, Int])
+ checkAll("OptionT[ListWrapper, ?]", FunctorFilterTests[OptionT[ListWrapper, ?]].functorFilter[Int, Int, Int])
checkAll("FunctorFilter[OptionT[ListWrapper, ?]]",
- SerializableTests.serializable(FunctorFilter[OptionT[ListWrapper, ?]]))
+ SerializableTests.serializable(FunctorFilter[OptionT[ListWrapper, ?]]))
}
-
{
//If a Traverse for F is defined
implicit val F = ListWrapper.traverse
- checkAll("OptionT[ListWrapper, ?]",
- TraverseFilterTests[OptionT[ListWrapper, ?]].traverseFilter[Int, Int, Int])
+ checkAll("OptionT[ListWrapper, ?]", TraverseFilterTests[OptionT[ListWrapper, ?]].traverseFilter[Int, Int, Int])
checkAll("TraverseFilter[OptionT[ListWrapper, ?]]",
- SerializableTests.serializable(TraverseFilter[OptionT[ListWrapper, ?]]))
+ SerializableTests.serializable(TraverseFilter[OptionT[ListWrapper, ?]]))
}
@@ -49,7 +46,8 @@ class OptionTSuite extends CatsSuite {
implicit val F = ListWrapper.partialOrder[Option[Int]]
checkAll("OptionT[ListWrapper, Int]", PartialOrderTests[OptionT[ListWrapper, Int]].partialOrder)
- checkAll("PartialOrder[OptionT[ListWrapper, Int]]", SerializableTests.serializable(PartialOrder[OptionT[ListWrapper, Int]]))
+ checkAll("PartialOrder[OptionT[ListWrapper, Int]]",
+ SerializableTests.serializable(PartialOrder[OptionT[ListWrapper, Int]]))
Eq[OptionT[ListWrapper, Int]]
}
@@ -93,9 +91,10 @@ class OptionTSuite extends CatsSuite {
{
// F has a ContravariantMonoidal
- checkAll("OptionT[Const[String, ?], Int]", ContravariantMonoidalTests[OptionT[Const[String, ?], ?]].contravariantMonoidal[Int, Int, Int])
+ checkAll("OptionT[Const[String, ?], Int]",
+ ContravariantMonoidalTests[OptionT[Const[String, ?], ?]].contravariantMonoidal[Int, Int, Int])
checkAll("ContravariantMonoidal[OptionT[Const[String, ?], Int]]",
- SerializableTests.serializable(ContravariantMonoidal[OptionT[Const[String, ?], ?]]))
+ SerializableTests.serializable(ContravariantMonoidal[OptionT[Const[String, ?], ?]]))
}
{
@@ -128,7 +127,6 @@ class OptionTSuite extends CatsSuite {
implicit val monadError = OptionT.catsDataMonadErrorForOptionT[SEither, String]
-
checkAll("OptionT[Either[String, ?], Int]", MonadErrorTests[OptionT[SEither, ?], String].monadError[Int, Int, Int])
checkAll("MonadError[OptionT[Either[String, ?], ?]]", SerializableTests.serializable(monadError))
@@ -151,7 +149,8 @@ class OptionTSuite extends CatsSuite {
// F has a Traverse
implicit val F = ListWrapper.traverse
- checkAll("OptionT[ListWrapper, Int] with Option", TraverseTests[OptionT[ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("OptionT[ListWrapper, Int] with Option",
+ TraverseTests[OptionT[ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[OptionT[ListWrapper, ?]]", SerializableTests.serializable(Traverse[OptionT[ListWrapper, ?]]))
Foldable[OptionT[ListWrapper, ?]]
@@ -160,7 +159,7 @@ class OptionTSuite extends CatsSuite {
}
{
- // F[Option[A]] has a monoid
+ // F[Option[A]] has a monoid
implicit val FA: Monoid[ListWrapper[Option[Int]]] = ListWrapper.monoid[Option[Int]]
checkAll("OptionT[ListWrapper, Int]", MonoidTests[OptionT[ListWrapper, Int]].monoid)
@@ -174,7 +173,8 @@ class OptionTSuite extends CatsSuite {
implicit val FA: Semigroup[ListWrapper[Option[Int]]] = ListWrapper.semigroup[Option[Int]]
checkAll("OptionT[ListWrapper, Int]", SemigroupTests[OptionT[ListWrapper, Int]].semigroup)
- checkAll("Semigroup[OptionT[ListWrapper, Int]]", SerializableTests.serializable(Semigroup[OptionT[ListWrapper, Int]]))
+ checkAll("Semigroup[OptionT[ListWrapper, Int]]",
+ SerializableTests.serializable(Semigroup[OptionT[ListWrapper, Int]]))
}
{
@@ -186,127 +186,131 @@ class OptionTSuite extends CatsSuite {
test("fold and cata consistent") {
forAll { (o: OptionT[List, Int], s: String, f: Int => String) =>
- o.fold(s)(f) should === (o.cata(s, f))
+ o.fold(s)(f) should ===(o.cata(s, f))
}
}
test("OptionT[Id, A].fold consistent with Option.fold") {
forAll { (o: Option[Int], s: String, f: Int => String) =>
- o.fold(s)(f) should === (OptionT[Id, Int](o).fold(s)(f))
+ o.fold(s)(f) should ===(OptionT[Id, Int](o).fold(s)(f))
}
}
test("OptionT[Id, A].getOrElse consistent with Option.getOrElse") {
forAll { (o: Option[Int], i: Int) =>
- o.getOrElse(i) should === (OptionT[Id, Int](o).getOrElse(i))
+ o.getOrElse(i) should ===(OptionT[Id, Int](o).getOrElse(i))
}
}
test("OptionT[Id, A].getOrElse consistent with Option.getOrElse, with respect to types") {
forAll { (o: Option[Int]) =>
- o.map(Right.apply).getOrElse(Left("error")) should === (OptionT[Id, Int](o).map(Right.apply).getOrElse("error".asLeft[Int]))
+ o.map(Right.apply).getOrElse(Left("error")) should ===(
+ OptionT[Id, Int](o).map(Right.apply).getOrElse("error".asLeft[Int])
+ )
}
}
test("OptionT[Id, A].getOrElseF consistent with Option.getOrElse") {
forAll { (o: Option[Int], i: Int) =>
- o.getOrElse(i) should === (OptionT[Id, Int](o).getOrElseF(i))
+ o.getOrElse(i) should ===(OptionT[Id, Int](o).getOrElseF(i))
}
}
test("OptionT[Id, A].getOrElseF consistent with Option.getOrElse, with respect to types") {
forAll { (o: Option[Int]) =>
- o.map(Right.apply).getOrElse(Left("error")) should === (OptionT[Id, Int](o).map(Right.apply).getOrElseF("error".asLeft[Int]))
+ o.map(Right.apply).getOrElse(Left("error")) should ===(
+ OptionT[Id, Int](o).map(Right.apply).getOrElseF("error".asLeft[Int])
+ )
}
}
test("OptionT[Id, A].collect consistent with Option.collect") {
forAll { (o: Option[Int], f: Int => Option[String]) =>
val p = Function.unlift(f)
- o.collect(p) should === (OptionT[Id, Int](o).collect(p).value)
+ o.collect(p) should ===(OptionT[Id, Int](o).collect(p).value)
}
}
test("OptionT[Id, A].exists consistent with Option.exists") {
forAll { (o: Option[Int], f: Int => Boolean) =>
- o.exists(f) should === (OptionT[Id, Int](o).exists(f))
+ o.exists(f) should ===(OptionT[Id, Int](o).exists(f))
}
}
test("OptionT[Id, A].filter consistent with Option.filter") {
forAll { (o: Option[Int], f: Int => Boolean) =>
- o.filter(f) should === (OptionT[Id, Int](o).filter(f).value)
+ o.filter(f) should ===(OptionT[Id, Int](o).filter(f).value)
}
}
- test("OptionT[Id, A].withFilter consistent with Option.withFilter"){
+ test("OptionT[Id, A].withFilter consistent with Option.withFilter") {
forAll { (o: Option[Int], f: Int => Boolean) =>
- (for {x <- o if f(x)} yield x) should === ((for {x <- OptionT[Id, Int](o) if f(x)} yield x).value)
+ (for { x <- o if f(x) } yield x) should ===((for { x <- OptionT[Id, Int](o) if f(x) } yield x).value)
}
}
test("OptionT[Id, A].filterNot consistent with Option.filterNot") {
forAll { (o: Option[Int], f: Int => Boolean) =>
- o.filterNot(f) should === (OptionT[Id, Int](o).filterNot(f).value)
+ o.filterNot(f) should ===(OptionT[Id, Int](o).filterNot(f).value)
}
}
test("OptionT[Id, A].forall consistent with Option.forall") {
forAll { (o: Option[Int], f: Int => Boolean) =>
- o.forall(f) should === (OptionT[Id, Int](o).forall(f))
+ o.forall(f) should ===(OptionT[Id, Int](o).forall(f))
}
}
test("OptionT[Id, A].isDefined consistent with Option.isDefined") {
forAll { o: Option[Int] =>
- o.isDefined should === (OptionT[Id, Int](o).isDefined)
+ o.isDefined should ===(OptionT[Id, Int](o).isDefined)
}
}
test("OptionT[Id, A].isEmpty consistent with Option.isEmpty") {
forAll { o: Option[Int] =>
- o.isEmpty should === (OptionT[Id, Int](o).isEmpty)
+ o.isEmpty should ===(OptionT[Id, Int](o).isEmpty)
}
}
test("orElse and orElseF consistent") {
forAll { (o1: OptionT[List, Int], o2: OptionT[List, Int]) =>
- o1.orElse(o2) should === (o1.orElseF(o2.value))
+ o1.orElse(o2) should ===(o1.orElseF(o2.value))
}
}
test("flatMap and flatMapF consistent") {
- forAll { (optionT: OptionT[List, Int], f: Int => OptionT[List, Int]) =>
- optionT.flatMap(f) should === (optionT.flatMapF(f(_).value))
+ forAll { (optionT: OptionT[List, Int], f: Int => OptionT[List, Int]) =>
+ optionT.flatMap(f) should ===(optionT.flatMapF(f(_).value))
}
}
test("OptionT[Id, A].toRight consistent with Either.fromOption") {
forAll { (o: OptionT[Id, Int], s: String) =>
- o.toRight(s).value should === (Either.fromOption(o.value, s))
+ o.toRight(s).value should ===(Either.fromOption(o.value, s))
}
}
test("toRight consistent with isDefined") {
forAll { (o: OptionT[List, Int], s: String) =>
- o.toRight(s).isRight should === (o.isDefined)
+ o.toRight(s).isRight should ===(o.isDefined)
}
}
test("toLeft consistent with isDefined") {
forAll { (o: OptionT[List, Int], s: String) =>
- o.toLeft(s).isLeft should === (o.isDefined)
+ o.toLeft(s).isLeft should ===(o.isDefined)
}
}
test("isDefined is negation of isEmpty") {
forAll { (o: OptionT[List, Int]) =>
- o.isDefined should === (o.isEmpty.map(! _))
+ o.isDefined should ===(o.isEmpty.map(!_))
}
}
test("fromOption") {
forAll { (o: Option[Int]) =>
- List(o) should === (OptionT.fromOption[List](o).value)
+ List(o) should ===(OptionT.fromOption[List](o).value)
}
}
@@ -318,42 +322,42 @@ class OptionTSuite extends CatsSuite {
test("show") {
val either: Either[String, Option[Int]] = Either.right(Some(1))
- OptionT[Either[String, ?], Int](either).show should === ("Right(Some(1))")
+ OptionT[Either[String, ?], Int](either).show should ===("Right(Some(1))")
}
test("none") {
- OptionT.none[List, Int] should === (OptionT[List, Int](List(None)))
+ OptionT.none[List, Int] should ===(OptionT[List, Int](List(None)))
}
test("implicit Show[OptionT] instance and explicit show method are consistent") {
forAll { optionT: OptionT[List, Int] =>
- optionT.show should === (implicitly[Show[OptionT[List, Int]]].show(optionT))
+ optionT.show should ===(implicitly[Show[OptionT[List, Int]]].show(optionT))
}
}
test("transform consistent with value.map") {
forAll { (o: OptionT[List, Int], f: Option[Int] => Option[String]) =>
- o.transform(f) should === (OptionT(o.value.map(f)))
+ o.transform(f) should ===(OptionT(o.value.map(f)))
}
}
test("flatTransform consistent with value.flatMap") {
forAll { (o: OptionT[List, Int], f: Option[Int] => List[Option[String]]) =>
- o.flatTransform(f) should === (OptionT(o.value.flatMap(f)))
+ o.flatTransform(f) should ===(OptionT(o.value.flatMap(f)))
}
}
test("mapK consistent with f(value)+pure") {
val f: List ~> Option = λ[List ~> Option](_.headOption)
forAll { (optiont: OptionT[List, Int]) =>
- optiont.mapK(f) should === (OptionT(f(optiont.value)))
+ optiont.mapK(f) should ===(OptionT(f(optiont.value)))
}
}
test("semiflatMap consistent with value.flatMap+f+pure") {
forAll { (o: OptionT[List, Int], f: Int => List[String]) =>
- o.semiflatMap(f) should === (OptionT(o.value.flatMap {
- case None => List(None)
+ o.semiflatMap(f) should ===(OptionT(o.value.flatMap {
+ case None => List(None)
case Some(a) => f(a).map(Some(_))
}))
}
@@ -361,20 +365,20 @@ class OptionTSuite extends CatsSuite {
test("subflatMap consistent with value.map+flatMap") {
forAll { (o: OptionT[List, Int], f: Int => Option[String]) =>
- o.subflatMap(f) should === (OptionT(o.value.map(_.flatMap(f))))
+ o.subflatMap(f) should ===(OptionT(o.value.map(_.flatMap(f))))
}
}
test("mapFilter consistent with subflatMap") {
forAll { (o: OptionT[List, Int], f: Int => Option[String]) =>
- o.mapFilter(f) should === (o.subflatMap(f))
+ o.mapFilter(f) should ===(o.subflatMap(f))
}
}
/**
* Testing that implicit resolution works. If it compiles, the "test" passes.
*/
- object ImplicitResolution{
+ object ImplicitResolution {
Eq[OptionT[List, Int]]
PartialOrder[OptionT[List, Int]]
Order[OptionT[List, Int]]
diff --git a/tests/src/test/scala/cats/tests/OrderSuite.scala b/tests/src/test/scala/cats/tests/OrderSuite.scala
index db973db828..44f4e3c925 100644
--- a/tests/src/test/scala/cats/tests/OrderSuite.scala
+++ b/tests/src/test/scala/cats/tests/OrderSuite.scala
@@ -22,22 +22,22 @@ class OrderSuite extends CatsSuite {
checkAll("Order", ContravariantMonoidalTests[Order].contravariantMonoidal[Int, Int, Int])
checkAll("ContravariantMonoidal[Order]", SerializableTests.serializable(ContravariantMonoidal[Order]))
- test("order ops syntax"){
+ test("order ops syntax") {
forAll { (i: Ord, j: Ord) =>
- (i compare j) should ===(Order.compare(i, j))
- (i min j) should ===(Order.min(i, j))
- (i max j) should === (Order.max(i, j))
- (i comparison j) should ===(Order.comparison(i, j))
+ (i.compare(j)) should ===(Order.compare(i, j))
+ (i.min(j)) should ===(Order.min(i, j))
+ (i.max(j)) should ===(Order.max(i, j))
+ (i.comparison(j)) should ===(Order.comparison(i, j))
// partial order syntax should also work when an Order instance exists
(i > j) should ===(PartialOrder.gt(i, j))
(i >= j) should ===(PartialOrder.gteqv(i, j))
(i < j) should ===(PartialOrder.lt(i, j))
(i <= j) should ===(PartialOrder.lteqv(i, j))
- (i partialCompare j) should ===(PartialOrder.partialCompare(i, j))
- (i tryCompare j) should ===(PartialOrder.tryCompare(i, j))
- (i pmin j) should ===(PartialOrder.pmin(i, j))
- (i pmax j) should ===(PartialOrder.pmax(i, j))
+ (i.partialCompare(j)) should ===(PartialOrder.partialCompare(i, j))
+ (i.tryCompare(j)) should ===(PartialOrder.tryCompare(i, j))
+ (i.pmin(j)) should ===(PartialOrder.pmin(i, j))
+ (i.pmax(j)) should ===(PartialOrder.pmax(i, j))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/OrderingSuite.scala b/tests/src/test/scala/cats/tests/OrderingSuite.scala
index 42e8323de5..1996e01b64 100644
--- a/tests/src/test/scala/cats/tests/OrderingSuite.scala
+++ b/tests/src/test/scala/cats/tests/OrderingSuite.scala
@@ -1,7 +1,6 @@
package cats
package tests
-
import cats.laws.discipline.arbitrary._
import cats.laws.discipline._
import cats.laws.discipline.eq._
@@ -16,8 +15,6 @@ class OrderingSuite extends CatsSuite {
checkAll("Contravariant[Ordering]", ContravariantTests[Ordering].contravariant[Int, Int, Int])
checkAll("Semigroupal[Ordering]", SemigroupalTests[Ordering].semigroupal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Ordering]",
- ContravariantMonoidalTests[Ordering].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Ordering]",
- SerializableTests.serializable(ContravariantMonoidal[Ordering]))
+ checkAll("ContravariantMonoidal[Ordering]", ContravariantMonoidalTests[Ordering].contravariantMonoidal[Int, Int, Int])
+ checkAll("ContravariantMonoidal[Ordering]", SerializableTests.serializable(ContravariantMonoidal[Ordering]))
}
diff --git a/tests/src/test/scala/cats/tests/ParallelSuite.scala b/tests/src/test/scala/cats/tests/ParallelSuite.scala
index 9b93b5fcd7..f99728ac68 100644
--- a/tests/src/test/scala/cats/tests/ParallelSuite.scala
+++ b/tests/src/test/scala/cats/tests/ParallelSuite.scala
@@ -6,7 +6,7 @@ import cats.data.NonEmptyList.ZipNonEmptyList
import cats.data.NonEmptyVector.ZipNonEmptyVector
import cats.data._
import org.scalatest.FunSuite
-import cats.laws.discipline.{ApplicativeErrorTests, NonEmptyParallelTests, SerializableTests, ParallelTests}
+import cats.laws.discipline.{ApplicativeErrorTests, NonEmptyParallelTests, ParallelTests, SerializableTests}
import cats.laws.discipline.eq._
import cats.laws.discipline.arbitrary._
import org.scalacheck.Arbitrary
@@ -15,65 +15,69 @@ import scala.collection.immutable.SortedSet
class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
-
test("ParSequence Either should accumulate errors") {
forAll { es: List[Either[String, Int]] =>
- val lefts = es.collect {
- case Left(e) => e
- }.foldMap(identity)
+ val lefts = es
+ .collect {
+ case Left(e) => e
+ }
+ .foldMap(identity)
- es.parSequence.fold(identity, i => Monoid[String].empty) should === (lefts)
+ es.parSequence.fold(identity, i => Monoid[String].empty) should ===(lefts)
}
}
test("ParSequence Ior should accumulate errors") {
forAll { es: List[Ior[String, Int]] =>
- val lefts = es.map(_.left).collect {
- case Some(e) => e
- }.foldMap(identity)
- es.parSequence.left.getOrElse(Monoid[String].empty) should === (lefts)
+ val lefts = es
+ .map(_.left)
+ .collect {
+ case Some(e) => e
+ }
+ .foldMap(identity)
+ es.parSequence.left.getOrElse(Monoid[String].empty) should ===(lefts)
}
}
test("ParSequence Ior should sequence values") {
forAll { es: List[Ior[String, Int]] =>
- es.parSequence.right should === (es.map(_.toOption).sequence)
+ es.parSequence.right should ===(es.map(_.toOption).sequence)
}
}
test("ParTraverse identity should be equivalent to parSequence") {
forAll { es: List[Either[String, Int]] =>
- es.parTraverse(identity) should === (es.parSequence)
+ es.parTraverse(identity) should ===(es.parSequence)
}
}
test("ParTraverse_ identity should be equivalent to parSequence_") {
forAll { es: SortedSet[Either[String, Int]] =>
- Parallel.parTraverse_(es)(identity) should === (Parallel.parSequence_(es))
+ Parallel.parTraverse_(es)(identity) should ===(Parallel.parSequence_(es))
}
}
test("ParTraverse_ syntax should be equivalent to Parallel.parTraverse_") {
forAll { es: SortedSet[Either[String, Int]] =>
- Parallel.parTraverse_(es)(identity) should === (es.parTraverse_(identity))
+ Parallel.parTraverse_(es)(identity) should ===(es.parTraverse_(identity))
}
}
test("ParSequence_ syntax should be equivalent to Parallel.parSequence_") {
forAll { es: SortedSet[Either[String, Int]] =>
- Parallel.parSequence_(es) should === (es.parSequence_)
+ Parallel.parSequence_(es) should ===(es.parSequence_)
}
}
test("ParNonEmptyTraverse identity should be equivalent to parNonEmptySequence") {
forAll { es: NonEmptyVector[Either[String, Int]] =>
- Parallel.parNonEmptyTraverse(es)(identity) should === (Parallel.parNonEmptySequence(es))
+ Parallel.parNonEmptyTraverse(es)(identity) should ===(Parallel.parNonEmptySequence(es))
}
}
test("ParNonEmptyTraverse_ identity should be equivalent to parNonEmptySequence_") {
forAll { es: NonEmptyList[Either[String, Int]] =>
- Parallel.parNonEmptyTraverse_(es)(identity) should === (Parallel.parNonEmptySequence_(es))
+ Parallel.parNonEmptyTraverse_(es)(identity) should ===(Parallel.parNonEmptySequence_(es))
}
}
@@ -81,19 +85,19 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
forAll { es: List[Either[String, Int]] =>
val f: Int => List[Int] = i => List(i, i + 1)
Parallel.parFlatTraverse(es)(e => e.map(f)) should
- === (es.parTraverse(e => e.map(f)).map(_.flatten))
+ ===(es.parTraverse(e => e.map(f)).map(_.flatten))
}
}
test("ParFlatTraverse identity should be equivalent to parFlatSequence") {
forAll { es: List[Either[String, List[Int]]] =>
- Parallel.parFlatTraverse(es)(identity) should === (Parallel.parFlatSequence(es))
+ Parallel.parFlatTraverse(es)(identity) should ===(Parallel.parFlatSequence(es))
}
}
test("ParFlatSequence syntax should be equivalent to Parallel.parFlatSequence") {
forAll { es: List[Either[String, List[Int]]] =>
- es.parFlatSequence should === (Parallel.parFlatSequence(es))
+ es.parFlatSequence should ===(Parallel.parFlatSequence(es))
}
}
@@ -101,7 +105,7 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
forAll { es: List[Either[String, Int]] =>
val f: Int => List[Int] = i => List(i, i + 1)
Parallel.parFlatTraverse(es)(e => e.map(f)) should
- === (es.parFlatTraverse(e => e.map(f)))
+ ===(es.parFlatTraverse(e => e.map(f)))
}
}
@@ -109,25 +113,25 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
forAll { es: NonEmptyList[Either[String, Int]] =>
val f: Int => NonEmptyList[Int] = i => NonEmptyList.of(i, i + 1)
Parallel.parNonEmptyFlatTraverse(es)(e => e.map(f)) should
- === (Parallel.parNonEmptyTraverse(es)(e => e.map(f)).map(_.flatten))
+ ===(Parallel.parNonEmptyTraverse(es)(e => e.map(f)).map(_.flatten))
}
}
test("ParNonEmptyFlatTraverse identity should be equivalent to parNonEmptyFlatSequence") {
forAll { es: NonEmptyList[Either[String, NonEmptyList[Int]]] =>
- Parallel.parNonEmptyFlatTraverse(es)(identity) should === (Parallel.parNonEmptyFlatSequence(es))
+ Parallel.parNonEmptyFlatTraverse(es)(identity) should ===(Parallel.parNonEmptyFlatSequence(es))
}
}
test("parAp accumulates errors in order") {
val right: Either[String, Int => Int] = Left("Hello")
- Parallel.parAp(right)("World".asLeft) should === (Left("HelloWorld"))
+ Parallel.parAp(right)("World".asLeft) should ===(Left("HelloWorld"))
}
test("parAp2 accumulates errors in order") {
val plus = (_: Int) + (_: Int)
val rightPlus: Either[String, (Int, Int) => Int] = Right(plus)
- Parallel.parAp2(rightPlus)("Hello".asLeft, "World".asLeft) should === (Left("HelloWorld"))
+ Parallel.parAp2(rightPlus)("Hello".asLeft, "World".asLeft) should ===(Left("HelloWorld"))
}
test("Kleisli with Either should accumulate errors") {
@@ -135,7 +139,7 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
val k2: Kleisli[Either[String, ?], String, Int] = Kleisli(s => Left("Boo"))
val k3: Kleisli[Either[String, ?], String, Int] = Kleisli(s => Left("Nope"))
- (List(k1,k2,k3).parSequence.run("Hello")) should === (Left("BooNope"))
+ (List(k1, k2, k3).parSequence.run("Hello")) should ===(Left("BooNope"))
}
@@ -143,55 +147,67 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
val w1: WriterT[Either[String, ?], String, Int] = WriterT.liftF(Left("Too "))
val w2: WriterT[Either[String, ?], String, Int] = WriterT.liftF(Left("bad."))
- ((w1,w2).parMapN(_ + _).value) should === (Left("Too bad."))
+ ((w1, w2).parMapN(_ + _).value) should ===(Left("Too bad."))
}
test("ParMap over NonEmptyList should be consistent with zip") {
forAll { (as: NonEmptyList[Int], bs: NonEmptyList[Int], cs: NonEmptyList[Int]) =>
- (as, bs, cs).parMapN(_ + _ + _) should === (as.zipWith(bs)(_ + _).zipWith(cs)(_ + _))
+ (as, bs, cs).parMapN(_ + _ + _) should ===(as.zipWith(bs)(_ + _).zipWith(cs)(_ + _))
}
}
test("ParMap over NonEmptyVector should be consistent with zip") {
forAll { (as: NonEmptyVector[Int], bs: NonEmptyVector[Int], cs: NonEmptyVector[Int]) =>
- (as, bs, cs).parMapN(_ + _ + _) should === (as.zipWith(bs)(_ + _).zipWith(cs)(_ + _))
+ (as, bs, cs).parMapN(_ + _ + _) should ===(as.zipWith(bs)(_ + _).zipWith(cs)(_ + _))
}
}
test("ParMap over List should be consistent with zip") {
forAll { (as: List[Int], bs: List[Int], cs: List[Int]) =>
- val zipped = as.zip(bs).map {
- case (a, b) => a + b
- }.zip(cs).map {
- case (a, b) => a + b
- }
+ val zipped = as
+ .zip(bs)
+ .map {
+ case (a, b) => a + b
+ }
+ .zip(cs)
+ .map {
+ case (a, b) => a + b
+ }
- (as, bs, cs).parMapN(_ + _ + _) should === (zipped)
+ (as, bs, cs).parMapN(_ + _ + _) should ===(zipped)
}
}
test("ParMap over Vector should be consistent with zip") {
forAll { (as: Vector[Int], bs: Vector[Int], cs: Vector[Int]) =>
- val zipped = as.zip(bs).map {
- case (a, b) => a + b
- }.zip(cs).map {
- case (a, b) => a + b
- }
+ val zipped = as
+ .zip(bs)
+ .map {
+ case (a, b) => a + b
+ }
+ .zip(cs)
+ .map {
+ case (a, b) => a + b
+ }
- (as, bs, cs).parMapN(_ + _ + _) should === (zipped)
+ (as, bs, cs).parMapN(_ + _ + _) should ===(zipped)
}
}
test("ParMap over Stream should be consistent with zip") {
forAll { (as: Stream[Int], bs: Stream[Int], cs: Stream[Int]) =>
- val zipped = as.zip(bs).map {
- case (a, b) => a + b
- }.zip(cs).map {
- case (a, b) => a + b
- }
+ val zipped = as
+ .zip(bs)
+ .map {
+ case (a, b) => a + b
+ }
+ .zip(cs)
+ .map {
+ case (a, b) => a + b
+ }
- (as, bs, cs).parMapN(_ + _ + _) should === (zipped)
+ (as, bs, cs).parMapN(_ + _ + _) should ===(zipped)
}
}
@@ -221,28 +237,28 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
test("ParTupled of Stream should be consistent with ParMap of Tuple.apply") {
forAll { (fa: Stream[Int], fb: Stream[Int], fc: Stream[Int], fd: Stream[Int]) =>
- (fa, fb, fc, fd).parTupled should === ((fa, fb, fc, fd).parMapN(Tuple4.apply))
+ (fa, fb, fc, fd).parTupled should ===((fa, fb, fc, fd).parMapN(Tuple4.apply))
}
}
test("ParTupled of List should be consistent with zip") {
forAll { (fa: List[Int], fb: List[Int], fc: List[Int], fd: List[Int]) =>
- (fa, fb, fc, fd).parTupled should === (fa.zip(fb).zip(fc).zip(fd).map { case (((a, b), c), d) => (a, b, c, d) })
+ (fa, fb, fc, fd).parTupled should ===(fa.zip(fb).zip(fc).zip(fd).map { case (((a, b), c), d) => (a, b, c, d) })
}
}
test("ParTupled of Vector should be consistent with zip") {
forAll { (fa: Vector[Int], fb: Vector[Int], fc: Vector[Int], fd: Vector[Int]) =>
- (fa, fb, fc, fd).parTupled should === (fa.zip(fb).zip(fc).zip(fd).map { case (((a, b), c), d) => (a, b, c, d) })
+ (fa, fb, fc, fd).parTupled should ===(fa.zip(fb).zip(fc).zip(fd).map { case (((a, b), c), d) => (a, b, c, d) })
}
}
test("ParTupled of Stream should be consistent with zip") {
forAll { (fa: Stream[Int], fb: Stream[Int], fc: Stream[Int], fd: Stream[Int]) =>
- (fa, fb, fc, fd).parTupled should === (fa.zip(fb).zip(fc).zip(fd).map { case (((a, b), c), d) => (a, b, c, d) })
+ (fa, fb, fc, fd).parTupled should ===(fa.zip(fb).zip(fc).zip(fd).map { case (((a, b), c), d) => (a, b, c, d) })
}
}
-
+
test("IorT leverages parallel effect instances when it exists") {
case class Marker(value: String) extends Exception("marker") {
override def fillInStackTrace: Throwable = null
@@ -251,7 +267,7 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
def checkMarker[A](f: => A): Option[String] =
try { f; None } catch {
case marker: Marker => marker.value.some
- case _: Throwable => None
+ case _: Throwable => None
}
final case class Effect[A](value: A)
@@ -271,10 +287,9 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
def monad: Monad[Effect] = monadInstance
}
- val iorts: List[IorT[Effect, String, Int]] = List(
- IorT.leftT("hello")(monadInstance),
- IorT.bothT(" world", 404)(monadInstance),
- IorT.rightT(123)(monadInstance))
+ val iorts: List[IorT[Effect, String, Int]] = List(IorT.leftT("hello")(monadInstance),
+ IorT.bothT(" world", 404)(monadInstance),
+ IorT.rightT(123)(monadInstance))
val resultSansInstance = {
implicit val ev0 = monadInstance
@@ -286,41 +301,67 @@ class ParallelSuite extends CatsSuite with ApplicativeErrorForEitherTest {
checkMarker(iorts.parSequence)
}
- resultSansInstance should === ("sequential".some)
- resultWithInstance should === ("parallel".some)
- }
-
- checkAll("Parallel[Either[String, ?], Validated[String, ?]]", ParallelTests[Either[String, ?], Validated[String, ?]].parallel[Int, String])
- checkAll("Parallel[Ior[String, ?], Ior[String, ?]]", ParallelTests[Ior[String, ?], Ior[String, ?]].parallel[Int, String])
- checkAll("Parallel[IorT[F, String, ?], IorT[F, String, ?]] with parallel effect", ParallelTests[IorT[Either[String, ?], String, ?], IorT[Validated[String, ?], String, ?]].parallel[Int, String])
- checkAll("Parallel[IorT[F, String, ?], IorT[F, String, ?]] with sequential effect", ParallelTests[IorT[Option, String, ?], IorT[Option, String, ?]].parallel[Int, String])
- checkAll("Parallel[OptionT[M, ?], Nested[F, Option, ?]]", ParallelTests[OptionT[Either[String, ?], ?], Nested[Validated[String, ?], Option, ?]].parallel[Int, String])
- checkAll("Parallel[EitherT[M, String, ?], Nested[F, Validated[String, ?], ?]]", ParallelTests[EitherT[Either[String, ?], String, ?], Nested[Validated[String, ?], Validated[String, ?], ?]].parallel[Int, String])
- checkAll("Parallel[EitherT[Option, String, ?], Nested[Option, Validated[String, ?], ?]]", ParallelTests[EitherT[Option, String, ?], Nested[Option, Validated[String, ?], ?]].parallel[Int, String])
- checkAll("Parallel[WriterT[M, Int, ?], WriterT[F, Int, ?]]", ParallelTests[WriterT[Either[String, ?], Int, ?], WriterT[Validated[String, ?], Int, ?]].parallel[Int, String])
- checkAll("NonEmptyParallel[Vector, ZipVector]", NonEmptyParallelTests[Vector, ZipVector].nonEmptyParallel[Int, String])
+ resultSansInstance should ===("sequential".some)
+ resultWithInstance should ===("parallel".some)
+ }
+
+ checkAll("Parallel[Either[String, ?], Validated[String, ?]]",
+ ParallelTests[Either[String, ?], Validated[String, ?]].parallel[Int, String])
+ checkAll("Parallel[Ior[String, ?], Ior[String, ?]]",
+ ParallelTests[Ior[String, ?], Ior[String, ?]].parallel[Int, String])
+ checkAll(
+ "Parallel[IorT[F, String, ?], IorT[F, String, ?]] with parallel effect",
+ ParallelTests[IorT[Either[String, ?], String, ?], IorT[Validated[String, ?], String, ?]].parallel[Int, String]
+ )
+ checkAll(
+ "Parallel[IorT[F, String, ?], IorT[F, String, ?]] with sequential effect",
+ ParallelTests[IorT[Option, String, ?], IorT[Option, String, ?]].parallel[Int, String]
+ )
+ checkAll("Parallel[OptionT[M, ?], Nested[F, Option, ?]]",
+ ParallelTests[OptionT[Either[String, ?], ?], Nested[Validated[String, ?], Option, ?]].parallel[Int, String])
+ checkAll(
+ "Parallel[EitherT[M, String, ?], Nested[F, Validated[String, ?], ?]]",
+ ParallelTests[EitherT[Either[String, ?], String, ?], Nested[Validated[String, ?], Validated[String, ?], ?]]
+ .parallel[Int, String]
+ )
+ checkAll(
+ "Parallel[EitherT[Option, String, ?], Nested[Option, Validated[String, ?], ?]]",
+ ParallelTests[EitherT[Option, String, ?], Nested[Option, Validated[String, ?], ?]].parallel[Int, String]
+ )
+ checkAll(
+ "Parallel[WriterT[M, Int, ?], WriterT[F, Int, ?]]",
+ ParallelTests[WriterT[Either[String, ?], Int, ?], WriterT[Validated[String, ?], Int, ?]].parallel[Int, String]
+ )
+ checkAll("NonEmptyParallel[Vector, ZipVector]",
+ NonEmptyParallelTests[Vector, ZipVector].nonEmptyParallel[Int, String])
checkAll("NonEmptyParallel[List, ZipList]", NonEmptyParallelTests[List, ZipList].nonEmptyParallel[Int, String])
// Can't test Parallel here, as Applicative[ZipStream].pure doesn't terminate
checkAll("Parallel[Stream, ZipStream]", NonEmptyParallelTests[Stream, ZipStream].nonEmptyParallel[Int, String])
- checkAll("NonEmptyParallel[NonEmptyVector, ZipNonEmptyVector]", NonEmptyParallelTests[NonEmptyVector, ZipNonEmptyVector].nonEmptyParallel[Int, String])
- checkAll("NonEmptyParallel[NonEmptyList, ZipNonEmptyList]", NonEmptyParallelTests[NonEmptyList, ZipNonEmptyList].nonEmptyParallel[Int, String])
- checkAll("Parallel[NonEmptyStream, OneAnd[ZipStream, ?]", ParallelTests[NonEmptyStream, OneAnd[ZipStream, ?]].parallel[Int, String])
-
+ checkAll("NonEmptyParallel[NonEmptyVector, ZipNonEmptyVector]",
+ NonEmptyParallelTests[NonEmptyVector, ZipNonEmptyVector].nonEmptyParallel[Int, String])
+ checkAll("NonEmptyParallel[NonEmptyList, ZipNonEmptyList]",
+ NonEmptyParallelTests[NonEmptyList, ZipNonEmptyList].nonEmptyParallel[Int, String])
+ checkAll("Parallel[NonEmptyStream, OneAnd[ZipStream, ?]",
+ ParallelTests[NonEmptyStream, OneAnd[ZipStream, ?]].parallel[Int, String])
checkAll("Parallel[Id, Id]", ParallelTests[Id, Id].parallel[Int, String])
- checkAll("NonEmptyParallel[NonEmptyList, ZipNonEmptyList]", SerializableTests.serializable(NonEmptyParallel[NonEmptyList, ZipNonEmptyList]))
+ checkAll("NonEmptyParallel[NonEmptyList, ZipNonEmptyList]",
+ SerializableTests.serializable(NonEmptyParallel[NonEmptyList, ZipNonEmptyList]))
- checkAll("Parallel[Either[String, ?], Validated[String, ?]]", SerializableTests.serializable(Parallel[Either[String, ?], Validated[String, ?]]))
+ checkAll("Parallel[Either[String, ?], Validated[String, ?]]",
+ SerializableTests.serializable(Parallel[Either[String, ?], Validated[String, ?]]))
{
implicit def kleisliEq[F[_], A, B](implicit A: Arbitrary[A], FB: Eq[F[B]]): Eq[Kleisli[F, A, B]] =
Eq.by[Kleisli[F, A, B], A => F[B]](_.run)
- checkAll("Parallel[KlesliT[M, ?], Nested[F, Option, ?]]", ParallelTests[Kleisli[Either[String, ?], Int, ?], Kleisli[Validated[String, ?], Int, ?]].parallel[Int, String])
+ checkAll(
+ "Parallel[KlesliT[M, ?], Nested[F, Option, ?]]",
+ ParallelTests[Kleisli[Either[String, ?], Int, ?], Kleisli[Validated[String, ?], Int, ?]].parallel[Int, String]
+ )
}
-
}
trait ApplicativeErrorForEitherTest extends FunSuite with Discipline {
@@ -337,6 +378,7 @@ trait ApplicativeErrorForEitherTest extends FunSuite with Discipline {
{
implicit val parVal = Parallel.applicativeError[Either[String, ?], Validated[String, ?], String]
- checkAll("ApplicativeError[Validated[String, Int]]", ApplicativeErrorTests[Validated[String, ?], String].applicativeError[Int, Int, Int])
+ checkAll("ApplicativeError[Validated[String, Int]]",
+ ApplicativeErrorTests[Validated[String, ?], String].applicativeError[Int, Int, Int])
}
}
diff --git a/tests/src/test/scala/cats/tests/PartialOrderSuite.scala b/tests/src/test/scala/cats/tests/PartialOrderSuite.scala
index 5db795ecac..a2b5fdf730 100644
--- a/tests/src/test/scala/cats/tests/PartialOrderSuite.scala
+++ b/tests/src/test/scala/cats/tests/PartialOrderSuite.scala
@@ -14,9 +14,8 @@ class PartialOrderSuite extends CatsSuite {
* Check that two partial compare results are "the same".
* This works around the fact that `NaN` is not equal to itself.
*/
- def checkPartialCompare(res1: Double, res2: Double): Assertion = {
+ def checkPartialCompare(res1: Double, res2: Double): Assertion =
(res1 == res2 || (res1.isNaN && res2.isNaN)) should ===(true)
- }
{
Invariant[PartialOrder]
@@ -46,10 +45,10 @@ class PartialOrderSuite extends CatsSuite {
(i < j) should ===(PartialOrder.lt(i, j))
(i <= j) should ===(PartialOrder.lteqv(i, j))
- checkPartialCompare(i partialCompare j, PartialOrder.partialCompare(i, j))
- (i tryCompare j) should ===(PartialOrder.tryCompare(i, j))
- (i pmin j) should ===(PartialOrder.pmin(i, j))
- (i pmax j) should ===(PartialOrder.pmax(i, j))
+ checkPartialCompare(i.partialCompare(j), PartialOrder.partialCompare(i, j))
+ (i.tryCompare(j)) should ===(PartialOrder.tryCompare(i, j))
+ (i.pmin(j)) should ===(PartialOrder.pmin(i, j))
+ (i.pmax(j)) should ===(PartialOrder.pmax(i, j))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/PartialOrderingSuite.scala b/tests/src/test/scala/cats/tests/PartialOrderingSuite.scala
index 4e1c99d657..631f297537 100644
--- a/tests/src/test/scala/cats/tests/PartialOrderingSuite.scala
+++ b/tests/src/test/scala/cats/tests/PartialOrderingSuite.scala
@@ -1,7 +1,6 @@
package cats
package tests
-
import cats.laws.discipline.arbitrary._
import cats.laws.discipline._
import cats.laws.discipline.eq._
@@ -18,5 +17,6 @@ class PartialOrderingSuite extends CatsSuite {
checkAll("Contravariant[PartialOrdering]", SerializableTests.serializable(Contravariant[PartialOrdering]))
checkAll("PartialOrdering[Int]", ContravariantMonoidalTests[PartialOrdering].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[PartialOrdering]", SerializableTests.serializable(ContravariantMonoidal[PartialOrdering]))
+ checkAll("ContravariantMonoidal[PartialOrdering]",
+ SerializableTests.serializable(ContravariantMonoidal[PartialOrdering]))
}
diff --git a/tests/src/test/scala/cats/tests/QueueSuite.scala b/tests/src/test/scala/cats/tests/QueueSuite.scala
index aa75a474d2..a632022465 100644
--- a/tests/src/test/scala/cats/tests/QueueSuite.scala
+++ b/tests/src/test/scala/cats/tests/QueueSuite.scala
@@ -3,7 +3,14 @@ package tests
import scala.collection.immutable.Queue
-import cats.laws.discipline.{CoflatMapTests, MonadTests, AlternativeTests, SerializableTests, TraverseTests, SemigroupalTests}
+import cats.laws.discipline.{
+ AlternativeTests,
+ CoflatMapTests,
+ MonadTests,
+ SemigroupalTests,
+ SerializableTests,
+ TraverseTests
+}
class QueueSuite extends CatsSuite {
checkAll("Queue[Int]", SemigroupalTests[Queue].semigroupal[Int, Int, Int])
@@ -22,7 +29,7 @@ class QueueSuite extends CatsSuite {
checkAll("Traverse[Queue]", SerializableTests.serializable(Traverse[Queue]))
test("show") {
- Queue(1, 2, 3).show should === ("Queue(1, 2, 3)")
- Queue.empty[Int].show should === ("Queue()")
+ Queue(1, 2, 3).show should ===("Queue(1, 2, 3)")
+ Queue.empty[Int].show should ===("Queue()")
}
}
diff --git a/tests/src/test/scala/cats/tests/ReducibleSuite.scala b/tests/src/test/scala/cats/tests/ReducibleSuite.scala
index b7d3afe4f5..d5afd6f4bc 100644
--- a/tests/src/test/scala/cats/tests/ReducibleSuite.scala
+++ b/tests/src/test/scala/cats/tests/ReducibleSuite.scala
@@ -11,9 +11,9 @@ class ReducibleSuiteAdditional extends CatsSuite {
if (x == 0) None else Some(acc + x)
val n = 100000L
- val expected = n*(n+1)/2
+ val expected = n * (n + 1) / 2
val actual = (1L to n).toList.toNel.flatMap(_.reduceLeftM(Option.apply)(nonzero))
- actual should === (Some(expected))
+ actual should ===(Some(expected))
}
// exists method written in terms of reduceRightTo
@@ -27,9 +27,9 @@ class ReducibleSuiteAdditional extends CatsSuite {
def split[A](nel: NonEmptyList[A]): (A, List[A]) = (nel.head, nel.tail)
}
val nel = NonEmptyList.of(1, 2, 3)
- R.get(nel)(1L) should === (nel.get(1L))
- R.size(nel) should === (nel.size.toLong)
- R.get(nel)(4L) should === (None)
+ R.get(nel)(1L) should ===(nel.get(1L))
+ R.size(nel) should ===(nel.size.toLong)
+ R.get(nel)(4L) should ===(None)
}
test("Reducible[NonEmptyList]") {
@@ -39,20 +39,22 @@ class ReducibleSuiteAdditional extends CatsSuite {
val tail = (2 to 10).toList
val total = 1 + tail.sum
val nel = NonEmptyList(1, tail)
- R.reduceLeft(nel)(_ + _) should === (total)
- R.reduceRight(nel)((x, ly) => ly.map(x + _)).value should === (total)
- R.reduce(nel) should === (total)
+ R.reduceLeft(nel)(_ + _) should ===(total)
+ R.reduceRight(nel)((x, ly) => ly.map(x + _)).value should ===(total)
+ R.reduce(nel) should ===(total)
// more basic checks
val names = NonEmptyList.of("Aaron", "Betty", "Calvin", "Deirdra")
val totalLength = names.toList.map(_.length).sum
- R.reduceLeftTo(names)(_.length)((sum, s) => s.length + sum) should === (totalLength)
- R.reduceMap(names)(_.length) should === (totalLength)
+ R.reduceLeftTo(names)(_.length)((sum, s) => s.length + sum) should ===(totalLength)
+ R.reduceMap(names)(_.length) should ===(totalLength)
val sumLeftM = R.reduceLeftM(names)(Some(_): Option[String]) { (acc, x) =>
(Some(acc + x): Option[String])
}
assert(sumLeftM == Some("AaronBettyCalvinDeirdra"))
- val sumMapM = R.reduceMapM(names) { x => (Some(x): Option[String]) }
+ val sumMapM = R.reduceMapM(names) { x =>
+ (Some(x): Option[String])
+ }
assert(sumMapM == Some("AaronBettyCalvinDeirdra"))
val isNotCalvin: String => Option[String] =
x => if (x == "Calvin") None else Some(x)
@@ -70,9 +72,9 @@ class ReducibleSuiteAdditional extends CatsSuite {
}
-abstract class ReducibleSuite[F[_]: Reducible](name: String)(
- implicit ArbFInt: Arbitrary[F[Int]],
- ArbFString: Arbitrary[F[String]]) extends FoldableSuite[F](name) {
+abstract class ReducibleSuite[F[_]: Reducible](name: String)(implicit ArbFInt: Arbitrary[F[Int]],
+ ArbFString: Arbitrary[F[String]])
+ extends FoldableSuite[F](name) {
def range(start: Long, endInclusive: Long): F[Long]
@@ -81,14 +83,14 @@ abstract class ReducibleSuite[F[_]: Reducible](name: String)(
if (x == 0) None else Some(acc + x)
val n = 100000L
- val expected = n*(n+1)/2
+ val expected = n * (n + 1) / 2
val actual = range(1L, n).reduceLeftM(Option.apply)(nonzero)
- actual should === (Some(expected))
+ actual should ===(Some(expected))
}
test(s"Reducible[$name].toNonEmptyList/toList consistency") {
forAll { fa: F[Int] =>
- fa.toList.toNel should === (Some(fa.toNonEmptyList))
+ fa.toList.toNel should ===(Some(fa.toNonEmptyList))
}
}
@@ -98,24 +100,23 @@ abstract class ReducibleSuite[F[_]: Reducible](name: String)(
}
}
-
test("Reducible#nonEmptyPartition retains size") {
forAll { (fi: F[Int], f: Int => Either[String, String]) =>
val folded = fi.nonEmptyPartition(f).fold(identity, identity, _ ++ _.toList)
- folded.size.toLong should === (fi.size)
+ folded.size.toLong should ===(fi.size)
}
}
test("Reducible#nonEmptyPartition to one side is identity") {
forAll { (fi: F[Int], f: Int => String) =>
- val g: Int => Either[Double, String] = f andThen Right.apply
- val h: Int => Either[String, Double] = f andThen Left.apply
+ val g: Int => Either[Double, String] = f.andThen(Right.apply)
+ val h: Int => Either[String, Double] = f.andThen(Left.apply)
val withG = fi.nonEmptyPartition(g).right.getOrElse(NonEmptyList.one(""))
- withG should === (Reducible[F].toNonEmptyList(fi).map(f))
+ withG should ===(Reducible[F].toNonEmptyList(fi).map(f))
val withH = fi.nonEmptyPartition(h).left.getOrElse(NonEmptyList.one(""))
- withH should === (Reducible[F].toNonEmptyList(fi).map(f))
+ withH should ===(Reducible[F].toNonEmptyList(fi).map(f))
}
}
diff --git a/tests/src/test/scala/cats/tests/RegressionSuite.scala b/tests/src/test/scala/cats/tests/RegressionSuite.scala
index b5b9f28803..261b1f5139 100644
--- a/tests/src/test/scala/cats/tests/RegressionSuite.scala
+++ b/tests/src/test/scala/cats/tests/RegressionSuite.scala
@@ -10,13 +10,17 @@ class RegressionSuite extends CatsSuite {
// not stack safe, very minimal, not for actual use
case class State[S, A](run: S => (A, S)) { self =>
def map[B](f: A => B): State[S, B] =
- State({ s => val (a, s2) = self.run(s); (f(a), s2) })
+ State({ s =>
+ val (a, s2) = self.run(s); (f(a), s2)
+ })
def flatMap[B](f: A => State[S, B]): State[S, B] =
- State({ s => val (a, s2) = self.run(s); f(a).run(s2) })
+ State({ s =>
+ val (a, s2) = self.run(s); f(a).run(s2)
+ })
}
object State {
- implicit def instance[S]: Monad[State[S, ?]] = new Monad[State[S, ?]] with StackSafeMonad[State[S, ?]] { // lies!
+ implicit def instance[S]: Monad[State[S, ?]] = new Monad[State[S, ?]] with StackSafeMonad[State[S, ?]] { // lies!
def pure[A](a: A): State[S, A] = State(s => (a, s))
def flatMap[A, B](sa: State[S, A])(f: A => State[S, B]): State[S, B] = sa.flatMap(f)
}
@@ -38,48 +42,57 @@ class RegressionSuite extends CatsSuite {
// test result order
val ons = List(Option(1), Option(2), Option(3))
- Traverse[List].sequence(ons) should === (Some(List(1, 2, 3)))
+ Traverse[List].sequence(ons) should ===(Some(List(1, 2, 3)))
// test order of effects using a contrived, unsafe state monad.
val names = List("Alice", "Bob", "Claire")
val allocated = names.map(alloc)
- val state = Traverse[List].sequence[State[Int, ?],Person](allocated)
+ val state = Traverse[List].sequence[State[Int, ?], Person](allocated)
val (people, counter) = state.run(0)
- people should === (List(Person(0, "Alice"), Person(1, "Bob"), Person(2, "Claire")))
- counter should === (3)
+ people should ===(List(Person(0, "Alice"), Person(1, "Bob"), Person(2, "Claire")))
+ counter should ===(3)
// ensure that side-effects occurred in "correct" order
- buf.toList should === (names)
+ buf.toList should ===(names)
}
test("#167: confirm ap2 order") {
- val twelve = Apply[State[String, ?]].ap2(State.instance[String].pure((_: Unit, _: Unit) => ()))(
- State[String, Unit](s => ((), s + "1")),
- State[String, Unit](s => ((), s + "2"))
- ).run("")._2
- twelve should === ("12")
+ val twelve = Apply[State[String, ?]]
+ .ap2(State.instance[String].pure((_: Unit, _: Unit) => ()))(
+ State[String, Unit](s => ((), s + "1")),
+ State[String, Unit](s => ((), s + "2"))
+ )
+ .run("")
+ ._2
+ twelve should ===("12")
}
test("#167: confirm map2 order") {
- val twelve = Apply[State[String, ?]].map2(
- State[String, Unit](s => ((), s + "1")),
- State[String, Unit](s => ((), s + "2"))
- )((_: Unit, _: Unit) => ()).run("")._2
- twelve should === ("12")
+ val twelve = Apply[State[String, ?]]
+ .map2(
+ State[String, Unit](s => ((), s + "1")),
+ State[String, Unit](s => ((), s + "2"))
+ )((_: Unit, _: Unit) => ())
+ .run("")
+ ._2
+ twelve should ===("12")
}
test("#167: confirm map3 order") {
- val oneTwoThree = Apply[State[String, ?]].map3(
- State[String, Unit](s => ((), s + "1")),
- State[String, Unit](s => ((), s + "2")),
- State[String, Unit](s => ((), s + "3"))
- )((_: Unit, _: Unit, _: Unit) => ()).run("")._2
- oneTwoThree should === ("123")
+ val oneTwoThree = Apply[State[String, ?]]
+ .map3(
+ State[String, Unit](s => ((), s + "1")),
+ State[String, Unit](s => ((), s + "2")),
+ State[String, Unit](s => ((), s + "3"))
+ )((_: Unit, _: Unit, _: Unit) => ())
+ .run("")
+ ._2
+ oneTwoThree should ===("123")
}
test("#500: foldMap - traverse consistency") {
assert(
- List(1,2,3).traverse(i => Const.of[List[Int]](List(i))).getConst == List(1,2,3).foldMap(List(_))
+ List(1, 2, 3).traverse(i => Const.of[List[Int]](List(i))).getConst == List(1, 2, 3).foldMap(List(_))
)
}
@@ -91,51 +104,50 @@ class RegressionSuite extends CatsSuite {
}
def checkAndResetCount(expected: Int): Unit = {
- count should === (expected)
+ count should ===(expected)
count = 0
}
- List(1,2,6,8).traverse(validate) should === (Either.left("6 is greater than 5"))
+ List(1, 2, 6, 8).traverse(validate) should ===(Either.left("6 is greater than 5"))
// shouldn't have ever evaluted validate(8)
checkAndResetCount(3)
- Stream(1,2,6,8).traverse(validate) should === (Either.left("6 is greater than 5"))
+ Stream(1, 2, 6, 8).traverse(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
type StringMap[A] = SortedMap[String, A]
val intMap: StringMap[Int] = SortedMap("A" -> 1, "B" -> 2, "C" -> 6, "D" -> 8)
- intMap.traverse(validate) should === (Either.left("6 is greater than 5"))
+ intMap.traverse(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- NonEmptyList.of(1,2,6,8).traverse(validate) should === (Either.left("6 is greater than 5"))
+ NonEmptyList.of(1, 2, 6, 8).traverse(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- NonEmptyList.of(6,8).traverse(validate) should === (Either.left("6 is greater than 5"))
+ NonEmptyList.of(6, 8).traverse(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(1)
- Vector(1,2,6,8).traverse(validate) should === (Either.left("6 is greater than 5"))
+ Vector(1, 2, 6, 8).traverse(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- List(1,2,6,8).traverse_(validate) should === (Either.left("6 is greater than 5"))
+ List(1, 2, 6, 8).traverse_(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- Stream(1,2,6,8).traverse_(validate) should === (Either.left("6 is greater than 5"))
+ Stream(1, 2, 6, 8).traverse_(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- Vector(1,2,6,8).traverse_(validate) should === (Either.left("6 is greater than 5"))
+ Vector(1, 2, 6, 8).traverse_(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- NonEmptyList.of(1,2,6,7,8).traverse_(validate) should === (Either.left("6 is greater than 5"))
+ NonEmptyList.of(1, 2, 6, 7, 8).traverse_(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(3)
- NonEmptyList.of(6,7,8).traverse_(validate) should === (Either.left("6 is greater than 5"))
+ NonEmptyList.of(6, 7, 8).traverse_(validate) should ===(Either.left("6 is greater than 5"))
checkAndResetCount(1)
}
test("#2022 EitherT syntax no long works the old way") {
import data._
-
EitherT.right[String](Option(1)).handleErrorWith((_: String) => EitherT.pure(2))
{
@@ -143,7 +155,6 @@ class RegressionSuite extends CatsSuite {
EitherT.right[String](Option(1)).handleErrorWith((_: Unit) => EitherT.pure(2))
}
-
}
}
diff --git a/tests/src/test/scala/cats/tests/RepresentableStoreSuite.scala b/tests/src/test/scala/cats/tests/RepresentableStoreSuite.scala
index 2a9b08294c..ea6a9dd171 100644
--- a/tests/src/test/scala/cats/tests/RepresentableStoreSuite.scala
+++ b/tests/src/test/scala/cats/tests/RepresentableStoreSuite.scala
@@ -16,24 +16,29 @@ class RepresentableStoreSuite extends CatsSuite {
implicit val arbStore = catsLawsArbitraryForRepresentableStore[λ[P => (P, P)], Boolean, Int]
implicit val cogenStore = catsLawsCogenForRepresentableStore[λ[P => (P, P)], Boolean, Int]
implicit val eqStore = cats.laws.discipline.eq.catsLawsEqForRepresentableStore[λ[P => (P, P)], Boolean, Int]
- implicit val eqStoreStore = cats.laws.discipline.eq.catsLawsEqForRepresentableStore[λ[P => (P, P)], Boolean, RepresentableStore[λ[P => (P, P)], Boolean, Int]]
- implicit val eqStoreStoreStore = cats.laws.discipline.eq.catsLawsEqForRepresentableStore[λ[P => (P, P)], Boolean, RepresentableStore[λ[P => (P, P)], Boolean, RepresentableStore[λ[P => (P, P)], Boolean, Int]]]
- checkAll("Comonad[RepresentableStore[λ[P => (P, P)], Boolean, ?]]", ComonadTests[RepresentableStore[λ[P => (P, P)], Boolean, ?]].comonad[Int, Int, Int])
-
- checkAll("Comonad[RepresentableStore[λ[P => (P, P)], Boolean, ?]]", SerializableTests.serializable(Comonad[RepresentableStore[λ[P => (P, P)], Boolean, ?]]))
+ implicit val eqStoreStore = cats.laws.discipline.eq
+ .catsLawsEqForRepresentableStore[λ[P => (P, P)], Boolean, RepresentableStore[λ[P => (P, P)], Boolean, Int]]
+ implicit val eqStoreStoreStore =
+ cats.laws.discipline.eq.catsLawsEqForRepresentableStore[λ[P => (P, P)], Boolean, RepresentableStore[λ[
+ P => (P, P)
+ ], Boolean, RepresentableStore[λ[P => (P, P)], Boolean, Int]]]
+ checkAll("Comonad[RepresentableStore[λ[P => (P, P)], Boolean, ?]]",
+ ComonadTests[RepresentableStore[λ[P => (P, P)], Boolean, ?]].comonad[Int, Int, Int])
+
+ checkAll("Comonad[RepresentableStore[λ[P => (P, P)], Boolean, ?]]",
+ SerializableTests.serializable(Comonad[RepresentableStore[λ[P => (P, P)], Boolean, ?]]))
}
-
test("extract and peek are consistent") {
forAll { (store: Store[String, String]) =>
- store.extract should === (store.peek(store.index))
+ store.extract should ===(store.peek(store.index))
}
}
test("use store alias constructor") {
forAll { (f: String => Int, s: String) =>
val store = Store(f, s)
- store.extract should === (f(s))
+ store.extract should ===(f(s))
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/src/test/scala/cats/tests/RepresentableSuite.scala b/tests/src/test/scala/cats/tests/RepresentableSuite.scala
index 2455d5fd4e..77ff37eea5 100644
--- a/tests/src/test/scala/cats/tests/RepresentableSuite.scala
+++ b/tests/src/test/scala/cats/tests/RepresentableSuite.scala
@@ -30,8 +30,8 @@ class RepresentableSuite extends CatsSuite {
implicit def kleisliEq[F[_], A, B](implicit A: Arbitrary[A], FB: Eq[F[B]]): Eq[Kleisli[F, A, B]] =
Eq.by[Kleisli[F, A, B], A => F[B]](_.run)
- checkAll("Kleisli[Pair, String, Int] <-> (String, Boolean) => Int",
-
+ checkAll(
+ "Kleisli[Pair, String, Int] <-> (String, Boolean) => Int",
// Have to summon all implicits using 'implicitly' otherwise we get a diverging implicits error
RepresentableTests[Kleisli[Pair, String, ?], (String, Boolean)].representable[Int](
implicitly[Arbitrary[Int]],
@@ -43,7 +43,8 @@ class RepresentableSuite extends CatsSuite {
)
)
- checkAll("Representable[Kleisli[Pair, String, ?]]", SerializableTests.serializable(Representable[Kleisli[Pair, String, ?]]))
+ checkAll("Representable[Kleisli[Pair, String, ?]]",
+ SerializableTests.serializable(Representable[Kleisli[Pair, String, ?]]))
}
{
@@ -76,7 +77,3 @@ class RepresentableSuite extends CatsSuite {
val tabulatedFunction = indexedFunction.tabulate
}
}
-
-
-
-
diff --git a/tests/src/test/scala/cats/tests/SemigroupSuite.scala b/tests/src/test/scala/cats/tests/SemigroupSuite.scala
index c29a081b2a..f8efb2f3c3 100644
--- a/tests/src/test/scala/cats/tests/SemigroupSuite.scala
+++ b/tests/src/test/scala/cats/tests/SemigroupSuite.scala
@@ -4,7 +4,6 @@ package tests
import org.scalatest._
import org.scalatest.prop.GeneratorDrivenPropertyChecks
-
class SemigroupSuite extends FunSuite with Matchers with GeneratorDrivenPropertyChecks {
{
import cats.implicits._
@@ -25,8 +24,8 @@ class SemigroupSuite extends FunSuite with Matchers with GeneratorDrivenProperty
val add: (Int, Int) => Int = (a, b) => a + b
forAll { (a: Int, b: Int) =>
- Semigroup.instance(mult).combine(a, b) should === (a * b)
- Semigroup.instance(add).combine(a, b) should === (a + b)
+ Semigroup.instance(mult).combine(a, b) should ===(a * b)
+ Semigroup.instance(add).combine(a, b) should ===(a + b)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/SetSuite.scala b/tests/src/test/scala/cats/tests/SetSuite.scala
index c8724cb124..a55853c251 100644
--- a/tests/src/test/scala/cats/tests/SetSuite.scala
+++ b/tests/src/test/scala/cats/tests/SetSuite.scala
@@ -15,17 +15,17 @@ class SetSuite extends CatsSuite {
checkAll("Set[Int]", UnorderedTraverseTests[Set].unorderedTraverse[Int, Int, Int, Validated[Int, ?], Option])
checkAll("UnorderedTraverse[Set]", SerializableTests.serializable(UnorderedTraverse[Set]))
- test("show"){
- Set(1, 1, 2, 3).show should === ("Set(1, 2, 3)")
- Set.empty[String].show should === ("Set()")
+ test("show") {
+ Set(1, 1, 2, 3).show should ===("Set(1, 2, 3)")
+ Set.empty[String].show should ===("Set()")
}
- test("show keeps separate entries for items that map to identical strings"){
+ test("show keeps separate entries for items that map to identical strings") {
//note: this val name has to be the same to shadow the cats.instances instance
implicit val catsStdShowForInt: Show[Int] = Show.show(_ => "1")
// an implementation implemented as set.map(_.show).mkString(", ") would
// only show one entry in the result instead of 3, because Set.map combines
// duplicate items in the codomain.
- Set(1, 2, 3).show should === ("Set(1, 1, 1)")
+ Set(1, 2, 3).show should ===("Set(1, 1, 1)")
}
}
diff --git a/tests/src/test/scala/cats/tests/SortedMapSuite.scala b/tests/src/test/scala/cats/tests/SortedMapSuite.scala
index 5c4af5c6fd..d20adcb8ca 100644
--- a/tests/src/test/scala/cats/tests/SortedMapSuite.scala
+++ b/tests/src/test/scala/cats/tests/SortedMapSuite.scala
@@ -17,7 +17,8 @@ class SortedMapSuite extends CatsSuite {
checkAll("SortedMap[Int, Int]", FlatMapTests[SortedMap[Int, ?]].flatMap[Int, Int, Int])
checkAll("FlatMap[SortedMap[Int, ?]]", SerializableTests.serializable(FlatMap[SortedMap[Int, ?]]))
- checkAll("SortedMap[Int, Int] with Option", TraverseTests[SortedMap[Int, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("SortedMap[Int, Int] with Option",
+ TraverseTests[SortedMap[Int, ?]].traverse[Int, Int, Int, Int, Option, Option])
checkAll("Traverse[SortedMap[Int, ?]]", SerializableTests.serializable(Traverse[SortedMap[Int, ?]]))
checkAll("SortedMap[Int, Int]", TraverseFilterTests[SortedMap[Int, ?]].traverseFilter[Int, Int, Int])
@@ -25,15 +26,17 @@ class SortedMapSuite extends CatsSuite {
test("show isn't empty and is formatted as expected") {
forAll { (map: SortedMap[Int, String]) =>
- map.show.nonEmpty should === (true)
- map.show.startsWith("SortedMap(") should === (true)
- map.show should === (implicitly[Show[SortedMap[Int, String]]].show(map))
+ map.show.nonEmpty should ===(true)
+ map.show.startsWith("SortedMap(") should ===(true)
+ map.show should ===(implicitly[Show[SortedMap[Int, String]]].show(map))
}
}
- checkAll("Hash[SortedMap[Int, String]]" , HashTests[SortedMap[Int, String]].hash)
- checkAll("CommutativeMonoid[SortedMap[String, Int]]", CommutativeMonoidTests[SortedMap[String, Int]].commutativeMonoid)
- checkAll("CommutativeMonoid[SortedMap[String, Int]]", SerializableTests.serializable(CommutativeMonoid[SortedMap[String, Int]]))
+ checkAll("Hash[SortedMap[Int, String]]", HashTests[SortedMap[Int, String]].hash)
+ checkAll("CommutativeMonoid[SortedMap[String, Int]]",
+ CommutativeMonoidTests[SortedMap[String, Int]].commutativeMonoid)
+ checkAll("CommutativeMonoid[SortedMap[String, Int]]",
+ SerializableTests.serializable(CommutativeMonoid[SortedMap[String, Int]]))
checkAll("Monoid[SortedMap[String, String]]", MonoidTests[SortedMap[String, String]].monoid)
checkAll("Monoid[SortedMap[String, String]]", SerializableTests.serializable(Monoid[SortedMap[String, String]]))
}
diff --git a/tests/src/test/scala/cats/tests/SortedSetSuite.scala b/tests/src/test/scala/cats/tests/SortedSetSuite.scala
index 0c5ca70f26..9aa058dea6 100644
--- a/tests/src/test/scala/cats/tests/SortedSetSuite.scala
+++ b/tests/src/test/scala/cats/tests/SortedSetSuite.scala
@@ -14,23 +14,29 @@ class SortedSetSuite extends CatsSuite {
checkAll("SortedSet[Int]", FoldableTests[SortedSet].foldable[Int, Int])
checkAll("PartialOrder[SortedSet[Int]]", PartialOrderTests[SortedSet[Int]].partialOrder)
- checkAll("PartialOrder.reverse(PartialOrder[SortedSet[Int]])", PartialOrderTests(PartialOrder.reverse(PartialOrder[SortedSet[Int]])).partialOrder)
- checkAll("PartialOrder.reverse(PartialOrder.reverse(PartialOrder[SortedSet[Int]]))", PartialOrderTests(PartialOrder.reverse(PartialOrder.reverse(PartialOrder[SortedSet[Int]]))).partialOrder)
+ checkAll("PartialOrder.reverse(PartialOrder[SortedSet[Int]])",
+ PartialOrderTests(PartialOrder.reverse(PartialOrder[SortedSet[Int]])).partialOrder)
+ checkAll(
+ "PartialOrder.reverse(PartialOrder.reverse(PartialOrder[SortedSet[Int]]))",
+ PartialOrderTests(PartialOrder.reverse(PartialOrder.reverse(PartialOrder[SortedSet[Int]]))).partialOrder
+ )
checkAll("BoundedSemilattice[SortedSet[String]]", BoundedSemilatticeTests[SortedSet[String]].boundedSemilattice)
- checkAll("BoundedSemilattice[SortedSet[String]]", SerializableTests.serializable(BoundedSemilattice[SortedSet[String]]))
+ checkAll("BoundedSemilattice[SortedSet[String]]",
+ SerializableTests.serializable(BoundedSemilattice[SortedSet[String]]))
- checkAll("Semilattice.asMeetPartialOrder[SortedSet[Int]]", PartialOrderTests(Semilattice.asMeetPartialOrder[SortedSet[Int]]).partialOrder)
- checkAll("Semilattice.asJoinPartialOrder[SortedSet[Int]]", PartialOrderTests(Semilattice.asJoinPartialOrder[SortedSet[Int]]).partialOrder)
- checkAll("Hash[SortedSet[Int]]" , HashTests[SortedSet[Int]].hash)
+ checkAll("Semilattice.asMeetPartialOrder[SortedSet[Int]]",
+ PartialOrderTests(Semilattice.asMeetPartialOrder[SortedSet[Int]]).partialOrder)
+ checkAll("Semilattice.asJoinPartialOrder[SortedSet[Int]]",
+ PartialOrderTests(Semilattice.asJoinPartialOrder[SortedSet[Int]]).partialOrder)
+ checkAll("Hash[SortedSet[Int]]", HashTests[SortedSet[Int]].hash)
-
- test("show keeps separate entries for items that map to identical strings"){
+ test("show keeps separate entries for items that map to identical strings") {
//note: this val name has to be the same to shadow the cats.instances instance
implicit val catsStdShowForInt: Show[Int] = Show.show(_ => "1")
// an implementation implemented as set.map(_.show).mkString(", ") would
// only show one entry in the result instead of 3, because SortedSet.map combines
// duplicate items in the codomain.
- SortedSet(1, 2, 3).show should === ("SortedSet(1, 1, 1)")
+ SortedSet(1, 2, 3).show should ===("SortedSet(1, 1, 1)")
}
}
diff --git a/tests/src/test/scala/cats/tests/SplitSuite.scala b/tests/src/test/scala/cats/tests/SplitSuite.scala
index f68bfe723d..4aafcf5df3 100644
--- a/tests/src/test/scala/cats/tests/SplitSuite.scala
+++ b/tests/src/test/scala/cats/tests/SplitSuite.scala
@@ -3,7 +3,7 @@ package tests
class SplitSuite extends CatsSuite {
test("syntax") {
- val f = (((_: Int) + 1) split ((_: Int) / 2))
+ val f = ((_: Int) + 1).split((_: Int) / 2)
f((1, 2)) should be((2, 1))
}
}
diff --git a/tests/src/test/scala/cats/tests/Spooky.scala b/tests/src/test/scala/cats/tests/Spooky.scala
index 467d55cd20..cfbc12a3cc 100644
--- a/tests/src/test/scala/cats/tests/Spooky.scala
+++ b/tests/src/test/scala/cats/tests/Spooky.scala
@@ -2,12 +2,11 @@ package cats
package tests
/**
- * Class for spooky side-effects and action-at-a-distance.
- *
- * It is basically a mutable counter that can be used to measure how
- * many times an otherwise pure function is being evaluated.
- */
+ * Class for spooky side-effects and action-at-a-distance.
+ *
+ * It is basically a mutable counter that can be used to measure how
+ * many times an otherwise pure function is being evaluated.
+ */
class Spooky(var counter: Int = 0) {
def increment(): Unit = counter += 1
}
-
diff --git a/tests/src/test/scala/cats/tests/StreamSuite.scala b/tests/src/test/scala/cats/tests/StreamSuite.scala
index 25f7c1bb4d..b26c744464 100644
--- a/tests/src/test/scala/cats/tests/StreamSuite.scala
+++ b/tests/src/test/scala/cats/tests/StreamSuite.scala
@@ -1,7 +1,16 @@
package cats
package tests
-import cats.laws.discipline.{AlternativeTests, CoflatMapTests, CommutativeApplyTests, MonadTests, SemigroupalTests, SerializableTests, TraverseFilterTests, TraverseTests}
+import cats.laws.discipline.{
+ AlternativeTests,
+ CoflatMapTests,
+ CommutativeApplyTests,
+ MonadTests,
+ SemigroupalTests,
+ SerializableTests,
+ TraverseFilterTests,
+ TraverseTests
+}
import cats.data.ZipStream
import cats.laws.discipline.arbitrary._
@@ -28,23 +37,23 @@ class StreamSuite extends CatsSuite {
checkAll("ZipStream[Int]", CommutativeApplyTests[ZipStream].apply[Int, Int, Int])
test("show") {
- Stream(1, 2, 3).show should === ("Stream(1, ?)")
- Stream.empty[Int].show should === ("Stream()")
+ Stream(1, 2, 3).show should ===("Stream(1, ?)")
+ Stream.empty[Int].show should ===("Stream()")
}
test("Show[Stream] is referentially transparent, unlike Stream.toString") {
forAll { stream: Stream[Int] =>
if (!stream.isEmpty) {
- val unevaluatedStream = stream map identity
+ val unevaluatedStream = stream.map(identity)
val initialShow = unevaluatedStream.show
// Evaluating the tail can cause Stream.toString to return different values,
// depending on the internal state of the Stream. Show[Stream] should return
// consistent values independent of internal state.
unevaluatedStream.tail
- initialShow should === (unevaluatedStream.show)
+ initialShow should ===(unevaluatedStream.show)
} else {
- stream.show should === (stream.toString)
+ stream.show should ===(stream.toString)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/SyntaxSuite.scala b/tests/src/test/scala/cats/tests/SyntaxSuite.scala
index 01ead70966..30f28a867e 100644
--- a/tests/src/test/scala/cats/tests/SyntaxSuite.scala
+++ b/tests/src/test/scala/cats/tests/SyntaxSuite.scala
@@ -49,7 +49,7 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val z: Boolean = x.isEmpty
}
- def testCompose[F[_,_] : Compose, A, B, C, D]: Unit = {
+ def testCompose[F[_, _]: Compose, A, B, C, D]: Unit = {
val x = mock[F[A, B]]
val y = mock[F[B, C]]
val z = mock[F[C, D]]
@@ -64,8 +64,8 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val y = mock[A]
val b0: Boolean = x === y
val b1: Boolean = x =!= y
- val b2: Boolean = x eqv y
- val b3: Boolean = x neqv y
+ val b2: Boolean = x.eqv(y)
+ val b3: Boolean = x.neqv(y)
}
def testPartialOrder[A: PartialOrder]: Unit = {
@@ -75,18 +75,18 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val b1: Boolean = x <= y
val b2: Boolean = x > y
val b3: Boolean = x >= y
- val f: Double = x partialCompare y
- val oi: Option[Int] = x tryCompare y
- val oz0: Option[A] = x pmin y
- val oz1: Option[A] = x pmax y
+ val f: Double = x.partialCompare(y)
+ val oi: Option[Int] = x.tryCompare(y)
+ val oz0: Option[A] = x.pmin(y)
+ val oz1: Option[A] = x.pmax(y)
}
def testOrder[A: Order]: Unit = {
val x = mock[A]
val y = mock[A]
- val i: Int = x compare y
- val z0: A = x min y
- val z1: A = x max y
+ val i: Int = x.compare(y)
+ val z0: A = x.min(y)
+ val z1: A = x.max(y)
}
def testInvariantFunctor[F[_]: Invariant, A, B]: Unit = {
@@ -149,11 +149,10 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val ft = mock[(A, B, C) => G[Z]]
- val gfabc = tfabc traverseN ft
- val gfabc2 = (fa, fb, fc) traverseN ft
+ val gfabc = tfabc.traverseN(ft)
+ val gfabc2 = (fa, fb, fc).traverseN(ft)
}
-
def testNonEmptyTraverse[F[_]: NonEmptyTraverse: FlatMap, G[_]: Apply: SemigroupK, A: Semigroup, B, Z]: Unit = {
val fa = mock[F[A]]
val f1 = mock[A => G[B]]
@@ -166,8 +165,6 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val gunit: G[F[A]] = fga.nonEmptySequence
}
-
-
def testParallel[M[_]: Monad, F[_], T[_]: Traverse, A, B](implicit P: Parallel[M, F]): Unit = {
val ta = mock[T[A]]
val f = mock[A => M[B]]
@@ -199,8 +196,8 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val fc = mock[M[C]]
val f = mock[(A, B, C) => Z]
- tfabc parMapN f
- (fa, fb, fc) parMapN f
+ tfabc.parMapN(f)
+ (fa, fb, fc).parMapN(f)
}
def testReducible[F[_]: Reducible, G[_]: Apply: SemigroupK, A: Semigroup, B, Z]: Unit = {
@@ -244,7 +241,7 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val fb1: F[B] = fa.as(b)
}
- def testApply[F[_]: Apply : Semigroupal, G[_]: Contravariant : Semigroupal, H[_]: Invariant : Semigroupal, A, B, C, D, E, Z] = {
+ def testApply[F[_]: Apply: Semigroupal, G[_]: Contravariant: Semigroupal, H[_]: Invariant: Semigroupal, A, B, C, D, E, Z] = {
val tfabc = mock[(F[A], F[B], F[C])]
val fa = mock[F[A]]
val fb = mock[F[B]]
@@ -255,17 +252,17 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
fa *> fb
fb <* fc
- tfabc mapN f
- (fa, fb, fc) mapN f
- (fa, fb, fc) apWith ff
+ tfabc.mapN(f)
+ (fa, fb, fc).mapN(f)
+ (fa, fb, fc).apWith(ff)
val tgabc = mock[(G[A], G[B])]
val ga = mock[G[A]]
val gb = mock[G[B]]
val g = mock[Z => (A, B)]
- tgabc contramapN g
- (ga, gb) contramapN g
+ tgabc.contramapN(g)
+ (ga, gb).contramapN(g)
val thabcde = mock[(H[A], H[B], H[C], H[D], H[E])]
val ha = mock[H[A]]
@@ -320,7 +317,7 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val fa = a.pure[F]
}
- def testFlatMap[F[_] : FlatMap, A, B]: Unit = {
+ def testFlatMap[F[_]: FlatMap, A, B]: Unit = {
val a = mock[A]
val returnValue = mock[F[Either[A, B]]]
val done = a.tailRecM[F, B](a => returnValue)
@@ -367,7 +364,7 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val binested: Binested[F, G, H, A, B] = fgahb.binested
}
- def testNonEmptySet[A, B: Order] : Unit = {
+ def testNonEmptySet[A, B: Order]: Unit = {
val f = mock[A => B]
val set = mock[SortedSet[A]]
@@ -375,7 +372,7 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val grouped: SortedMap[B, NonEmptySet[A]] = set.groupByNes(f)
}
- def testNonEmptyList[A, B: Order] : Unit = {
+ def testNonEmptyList[A, B: Order]: Unit = {
val f = mock[A => B]
val list = mock[List[A]]
@@ -383,7 +380,7 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
val grouped: SortedMap[B, NonEmptyList[A]] = list.groupByNel(f)
}
- def testNonEmptyChain[A, B: Order] : Unit = {
+ def testNonEmptyChain[A, B: Order]: Unit = {
val f = mock[A => B]
val list = mock[List[A]]
@@ -391,4 +388,3 @@ object SyntaxSuite extends AllSyntaxBinCompat with AllInstances with AllSyntax {
}
}
-
diff --git a/tests/src/test/scala/cats/tests/TraverseSuite.scala b/tests/src/test/scala/cats/tests/TraverseSuite.scala
index b912201a9b..e99b17f423 100644
--- a/tests/src/test/scala/cats/tests/TraverseSuite.scala
+++ b/tests/src/test/scala/cats/tests/TraverseSuite.scala
@@ -6,17 +6,19 @@ import org.scalacheck.Arbitrary
import cats.instances.all._
-abstract class TraverseSuite[F[_]: Traverse](name: String)(implicit ArbFInt: Arbitrary[F[Int]]) extends CatsSuite with PropertyChecks {
+abstract class TraverseSuite[F[_]: Traverse](name: String)(implicit ArbFInt: Arbitrary[F[Int]])
+ extends CatsSuite
+ with PropertyChecks {
test(s"Traverse[$name].zipWithIndex") {
forAll { (fa: F[Int]) =>
- fa.zipWithIndex.toList should === (fa.toList.zipWithIndex)
+ fa.zipWithIndex.toList should ===(fa.toList.zipWithIndex)
}
}
test(s"Traverse[$name].mapWithIndex") {
forAll { (fa: F[Int], fn: ((Int, Int)) => Int) =>
- fa.mapWithIndex((a, i) => fn((a, i))).toList should === (fa.toList.zipWithIndex.map(fn))
+ fa.mapWithIndex((a, i) => fn((a, i))).toList should ===(fa.toList.zipWithIndex.map(fn))
}
}
@@ -24,7 +26,7 @@ abstract class TraverseSuite[F[_]: Traverse](name: String)(implicit ArbFInt: Arb
forAll { (fa: F[Int], fn: ((Int, Int)) => (Int, Int)) =>
val left = fa.traverseWithIndexM((a, i) => fn((a, i))).map(_.toList)
val (xs, values) = fa.toList.zipWithIndex.map(fn).unzip
- left should === ((xs.combineAll, values))
+ left should ===((xs.combineAll, values))
}
}
@@ -47,11 +49,11 @@ object TraverseSuite {
}
}
-class TraverseListSuite extends TraverseSuite[List]("List")
+class TraverseListSuite extends TraverseSuite[List]("List")
class TraverseStreamSuite extends TraverseSuite[Stream]("Stream")
class TraverseVectorSuite extends TraverseSuite[Vector]("Vector")
-class TraverseListSuiteUnderlying extends TraverseSuite.Underlying[List]("List")
+class TraverseListSuiteUnderlying extends TraverseSuite.Underlying[List]("List")
class TraverseStreamSuiteUnderlying extends TraverseSuite.Underlying[Stream]("Stream")
class TraverseVectorSuiteUnderlying extends TraverseSuite.Underlying[Vector]("Vector")
diff --git a/tests/src/test/scala/cats/tests/TrySuite.scala b/tests/src/test/scala/cats/tests/TrySuite.scala
index e07ae3eddf..f59ad050a7 100644
--- a/tests/src/test/scala/cats/tests/TrySuite.scala
+++ b/tests/src/test/scala/cats/tests/TrySuite.scala
@@ -1,7 +1,7 @@
package cats
package tests
-import cats.kernel.laws.discipline.{SemigroupTests, MonoidTests}
+import cats.kernel.laws.discipline.{MonoidTests, SemigroupTests}
import cats.laws.{ApplicativeLaws, CoflatMapLaws, FlatMapLaws, MonadLaws}
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
@@ -38,7 +38,7 @@ class TrySuite extends CatsSuite {
test("show") {
forAll { fs: Try[String] =>
- fs.show should === (fs.toString)
+ fs.show should ===(fs.toString)
}
}
@@ -63,7 +63,7 @@ class TrySuite extends CatsSuite {
}
test("fromTry works") {
forAll { t: Try[Int] =>
- (MonadError[Try, Throwable].fromTry(t)) should === (t)
+ (MonadError[Try, Throwable].fromTry(t)) should ===(t)
}
}
@@ -73,31 +73,23 @@ class TrySuite extends CatsSuite {
// instances.
test("Kleisli associativity") {
- forAll { (l: Long,
- f: Long => Try[Int],
- g: Int => Try[Char],
- h: Char => Try[String]) =>
+ forAll { (l: Long, f: Long => Try[Int], g: Int => Try[Char], h: Char => Try[String]) =>
val isEq = FlatMapLaws[Try].kleisliAssociativity(f, g, h, l)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("Cokleisli associativity") {
- forAll { (l: Try[Long],
- f: Try[Long] => Int,
- g: Try[Int] => Char,
- h: Try[Char] => String) =>
+ forAll { (l: Try[Long], f: Try[Long] => Int, g: Try[Int] => Char, h: Try[Char] => String) =>
val isEq = CoflatMapLaws[Try].cokleisliAssociativity(f, g, h, l)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("applicative composition") {
- forAll { (fa: Try[Int],
- fab: Try[Int => Long],
- fbc: Try[Long => Char]) =>
+ forAll { (fa: Try[Int], fab: Try[Int => Long], fbc: Try[Long => Char]) =>
val isEq = ApplicativeLaws[Try].applicativeComposition(fa, fab, fbc)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
@@ -106,14 +98,14 @@ class TrySuite extends CatsSuite {
test("Kleisli left identity") {
forAll { (a: Int, f: Int => Try[Long]) =>
val isEq = monadLaws.kleisliLeftIdentity(a, f)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
test("Kleisli right identity") {
forAll { (a: Int, f: Int => Try[Long]) =>
val isEq = monadLaws.kleisliRightIdentity(a, f)
- isEq.lhs should === (isEq.rhs)
+ isEq.lhs should ===(isEq.rhs)
}
}
@@ -121,6 +113,6 @@ class TrySuite extends CatsSuite {
var evals = 0
val bomb: Eval[Try[Int]] = Later { evals += 1; Success(1) }
Try[Int](sys.error("boom0")).map2Eval(bomb)(_ + _).value
- evals should === (0)
+ evals should ===(0)
}
}
diff --git a/tests/src/test/scala/cats/tests/Tuple2KSuite.scala b/tests/src/test/scala/cats/tests/Tuple2KSuite.scala
index 8c65f52661..bf9e7be506 100644
--- a/tests/src/test/scala/cats/tests/Tuple2KSuite.scala
+++ b/tests/src/test/scala/cats/tests/Tuple2KSuite.scala
@@ -1,94 +1,120 @@
package cats
package tests
-
import cats.data.{Const, Tuple2K, Validated}
import cats.Contravariant
import cats.laws.discipline._
import cats.laws.discipline.arbitrary._
import cats.laws.discipline.eq._
-import cats.kernel.laws.discipline.{OrderTests, PartialOrderTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, OrderTests, PartialOrderTests}
class Tuple2KSuite extends CatsSuite {
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Tuple2K[Option, List, ?]]
checkAll("Tuple2K[Eval, Eval, ?]", DeferTests[Tuple2K[Eval, Eval, ?]].defer[Int])
checkAll("Tuple2K[Option, List, Int]", SemigroupalTests[λ[α => Tuple2K[Option, List, α]]].semigroupal[Int, Int, Int])
- checkAll("Semigroupal[Tuple2K[Option, List, Int]]", SerializableTests.serializable(Semigroupal[λ[α => Tuple2K[Option, List, α]]]))
+ checkAll("Semigroupal[Tuple2K[Option, List, Int]]",
+ SerializableTests.serializable(Semigroupal[λ[α => Tuple2K[Option, List, α]]]))
checkAll("Tuple2K[Option, List, Int]", AlternativeTests[λ[α => Tuple2K[Option, List, α]]].alternative[Int, Int, Int])
- checkAll("Alternative[Tuple2K[Option, List, Int]]", SerializableTests.serializable(Alternative[λ[α => Tuple2K[Option, List, α]]]))
-
- checkAll("Tuple2K[Show, Order, Int]", ContravariantTests[λ[α => Tuple2K[Show, Order, α]]].contravariant[Int, Int, Int])
- checkAll("Contravariant[Tuple2K[Show, Order, Int]]", SerializableTests.serializable(Contravariant[λ[α => Tuple2K[Show, Order, α]]]))
-
- checkAll("Tuple2K[Const[String, ?], Const[Int, ?], Int]",
- ContravariantMonoidalTests[λ[α => Tuple2K[Const[String, ?], Const[Int, ?], α]]].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[Tuple2K[Const[String, ?], Const[Int, ?], Int]]",
- SerializableTests.serializable(ContravariantMonoidal[λ[α => Tuple2K[Const[String, ?], Const[Int, ?], α]]]))
+ checkAll("Alternative[Tuple2K[Option, List, Int]]",
+ SerializableTests.serializable(Alternative[λ[α => Tuple2K[Option, List, α]]]))
+
+ checkAll("Tuple2K[Show, Order, Int]",
+ ContravariantTests[λ[α => Tuple2K[Show, Order, α]]].contravariant[Int, Int, Int])
+ checkAll("Contravariant[Tuple2K[Show, Order, Int]]",
+ SerializableTests.serializable(Contravariant[λ[α => Tuple2K[Show, Order, α]]]))
+
+ checkAll(
+ "Tuple2K[Const[String, ?], Const[Int, ?], Int]",
+ ContravariantMonoidalTests[λ[α => Tuple2K[Const[String, ?], Const[Int, ?], α]]].contravariantMonoidal[Int, Int, Int]
+ )
+ checkAll(
+ "ContravariantMonoidal[Tuple2K[Const[String, ?], Const[Int, ?], Int]]",
+ SerializableTests.serializable(ContravariantMonoidal[λ[α => Tuple2K[Const[String, ?], Const[Int, ?], α]]])
+ )
checkAll("Show[Tuple2K[Option, Option, Int]]", SerializableTests.serializable(Show[Tuple2K[Option, Option, Int]]))
{
implicit val monoidK = ListWrapper.monoidK
checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", MonoidKTests[Tuple2K[ListWrapper, ListWrapper, ?]].monoidK[Int])
- checkAll("MonoidK[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(MonoidK[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("MonoidK[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(MonoidK[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val semigroupK = ListWrapper.semigroupK
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", SemigroupKTests[Tuple2K[ListWrapper, ListWrapper, ?]].semigroupK[Int])
- checkAll("SemigroupK[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(SemigroupK[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ SemigroupKTests[Tuple2K[ListWrapper, ListWrapper, ?]].semigroupK[Int])
+ checkAll("SemigroupK[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(SemigroupK[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val apply = ListWrapper.applyInstance
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Tuple2K[ListWrapper, ListWrapper, ?]]
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", ApplyTests[Tuple2K[ListWrapper, ListWrapper, ?]].apply[Int, Int, Int])
- checkAll("Apply[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Apply[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ ApplyTests[Tuple2K[ListWrapper, ListWrapper, ?]].apply[Int, Int, Int])
+ checkAll("Apply[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Apply[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val optionApply = Apply[Option]
implicit val validatedApply = Apply[Validated[Int, ?]]
- checkAll("Tuple2K[Option, Validated[Int, ?], ?]", CommutativeApplyTests[Tuple2K[Option, Validated[Int, ?], ?]].commutativeApply[Int, Int, Int])
- checkAll("Apply[Tuple2K[Option, Validated[Int, ?], ?]]", SerializableTests.serializable(CommutativeApply[Tuple2K[Option, Validated[Int, ?], ?]]))
+ checkAll("Tuple2K[Option, Validated[Int, ?], ?]",
+ CommutativeApplyTests[Tuple2K[Option, Validated[Int, ?], ?]].commutativeApply[Int, Int, Int])
+ checkAll("Apply[Tuple2K[Option, Validated[Int, ?], ?]]",
+ SerializableTests.serializable(CommutativeApply[Tuple2K[Option, Validated[Int, ?], ?]]))
}
{
- checkAll("Tuple2K[Option, Validated[Int, ?], ?]", CommutativeApplicativeTests[Tuple2K[Option, Validated[Int, ?], ?]].commutativeApplicative[Int, Int, Int])
- checkAll("Applicative[Tuple2K[Option, Validated[Int, ?], ?]]", SerializableTests.serializable(CommutativeApplicative[Tuple2K[Option, Validated[Int, ?], ?]]))
+ checkAll("Tuple2K[Option, Validated[Int, ?], ?]",
+ CommutativeApplicativeTests[Tuple2K[Option, Validated[Int, ?], ?]].commutativeApplicative[Int, Int, Int])
+ checkAll("Applicative[Tuple2K[Option, Validated[Int, ?], ?]]",
+ SerializableTests.serializable(CommutativeApplicative[Tuple2K[Option, Validated[Int, ?], ?]]))
}
{
implicit val functor = ListWrapper.functor
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", FunctorTests[Tuple2K[ListWrapper, ListWrapper, ?]].functor[Int, Int, Int])
- checkAll("Functor[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Functor[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ FunctorTests[Tuple2K[ListWrapper, ListWrapper, ?]].functor[Int, Int, Int])
+ checkAll("Functor[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Functor[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val monad = ListWrapper.monad
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Tuple2K[ListWrapper, ListWrapper, ?]]
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", MonadTests[Tuple2K[ListWrapper, ListWrapper, ?]].monad[Int, Int, Int])
- checkAll("Monad[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Monad[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ MonadTests[Tuple2K[ListWrapper, ListWrapper, ?]].monad[Int, Int, Int])
+ checkAll("Monad[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Monad[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val foldable = ListWrapper.foldable
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", FoldableTests[Tuple2K[ListWrapper, ListWrapper, ?]].foldable[Int, Int])
- checkAll("Foldable[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Foldable[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ FoldableTests[Tuple2K[ListWrapper, ListWrapper, ?]].foldable[Int, Int])
+ checkAll("Foldable[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Foldable[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val traverse = ListWrapper.traverse
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", TraverseTests[Tuple2K[ListWrapper, ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
- checkAll("Traverse[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Traverse[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ TraverseTests[Tuple2K[ListWrapper, ListWrapper, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("Traverse[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Traverse[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
implicit val alternative = ListWrapper.alternative
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Tuple2K[ListWrapper, ListWrapper, ?]]
- checkAll("Tuple2K[ListWrapper, ListWrapper, ?]", AlternativeTests[Tuple2K[ListWrapper, ListWrapper, ?]].alternative[Int, Int, Int])
- checkAll("Alternative[Tuple2K[ListWrapper, ListWrapper, ?]]", SerializableTests.serializable(Alternative[Tuple2K[ListWrapper, ListWrapper, ?]]))
+ checkAll("Tuple2K[ListWrapper, ListWrapper, ?]",
+ AlternativeTests[Tuple2K[ListWrapper, ListWrapper, ?]].alternative[Int, Int, Int])
+ checkAll("Alternative[Tuple2K[ListWrapper, ListWrapper, ?]]",
+ SerializableTests.serializable(Alternative[Tuple2K[ListWrapper, ListWrapper, ?]]))
}
{
@@ -98,19 +124,24 @@ class Tuple2KSuite extends CatsSuite {
checkAll("Tuple2K[ListWrapper, ListWrapper, Int]", EqTests[Tuple2K[ListWrapper, ListWrapper, Int]].eqv)
checkAll("Tuple2K[ListWrapper, ListWrapper, Int]", OrderTests[Tuple2K[ListWrapper, ListWrapper, Int]].order)
- checkAll("Tuple2K[ListWrapper, ListWrapper, Int]", PartialOrderTests[Tuple2K[ListWrapper, ListWrapper, Int]].partialOrder)
+ checkAll("Tuple2K[ListWrapper, ListWrapper, Int]",
+ PartialOrderTests[Tuple2K[ListWrapper, ListWrapper, Int]].partialOrder)
}
{
- checkAll("Tuple2K[Function0, Function0, ?]", DistributiveTests[Tuple2K[Function0, Function0, ?]].distributive[Int, Int, Int, Option, Function0])
- checkAll("Distributive[Tuple2K[Function0, Function0, ?]]", SerializableTests.serializable(Distributive[Tuple2K[Function0, Function0, ?]]))
+ checkAll("Tuple2K[Function0, Function0, ?]",
+ DistributiveTests[Tuple2K[Function0, Function0, ?]].distributive[Int, Int, Int, Option, Function0])
+ checkAll("Distributive[Tuple2K[Function0, Function0, ?]]",
+ SerializableTests.serializable(Distributive[Tuple2K[Function0, Function0, ?]]))
}
test("show") {
forAll { (l1: Option[Int], l2: Option[Int]) =>
val tuple = Tuple2K(l1, l2)
- Show[Tuple2K[Option, Option, Int]].show(tuple) should === (s"Tuple2K(${Show[Option[Int]].show(l1)}, ${Show[Option[Int]].show(l2)})")
+ Show[Tuple2K[Option, Option, Int]].show(tuple) should ===(
+ s"Tuple2K(${Show[Option[Int]].show(l1)}, ${Show[Option[Int]].show(l2)})"
+ )
}
}
@@ -118,7 +149,7 @@ class Tuple2KSuite extends CatsSuite {
forAll { (l1: Option[String], l2: List[String]) =>
val tuple = Tuple2K(l1, l2)
- tuple.swap.swap should === (tuple)
+ tuple.swap.swap should ===(tuple)
}
}
diff --git a/tests/src/test/scala/cats/tests/TupleSuite.scala b/tests/src/test/scala/cats/tests/TupleSuite.scala
index 2a13e82cfe..7aff44b596 100644
--- a/tests/src/test/scala/cats/tests/TupleSuite.scala
+++ b/tests/src/test/scala/cats/tests/TupleSuite.scala
@@ -28,8 +28,10 @@ class TupleSuite extends CatsSuite {
checkAll("Monad[(String, ?)]", MonadTests[(String, ?)].monad[Int, Int, String])
checkAll("Monad[(String, ?)] serializable", SerializableTests.serializable(Monad[(String, ?)]))
- checkAll("CommutativeFlatMap[(CSemi, ?)]", CommutativeFlatMapTests[(CSemi, ?)].commutativeFlatMap[CSemi, CSemi, CSemi])
- checkAll("CommutativeFlatMap[(CSemi, ?)] serializable", SerializableTests.serializable(CommutativeFlatMap[(CSemi, ?)]))
+ checkAll("CommutativeFlatMap[(CSemi, ?)]",
+ CommutativeFlatMapTests[(CSemi, ?)].commutativeFlatMap[CSemi, CSemi, CSemi])
+ checkAll("CommutativeFlatMap[(CSemi, ?)] serializable",
+ SerializableTests.serializable(CommutativeFlatMap[(CSemi, ?)]))
checkAll("CommutativeMonad[(Int, ?)]", CommutativeMonadTests[(Int, ?)].commutativeMonad[Int, Int, Int])
checkAll("CommutativeMonad[(Int, ?)] serializable", SerializableTests.serializable(CommutativeMonad[(Int, ?)]))
@@ -41,28 +43,32 @@ class TupleSuite extends CatsSuite {
val cart = ContravariantSemigroupal[Eq].composeFunctor[(Int, ?)]
val eq = cart.product(Eq[(Int, String)], Eq[(Int, Int)])
forAll { (a: (Int, (String, Int)), b: (Int, (String, Int))) =>
- (a == b) should === (eq.eqv(a, b))
+ (a == b) should ===(eq.eqv(a, b))
}
}
test("eqv") {
val eq = Eq[(Int, Long)]
- forAll { t: (Int, Long) => eq.eqv(t, t) should === (true) }
- forAll { t: (Int, Long) => eq.eqv(t, t._1 -> (t._2 + 1)) should === (false) }
+ forAll { t: (Int, Long) =>
+ eq.eqv(t, t) should ===(true)
+ }
+ forAll { t: (Int, Long) =>
+ eq.eqv(t, t._1 -> (t._2 + 1)) should ===(false)
+ }
}
test("order") {
forAll { t: (Int, Int) =>
val u = t.swap
- Order[(Int, Int)].compare(t, u) should === (scala.math.Ordering[(Int, Int)].compare(t, u))
+ Order[(Int, Int)].compare(t, u) should ===(scala.math.Ordering[(Int, Int)].compare(t, u))
}
}
test("show") {
- (1, 2).show should === ("(1,2)")
+ (1, 2).show should ===("(1,2)")
forAll { fs: (String, String) =>
- fs.show should === (fs.toString)
+ fs.show should ===(fs.toString)
}
// Provide some "non-standard" Show instances to make sure the tuple2 is actually use the Show instances for the
@@ -78,6 +84,6 @@ class TupleSuite extends CatsSuite {
val foo = Foo(1)
val bar = Bar(2)
- (foo, bar).show should === (s"(${fooShow.show(foo)},${barShow.show(bar)})")
+ (foo, bar).show should ===(s"(${fooShow.show(foo)},${barShow.show(bar)})")
}
}
diff --git a/tests/src/test/scala/cats/tests/UnorderedFoldableSuite.scala b/tests/src/test/scala/cats/tests/UnorderedFoldableSuite.scala
index a0bd683c1c..ed70ba396f 100644
--- a/tests/src/test/scala/cats/tests/UnorderedFoldableSuite.scala
+++ b/tests/src/test/scala/cats/tests/UnorderedFoldableSuite.scala
@@ -5,8 +5,9 @@ import org.scalatest.prop.PropertyChecks
import org.scalacheck.Arbitrary
import cats.instances.all._
-abstract class UnorderedFoldableSuite[F[_]: UnorderedFoldable](name: String)(
- implicit ArbFString: Arbitrary[F[String]]) extends CatsSuite with PropertyChecks {
+abstract class UnorderedFoldableSuite[F[_]: UnorderedFoldable](name: String)(implicit ArbFString: Arbitrary[F[String]])
+ extends CatsSuite
+ with PropertyChecks {
def iterator[T](fa: F[T]): Iterator[T]
@@ -23,4 +24,4 @@ class UnorderedFoldableSetSuite extends UnorderedFoldableSuite[Set]("set") {
class UnorderedFoldableMapSuite extends UnorderedFoldableSuite[Map[String, ?]]("map") {
def iterator[T](map: Map[String, T]): Iterator[T] = map.valuesIterator
-}
\ No newline at end of file
+}
diff --git a/tests/src/test/scala/cats/tests/UnorderedTraverseSuite.scala b/tests/src/test/scala/cats/tests/UnorderedTraverseSuite.scala
index f4747f4a8d..eded204858 100644
--- a/tests/src/test/scala/cats/tests/UnorderedTraverseSuite.scala
+++ b/tests/src/test/scala/cats/tests/UnorderedTraverseSuite.scala
@@ -4,7 +4,7 @@ package tests
class UnorderedTraverseSuite extends CatsSuite {
test("UnorderedTraverse[Set[Int]].unorderedTraverse via syntax") {
forAll { (ins: Set[Int]) =>
- ins.unorderedTraverse(in => in: Id[Int]).toList.sorted should === (ins.toList.sorted)
+ ins.unorderedTraverse(in => in: Id[Int]).toList.sorted should ===(ins.toList.sorted)
}
}
}
diff --git a/tests/src/test/scala/cats/tests/ValidatedSuite.scala b/tests/src/test/scala/cats/tests/ValidatedSuite.scala
index d5eeec71ed..124a887a8c 100644
--- a/tests/src/test/scala/cats/tests/ValidatedSuite.scala
+++ b/tests/src/test/scala/cats/tests/ValidatedSuite.scala
@@ -7,25 +7,28 @@ import cats.laws.discipline._
import org.scalacheck.Arbitrary._
import cats.laws.discipline.SemigroupKTests
import cats.laws.discipline.arbitrary._
-import cats.kernel.laws.discipline.{MonoidTests, SemigroupTests, OrderTests, PartialOrderTests, EqTests}
+import cats.kernel.laws.discipline.{EqTests, MonoidTests, OrderTests, PartialOrderTests, SemigroupTests}
import scala.util.Try
class ValidatedSuite extends CatsSuite {
implicit val iso = SemigroupalTests.Isomorphisms.invariant[Validated[String, ?]]
- checkAll("Validated[String, Int]", SemigroupalTests[Validated[String,?]].semigroupal[Int, Int, Int])
- checkAll("Semigroupal[Validated[String,?]]", SerializableTests.serializable(Semigroupal[Validated[String,?]]))
+ checkAll("Validated[String, Int]", SemigroupalTests[Validated[String, ?]].semigroupal[Int, Int, Int])
+ checkAll("Semigroupal[Validated[String,?]]", SerializableTests.serializable(Semigroupal[Validated[String, ?]]))
checkAll("Validated[?, ?]", BitraverseTests[Validated].bitraverse[Option, Int, Int, Int, String, String, String])
checkAll("Bitraverse[Validated]", SerializableTests.serializable(Bitraverse[Validated]))
implicit val eq0 = EitherT.catsDataEqForEitherT[Validated[String, ?], String, Int]
- checkAll("Validated[String, Int]", ApplicativeErrorTests[Validated[String, ?], String].applicativeError[Int, Int, Int])
- checkAll("ApplicativeError[Validated, String]", SerializableTests.serializable(ApplicativeError[Validated[String, ?], String]))
+ checkAll("Validated[String, Int]",
+ ApplicativeErrorTests[Validated[String, ?], String].applicativeError[Int, Int, Int])
+ checkAll("ApplicativeError[Validated, String]",
+ SerializableTests.serializable(ApplicativeError[Validated[String, ?], String]))
- checkAll("Validated[String, Int] with Option", TraverseTests[Validated[String,?]].traverse[Int, Int, Int, Int, Option, Option])
- checkAll("Traverse[Validated[String, ?]]", SerializableTests.serializable(Traverse[Validated[String,?]]))
+ checkAll("Validated[String, Int] with Option",
+ TraverseTests[Validated[String, ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("Traverse[Validated[String, ?]]", SerializableTests.serializable(Traverse[Validated[String, ?]]))
checkAll("Validated[String, Int]", OrderTests[Validated[String, Int]].order)
checkAll("Order[Validated[String, Int]]", SerializableTests.serializable(Order[Validated[String, Int]]))
@@ -35,77 +38,85 @@ class ValidatedSuite extends CatsSuite {
checkAll("Validated[String, NonEmptyList[Int]]", SemigroupTests[Validated[String, NonEmptyList[Int]]].semigroup)
checkAll("Validated[Int, Int]", CommutativeApplicativeTests[Validated[Int, ?]].commutativeApplicative[Int, Int, Int])
- checkAll("CommutativeApplicative[Validated[Int, ?]]", SerializableTests.serializable(CommutativeApplicative[Validated[Int, ?]]))
+ checkAll("CommutativeApplicative[Validated[Int, ?]]",
+ SerializableTests.serializable(CommutativeApplicative[Validated[Int, ?]]))
{
implicit val L = ListWrapper.semigroup[String]
checkAll("Validated[ListWrapper[String], ?]", SemigroupKTests[Validated[ListWrapper[String], ?]].semigroupK[Int])
- checkAll("SemigroupK[Validated[ListWrapper[String], ?]]", SerializableTests.serializable(SemigroupK[Validated[ListWrapper[String], ?]]))
+ checkAll("SemigroupK[Validated[ListWrapper[String], ?]]",
+ SerializableTests.serializable(SemigroupK[Validated[ListWrapper[String], ?]]))
}
{
implicit val S = ListWrapper.partialOrder[String]
implicit val I = ListWrapper.partialOrder[Int]
- checkAll("Validated[ListWrapper[String], ListWrapper[Int]]", PartialOrderTests[Validated[ListWrapper[String], ListWrapper[Int]]].partialOrder)
- checkAll("PartialOrder[Validated[ListWrapper[String], ListWrapper[Int]]]", SerializableTests.serializable(PartialOrder[Validated[ListWrapper[String], ListWrapper[Int]]]))
+ checkAll("Validated[ListWrapper[String], ListWrapper[Int]]",
+ PartialOrderTests[Validated[ListWrapper[String], ListWrapper[Int]]].partialOrder)
+ checkAll(
+ "PartialOrder[Validated[ListWrapper[String], ListWrapper[Int]]]",
+ SerializableTests.serializable(PartialOrder[Validated[ListWrapper[String], ListWrapper[Int]]])
+ )
}
{
implicit val S = ListWrapper.eqv[String]
implicit val I = ListWrapper.eqv[Int]
- checkAll("Validated[ListWrapper[String], ListWrapper[Int]]", EqTests[Validated[ListWrapper[String], ListWrapper[Int]]].eqv)
- checkAll("Eq[Validated[ListWrapper[String], ListWrapper[Int]]]", SerializableTests.serializable(Eq[Validated[ListWrapper[String], ListWrapper[Int]]]))
+ checkAll("Validated[ListWrapper[String], ListWrapper[Int]]",
+ EqTests[Validated[ListWrapper[String], ListWrapper[Int]]].eqv)
+ checkAll("Eq[Validated[ListWrapper[String], ListWrapper[Int]]]",
+ SerializableTests.serializable(Eq[Validated[ListWrapper[String], ListWrapper[Int]]]))
}
test("ap2 combines failures in order") {
val plus = (_: Int) + (_: Int)
- Applicative[Validated[String, ?]].ap2(Valid(plus))(Invalid("1"), Invalid("2")) should === (Invalid("12"))
+ Applicative[Validated[String, ?]].ap2(Valid(plus))(Invalid("1"), Invalid("2")) should ===(Invalid("12"))
}
test("catchOnly catches matching exceptions") {
- assert(Validated.catchOnly[NumberFormatException]{ "foo".toInt }.isInstanceOf[Invalid[NumberFormatException]])
+ assert(Validated.catchOnly[NumberFormatException] { "foo".toInt }.isInstanceOf[Invalid[NumberFormatException]])
}
test("catchOnly lets non-matching exceptions escape") {
val _ = intercept[NumberFormatException] {
- Validated.catchOnly[IndexOutOfBoundsException]{ "foo".toInt }
+ Validated.catchOnly[IndexOutOfBoundsException] { "foo".toInt }
}
}
test("catchNonFatal catches non-fatal exceptions") {
- assert(Validated.catchNonFatal{ "foo".toInt }.isInvalid)
- assert(Validated.catchNonFatal{ throw new Throwable("blargh") }.isInvalid)
+ assert(Validated.catchNonFatal { "foo".toInt }.isInvalid)
+ assert(Validated.catchNonFatal { throw new Throwable("blargh") }.isInvalid)
}
- test("fromTry is invalid for failed try"){
+ test("fromTry is invalid for failed try") {
forAll { t: Try[Int] =>
- t.isFailure should === (Validated.fromTry(t).isInvalid)
+ t.isFailure should ===(Validated.fromTry(t).isInvalid)
}
}
test("ValidatedNel") {
forAll { (e: String) =>
val manual = Validated.invalid[NonEmptyList[String], Int](NonEmptyList.of(e))
- Validated.invalidNel[String, Int](e) should === (manual)
- Validated.invalid[String, Int](e).toValidatedNel should === (manual)
+ Validated.invalidNel[String, Int](e) should ===(manual)
+ Validated.invalid[String, Int](e).toValidatedNel should ===(manual)
}
}
test("ValidatedNec") {
forAll { (e: String) ⇒
val manual = Validated.invalid[NonEmptyChain[String], Int](NonEmptyChain.one(e))
- Validated.invalidNec[String, Int](e) should === (manual)
- Validated.invalid[String, Int](e).toValidatedNec should === (manual)
+ Validated.invalidNec[String, Int](e) should ===(manual)
+ Validated.invalid[String, Int](e).toValidatedNec should ===(manual)
}
}
test("isInvalid consistent with forall and exists") {
forAll { (v: Validated[String, Int], p: Int => Boolean) =>
if (v.isInvalid) {
- v.forall(p) should === (true)
- v.exists(p) should === (false)
+ v.forall(p) should ===(true)
+ v.exists(p) should ===(false)
} else {
- v.forall(p) should === (v.exists(p))
+ v.forall(p) should ===(v.exists(p))
}
}
}
@@ -114,111 +125,115 @@ class ValidatedSuite extends CatsSuite {
forAll { (v: Validated[String, Int]) =>
var count = 0
v.foreach(_ => count += 1)
- v.isValid should === (count == 1)
- v.isInvalid should === (count == 0)
+ v.isValid should ===(count == 1)
+ v.isInvalid should ===(count == 0)
}
}
test("getOrElse consistent with orElse") {
forAll { (v: Validated[String, Int], u: Validated[String, Int], i: Int) =>
- v.getOrElse(u.getOrElse(i)) should === (v.orElse(u).getOrElse(i))
+ v.getOrElse(u.getOrElse(i)) should ===(v.orElse(u).getOrElse(i))
}
}
test("findValid accumulates failures") {
forAll { (v: Validated[String, Int], u: Validated[String, Int]) =>
- v findValid u shouldEqual { (v, u) match {
- case (vv @ Valid(_), _) => vv
- case (_, uu @ Valid(_)) => uu
- case (Invalid(s1), Invalid(s2)) => Invalid(s1 ++ s2)
- }}
+ v.findValid(u) shouldEqual {
+ (v, u) match {
+ case (vv @ Valid(_), _) => vv
+ case (_, uu @ Valid(_)) => uu
+ case (Invalid(s1), Invalid(s2)) => Invalid(s1 ++ s2)
+ }
+ }
}
}
test("orElse ignores left failure") {
forAll { (v: Validated[String, Int], u: Validated[String, Int]) =>
- v orElse u shouldEqual { (v, u) match {
- case (vv @ Valid(_), _) => vv
- case (_, uu) => uu
- }}
+ v.orElse(u) shouldEqual {
+ (v, u) match {
+ case (vv @ Valid(_), _) => vv
+ case (_, uu) => uu
+ }
+ }
}
}
test("valueOr consistent with swap then map then merge") {
forAll { (v: Validated[String, Int], f: String => Int) =>
- v.valueOr(f) should === (v.swap.map(f).merge)
+ v.valueOr(f) should ===(v.swap.map(f).merge)
}
}
test("toEither then fromEither is identity") {
forAll { (v: Validated[String, Int]) =>
- Validated.fromEither(v.toEither) should === (v)
+ Validated.fromEither(v.toEither) should ===(v)
}
}
test("toList and toOption are empty for invalid") {
forAll { (v: Validated[String, Int]) =>
- v.isInvalid should === (v.toList.isEmpty)
- v.isInvalid should === (v.toOption.isEmpty)
+ v.isInvalid should ===(v.toList.isEmpty)
+ v.isInvalid should ===(v.toOption.isEmpty)
}
}
test("show isn't empty") {
forAll { (v: Validated[String, Int]) =>
val show = implicitly[Show[Validated[String, Int]]]
- show.show(v).nonEmpty should === (true)
+ show.show(v).nonEmpty should ===(true)
}
}
- test("andThen consistent with Either's flatMap"){
+ test("andThen consistent with Either's flatMap") {
forAll { (v: Validated[String, Int], f: Int => Validated[String, Int]) =>
- v.andThen(f) should === (v.withEither(_.flatMap(f(_).toEither)))
+ v.andThen(f) should ===(v.withEither(_.flatMap(f(_).toEither)))
}
}
- test("ad-hoc andThen tests"){
+ test("ad-hoc andThen tests") {
def even(i: Int): Validated[String, Int] =
if (i % 2 == 0) Validated.valid(i)
else Validated.invalid(s"$i is not even")
- (Validated.valid(3) andThen even) should === (Validated.invalid("3 is not even"))
- (Validated.valid(4) andThen even) should === (Validated.valid(4))
- (Validated.invalid("foo") andThen even) should === (Validated.invalid("foo"))
+ (Validated.valid(3).andThen(even)) should ===(Validated.invalid("3 is not even"))
+ (Validated.valid(4).andThen(even)) should ===(Validated.valid(4))
+ (Validated.invalid("foo").andThen(even)) should ===(Validated.invalid("foo"))
}
- test("fromOption consistent with Either.fromOption"){
+ test("fromOption consistent with Either.fromOption") {
forAll { (o: Option[Int], s: String) =>
- Validated.fromOption(o, s) should === (Either.fromOption(o, s).toValidated)
+ Validated.fromOption(o, s) should ===(Either.fromOption(o, s).toValidated)
}
}
- test("fromOption consistent with toOption"){
+ test("fromOption consistent with toOption") {
forAll { (o: Option[Int], s: String) =>
- Validated.fromOption(o, s).toOption should === (o)
+ Validated.fromOption(o, s).toOption should ===(o)
}
}
- test("fromIor consistent with Ior.toValidated"){
+ test("fromIor consistent with Ior.toValidated") {
forAll { (i: Ior[String, Int]) =>
- Validated.fromIor(i) should === (i.toValidated)
+ Validated.fromIor(i) should ===(i.toValidated)
}
}
test("toIor then fromEither is identity") {
forAll { (v: Validated[String, Int]) =>
- Validated.fromIor(v.toIor) should === (v)
+ Validated.fromIor(v.toIor) should ===(v)
}
}
test("isValid after combine, iff both are valid") {
forAll { (lhs: Validated[Int, String], rhs: Validated[Int, String]) =>
- lhs.combine(rhs).isValid should === (lhs.isValid && rhs.isValid)
+ lhs.combine(rhs).isValid should ===(lhs.isValid && rhs.isValid)
}
}
test("isInvalid consistent with isValid") {
forAll { (x: Validated[String, Int]) =>
- x.isInvalid should !== (x.isValid)
+ x.isInvalid should !==(x.isValid)
}
}
@@ -230,24 +245,24 @@ class ValidatedSuite extends CatsSuite {
test("swap negates isInvalid/isValid") {
forAll { (x: Validated[String, Int]) =>
- x.isInvalid should !== (x.swap.isInvalid)
- x.isValid should !== (x.swap.isValid)
+ x.isInvalid should !==(x.swap.isInvalid)
+ x.isValid should !==(x.swap.isValid)
}
}
- test("Unapply-based apply syntax"){
+ test("Unapply-based apply syntax") {
// this type has kind F[_, _], which requires `Unapply`-based syntax
val x: ValidatedNel[String, Int] = Validated.invalidNel("error 1")
val y: ValidatedNel[String, Boolean] = Validated.invalidNel("error 2")
val z = x.map2(y)((i, b) => if (b) i + 1 else i)
- z should === (NonEmptyList.of("error 1", "error 2").invalid[Int])
+ z should ===(NonEmptyList.of("error 1", "error 2").invalid[Int])
}
test("ensure on Invalid is identity") {
- forAll { (x: Validated[Int,String], i: Int, p: String => Boolean) =>
+ forAll { (x: Validated[Int, String], i: Int, p: String => Boolean) =>
if (x.isInvalid) {
- x.ensure(i)(p) should === (x)
+ x.ensure(i)(p) should ===(x)
}
}
}
@@ -255,15 +270,15 @@ class ValidatedSuite extends CatsSuite {
test("ensure should fail if predicate not satisfied") {
forAll { (x: Validated[String, Int], s: String, p: Int => Boolean) =>
if (x.exists(!p(_))) {
- x.ensure(s)(p) should === (Validated.invalid(s))
+ x.ensure(s)(p) should ===(Validated.invalid(s))
}
}
}
test("ensureOr on Invalid is identity") {
- forAll { (x: Validated[Int,String], f: String => Int, p: String => Boolean) =>
+ forAll { (x: Validated[Int, String], f: String => Int, p: String => Boolean) =>
if (x.isInvalid) {
- x.ensureOr(f)(p) should === (x)
+ x.ensureOr(f)(p) should ===(x)
}
}
}
@@ -278,19 +293,19 @@ class ValidatedSuite extends CatsSuite {
test("cond consistent with Either.cond + toValidated") {
forAll { (cond: Boolean, s: String, i: Int) =>
- Validated.cond(cond, s, i) should === (Either.cond(cond, s, i).toValidated)
+ Validated.cond(cond, s, i) should ===(Either.cond(cond, s, i).toValidated)
}
}
test("condNel consistent with Either.cond + toValidatedNel") {
forAll { (cond: Boolean, s: String, i: Int) =>
- Validated.condNel(cond, s, i) should === (Either.cond(cond, s, i).toValidatedNel)
+ Validated.condNel(cond, s, i) should ===(Either.cond(cond, s, i).toValidatedNel)
}
}
test("condNec consistent with Either.cond + toValidatedNec") {
forAll { (cond: Boolean, s: String, i: Int) =>
- Validated.condNec(cond, s, i) should === (Either.cond(cond, s, i).toValidatedNec)
+ Validated.condNec(cond, s, i) should ===(Either.cond(cond, s, i).toValidatedNec)
}
}
diff --git a/tests/src/test/scala/cats/tests/VectorSuite.scala b/tests/src/test/scala/cats/tests/VectorSuite.scala
index 1d9562f8fa..0f89646539 100644
--- a/tests/src/test/scala/cats/tests/VectorSuite.scala
+++ b/tests/src/test/scala/cats/tests/VectorSuite.scala
@@ -2,7 +2,16 @@ package cats
package tests
import cats.data.{NonEmptyVector, ZipVector}
-import cats.laws.discipline.{AlternativeTests, CoflatMapTests, CommutativeApplyTests, MonadTests, SemigroupalTests, SerializableTests, TraverseFilterTests, TraverseTests}
+import cats.laws.discipline.{
+ AlternativeTests,
+ CoflatMapTests,
+ CommutativeApplyTests,
+ MonadTests,
+ SemigroupalTests,
+ SerializableTests,
+ TraverseFilterTests,
+ TraverseTests
+}
import cats.laws.discipline.arbitrary._
class VectorSuite extends CatsSuite {
@@ -27,12 +36,12 @@ class VectorSuite extends CatsSuite {
checkAll("ZipVector[Int]", CommutativeApplyTests[ZipVector].commutativeApply[Int, Int, Int])
test("show") {
- Vector(1, 2, 3).show should === ("Vector(1, 2, 3)")
+ Vector(1, 2, 3).show should ===("Vector(1, 2, 3)")
- Vector.empty[Int].show should === ("Vector()")
+ Vector.empty[Int].show should ===("Vector()")
forAll { vec: Vector[String] =>
- vec.show should === (vec.toString)
+ vec.show should ===(vec.toString)
}
}
@@ -42,7 +51,7 @@ class VectorSuite extends CatsSuite {
}
)
- test("toNev on empty vector returns None"){
+ test("toNev on empty vector returns None") {
assert(Vector.empty[Int].toNev == None)
}
}
diff --git a/tests/src/test/scala/cats/tests/WordCountSuite.scala b/tests/src/test/scala/cats/tests/WordCountSuite.scala
index 5acf01142e..b4e86b42d4 100644
--- a/tests/src/test/scala/cats/tests/WordCountSuite.scala
+++ b/tests/src/test/scala/cats/tests/WordCountSuite.scala
@@ -1,7 +1,7 @@
package cats
package tests
-import cats.data.{ Func, AppFunc, Const }
+import cats.data.{AppFunc, Const, Func}
import Func.appFunc
/*
@@ -10,8 +10,9 @@ import Func.appFunc
*/
class WordCountSuite extends CatsSuite {
test("wordcount") {
- import cats.data.State.{ get, set }
- val text = "Faith, I must leave thee, love, and shortly too.\nMy operant powers their functions leave to do.\n".toList
+ import cats.data.State.{get, set}
+ val text =
+ "Faith, I must leave thee, love, and shortly too.\nMy operant powers their functions leave to do.\n".toList
// A type alias to treat Int as semigroupal applicative
type Count[A] = Const[Int, A]
// Tye type parameter to Count is ceremonial, so hardcode it to Unit
@@ -24,7 +25,9 @@ class WordCountSuite extends CatsSuite {
def testIf(b: Boolean): Int = if (b) 1 else 0
// An applicative functor to count each line
val countLine: AppFunc[Count, Char, Unit] =
- appFunc { (c: Char) => liftInt(testIf(c == '\n')) }
+ appFunc { (c: Char) =>
+ liftInt(testIf(c == '\n'))
+ }
def isSpace(c: Char): Boolean = (c == ' ' || c == '\n')
// To count words, we need to detect transitions from whitespace to non-whitespace.
@@ -35,17 +38,17 @@ class WordCountSuite extends CatsSuite {
y = !isSpace(c)
_ <- set(y)
} yield testIf(y && !x)
- } andThen appFunc(liftInt)
+ }.andThen(appFunc(liftInt))
- val countAll = countWord product countLine product countChar
+ val countAll = countWord.product(countLine).product(countChar)
// Run all applicative functions at once
val allResults = countAll.traverse(text)
val wordCountState = allResults.first.first
val lineCount = allResults.first.second
val charCount = allResults.second
val wordCount = wordCountState.value.runA(false).value
- charCount.getConst should === (96)
- lineCount.getConst should === (2)
- wordCount.getConst should === (17)
+ charCount.getConst should ===(96)
+ lineCount.getConst should ===(2)
+ wordCount.getConst should ===(17)
}
}
diff --git a/tests/src/test/scala/cats/tests/WriterSuite.scala b/tests/src/test/scala/cats/tests/WriterSuite.scala
index c0850c084f..1c9e4a7d91 100644
--- a/tests/src/test/scala/cats/tests/WriterSuite.scala
+++ b/tests/src/test/scala/cats/tests/WriterSuite.scala
@@ -4,22 +4,22 @@ package tests
import cats.data.Writer
class WriterSuite extends CatsSuite {
- test("pure syntax creates a writer with an empty log"){
+ test("pure syntax creates a writer with an empty log") {
forAll { (result: String) =>
type Logged[A] = Writer[List[Int], A]
- result.pure[Logged] should === (Writer(List.empty[Int], result))
+ result.pure[Logged] should ===(Writer(List.empty[Int], result))
}
}
- test("tell syntax creates a writer with a unit result"){
+ test("tell syntax creates a writer with a unit result") {
forAll { (log: List[Int]) =>
- log.tell should === (Writer(log, ()))
+ log.tell should ===(Writer(log, ()))
}
}
test("writer syntax creates a writer with the specified result and log") {
forAll { (result: String, log: List[Int]) =>
- result.writer(log) should === (Writer(log, result))
+ result.writer(log) should ===(Writer(log, result))
}
}
}
diff --git a/tests/src/test/scala/cats/tests/WriterTSuite.scala b/tests/src/test/scala/cats/tests/WriterTSuite.scala
index 8ddf08c612..2862c193a4 100644
--- a/tests/src/test/scala/cats/tests/WriterTSuite.scala
+++ b/tests/src/test/scala/cats/tests/WriterTSuite.scala
@@ -22,46 +22,47 @@ class WriterTSuite extends CatsSuite {
checkAll("Eq[WriterT[List, Int, Int]]", SerializableTests.serializable(Eq[WriterT[List, Int, Int]]))
checkAll("WriterT[Show, Int, Int]", ContravariantTests[WriterT[Show, Int, ?]].contravariant[Int, Int, Int])
- checkAll("Contravariant[WriterT[Show, Int, Int]]", SerializableTests.serializable(Contravariant[WriterT[Show, Int, ?]]))
+ checkAll("Contravariant[WriterT[Show, Int, Int]]",
+ SerializableTests.serializable(Contravariant[WriterT[Show, Int, ?]]))
// check that this resolves
Eq[Writer[Int, Int]]
- test("double swap is a noop"){
+ test("double swap is a noop") {
forAll { w: WriterT[List, Int, Int] =>
- w.swap.swap should === (w)
+ w.swap.swap should ===(w)
}
}
- test("reset on pure is a noop"){
+ test("reset on pure is a noop") {
forAll { i: Int =>
val w = Monad[WriterT[List, Int, ?]].pure(i)
- w should === (w.reset)
+ w should ===(w.reset)
}
}
- test("reset consistency"){
+ test("reset consistency") {
forAll { (i: Int, w1: WriterT[Id, Int, Int], w2: WriterT[Id, Int, Int]) =>
// if the value is the same, everything should be the same
- w1.map(_ => i).reset should === (w2.map(_ => i).reset)
+ w1.map(_ => i).reset should ===(w2.map(_ => i).reset)
}
}
test("tell + written is identity") {
forAll { (i: Int) =>
- WriterT.tell[Id, Int](i).written should === (i)
+ WriterT.tell[Id, Int](i).written should ===(i)
}
}
test("value + value is identity") {
forAll { (i: Int) =>
- WriterT.value[Id, Int, Int](i).value should === (i)
+ WriterT.value[Id, Int, Int](i).value should ===(i)
}
}
test("valueT + value is identity") {
forAll { (i: Int) =>
- WriterT.valueT[Id, Int, Int](i).value should === (i)
+ WriterT.valueT[Id, Int, Int](i).value should ===(i)
}
}
@@ -69,30 +70,30 @@ class WriterTSuite extends CatsSuite {
forAll { (i: Int) =>
val writer: Writer[String, Int] = Writer.value(i)
val writerT: WriterT[Option, String, Int] = WriterT.liftF(Some(i))
- writer.run.some should === (writerT.run)
+ writer.run.some should ===(writerT.run)
}
}
test("show") {
val writerT: WriterT[Id, List[String], String] = WriterT.put("foo")(List("Some log message"))
- writerT.show should === ("(List(Some log message),foo)")
+ writerT.show should ===("(List(Some log message),foo)")
}
test("tell appends to log") {
val w1: Writer[String, Int] = Writer.value(3)
val w2 = w1.tell("foo")
- w2 should === (Writer("foo", 3))
- w2.tell("bar") should === (Writer("foobar", 3))
+ w2 should ===(Writer("foo", 3))
+ w2.tell("bar") should ===(Writer("foobar", 3))
}
test("tell instantiates a Writer") {
- Writer.tell("foo").written should === ("foo")
+ Writer.tell("foo").written should ===("foo")
}
test("mapK consistent with f(value)+pure") {
val f: List ~> Option = λ[List ~> Option](_.headOption)
forAll { (writert: WriterT[List, String, Int]) =>
- writert.mapK(f) should === (WriterT(f(writert.run)))
+ writert.mapK(f) should ===(WriterT(f(writert.run)))
}
}
@@ -100,8 +101,10 @@ class WriterTSuite extends CatsSuite {
// F has a SemigroupK
implicit val F: SemigroupK[ListWrapper] = ListWrapper.semigroupK
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", SemigroupKTests[WriterT[ListWrapper, ListWrapper[Int], ?]].semigroupK[Int])
- checkAll("SemigroupK[WriterT[ListWrapper, ListWrapper[Int], ?]]", SerializableTests.serializable(SemigroupK[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ SemigroupKTests[WriterT[ListWrapper, ListWrapper[Int], ?]].semigroupK[Int])
+ checkAll("SemigroupK[WriterT[ListWrapper, ListWrapper[Int], ?]]",
+ SerializableTests.serializable(SemigroupK[WriterT[ListWrapper, ListWrapper[Int], ?]]))
}
{
@@ -110,16 +113,20 @@ class WriterTSuite extends CatsSuite {
SemigroupK[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", MonoidKTests[WriterT[ListWrapper, ListWrapper[Int], ?]].monoidK[Int])
- checkAll("MonoidK[WriterT[ListWrapper, ListWrapper[Int], ?]]", SerializableTests.serializable(MonoidK[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ MonoidKTests[WriterT[ListWrapper, ListWrapper[Int], ?]].monoidK[Int])
+ checkAll("MonoidK[WriterT[ListWrapper, ListWrapper[Int], ?]]",
+ SerializableTests.serializable(MonoidK[WriterT[ListWrapper, ListWrapper[Int], ?]]))
}
{
// F has a Functor and L has no Semigroup
implicit val F: Functor[ListWrapper] = ListWrapper.functor
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", FunctorTests[WriterT[ListWrapper, ListWrapper[Int], ?]].functor[Int, Int, Int])
- checkAll("Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]", SerializableTests.serializable(Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ FunctorTests[WriterT[ListWrapper, ListWrapper[Int], ?]].functor[Int, Int, Int])
+ checkAll("Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]))
checkAll("WriterT[Listwrapper, Int, ?]", CoflatMapTests[WriterT[ListWrapper, Int, ?]].coflatMap[Int, Int, Int])
checkAll("WriterT[ListWrapper, Int, ?]", SerializableTests.serializable(CoflatMap[WriterT[ListWrapper, Int, ?]]))
@@ -131,11 +138,14 @@ class WriterTSuite extends CatsSuite {
Functor[Logged]
- checkAll("WriterT[ListWrapper, ?, ?]", BifunctorTests[WriterT[ListWrapper, ?, ?]].bifunctor[Int, Int, Int, Int, Int, Int])
- checkAll("Bifunctor[WriterT[ListWrapper, ?, ?]]", SerializableTests.serializable(Bifunctor[WriterT[ListWrapper, ?, ?]]))
+ checkAll("WriterT[ListWrapper, ?, ?]",
+ BifunctorTests[WriterT[ListWrapper, ?, ?]].bifunctor[Int, Int, Int, Int, Int, Int])
+ checkAll("Bifunctor[WriterT[ListWrapper, ?, ?]]",
+ SerializableTests.serializable(Bifunctor[WriterT[ListWrapper, ?, ?]]))
}
- implicit val iso = SemigroupalTests.Isomorphisms.invariant[WriterT[ListWrapper, ListWrapper[Int], ?]](WriterT.catsDataCoflatMapForWriterT(ListWrapper.functor))
+ implicit val iso = SemigroupalTests.Isomorphisms
+ .invariant[WriterT[ListWrapper, ListWrapper[Int], ?]](WriterT.catsDataCoflatMapForWriterT(ListWrapper.functor))
// We have varying instances available depending on `F` and `L`.
// We also battle some inference issues with `Id`.
@@ -147,8 +157,10 @@ class WriterTSuite extends CatsSuite {
implicit val L: Semigroup[ListWrapper[Int]] = ListWrapper.semigroup[Int]
Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", ApplyTests[WriterT[ListWrapper, ListWrapper[Int], ?]].apply[Int, Int, Int])
- checkAll("Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]", SerializableTests.serializable(Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ ApplyTests[WriterT[ListWrapper, ListWrapper[Int], ?]].apply[Int, Int, Int])
+ checkAll("Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]))
Functor[WriterT[Id, ListWrapper[Int], ?]]
Apply[WriterT[Id, ListWrapper[Int], ?]]
@@ -171,8 +183,10 @@ class WriterTSuite extends CatsSuite {
Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]
Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]
CoflatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?] 1", FlatMapTests[WriterT[ListWrapper, ListWrapper[Int], ?]].flatMap[Int, Int, Int])
- checkAll("FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]] 1", SerializableTests.serializable(FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?] 1",
+ FlatMapTests[WriterT[ListWrapper, ListWrapper[Int], ?]].flatMap[Int, Int, Int])
+ checkAll("FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]] 1",
+ SerializableTests.serializable(FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]))
Functor[WriterT[Id, ListWrapper[Int], ?]]
Apply[WriterT[Id, ListWrapper[Int], ?]]
@@ -197,8 +211,10 @@ class WriterTSuite extends CatsSuite {
Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]
Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]
CoflatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?] 2", FlatMapTests[WriterT[ListWrapper, ListWrapper[Int], ?]].flatMap[Int, Int, Int])
- checkAll("FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]] 2", SerializableTests.serializable(FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?] 2",
+ FlatMapTests[WriterT[ListWrapper, ListWrapper[Int], ?]].flatMap[Int, Int, Int])
+ checkAll("FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]] 2",
+ SerializableTests.serializable(FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]))
Functor[WriterT[Id, ListWrapper[Int], ?]]
Apply[WriterT[Id, ListWrapper[Int], ?]]
@@ -224,8 +240,10 @@ class WriterTSuite extends CatsSuite {
Functor[WriterT[ListWrapper, ListWrapper[Int], ?]]
Apply[WriterT[ListWrapper, ListWrapper[Int], ?]]
CoflatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", ApplicativeTests[WriterT[ListWrapper, ListWrapper[Int], ?]].applicative[Int, Int, Int])
- checkAll("Applicative[WriterT[ListWrapper, ListWrapper[Int], ?]]", SerializableTests.serializable(Applicative[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ ApplicativeTests[WriterT[ListWrapper, ListWrapper[Int], ?]].applicative[Int, Int, Int])
+ checkAll("Applicative[WriterT[ListWrapper, ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Applicative[WriterT[ListWrapper, ListWrapper[Int], ?]]))
Functor[WriterT[Id, ListWrapper[Int], ?]]
Apply[WriterT[Id, ListWrapper[Int], ?]]
@@ -253,8 +271,10 @@ class WriterTSuite extends CatsSuite {
Applicative[WriterT[ListWrapper, ListWrapper[Int], ?]]
FlatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]
CoflatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", MonadTests[WriterT[ListWrapper, ListWrapper[Int], ?]].monad[Int, Int, Int])
- checkAll("Monad[WriterT[ListWrapper, ListWrapper[Int], ?], List[String]]", SerializableTests.serializable(Monad[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ MonadTests[WriterT[ListWrapper, ListWrapper[Int], ?]].monad[Int, Int, Int])
+ checkAll("Monad[WriterT[ListWrapper, ListWrapper[Int], ?], List[String]]",
+ SerializableTests.serializable(Monad[WriterT[ListWrapper, ListWrapper[Int], ?]]))
Functor[WriterT[Id, ListWrapper[Int], ?]]
Apply[WriterT[Id, ListWrapper[Int], ?]]
@@ -288,17 +308,20 @@ class WriterTSuite extends CatsSuite {
Applicative[WriterT[ListWrapper, ListWrapper[Int], ?]]
Alternative[WriterT[ListWrapper, ListWrapper[Int], ?]]
CoflatMap[WriterT[ListWrapper, ListWrapper[Int], ?]]
- checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]", AlternativeTests[WriterT[ListWrapper, ListWrapper[Int], ?]].alternative[Int, Int, Int])
- checkAll("Alternative[WriterT[ListWrapper, ListWrapper[Int], ?]]", SerializableTests.serializable(Alternative[WriterT[ListWrapper, ListWrapper[Int], ?]]))
+ checkAll("WriterT[ListWrapper, ListWrapper[Int], ?]",
+ AlternativeTests[WriterT[ListWrapper, ListWrapper[Int], ?]].alternative[Int, Int, Int])
+ checkAll("Alternative[WriterT[ListWrapper, ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Alternative[WriterT[ListWrapper, ListWrapper[Int], ?]]))
}
{
- // F[(L, V)] has a monoid
+ // F[(L, V)] has a monoid
implicit val FLV: Monoid[ListWrapper[(Int, Int)]] = ListWrapper.monoid[(Int, Int)]
Monoid[WriterT[ListWrapper, Int, Int]]
checkAll("WriterT[ListWrapper, Int, Int]", MonoidTests[WriterT[ListWrapper, Int, Int]].monoid)
- checkAll("Monoid[WriterT[ListWrapper, Int, Int]]", SerializableTests.serializable(Monoid[WriterT[ListWrapper, Int, Int]]))
+ checkAll("Monoid[WriterT[ListWrapper, Int, Int]]",
+ SerializableTests.serializable(Monoid[WriterT[ListWrapper, Int, Int]]))
Monoid[Writer[Int, Int]]
checkAll("Writer[Int, Int]", MonoidTests[Writer[Int, Int]].monoid)
@@ -310,7 +333,8 @@ class WriterTSuite extends CatsSuite {
Semigroup[WriterT[ListWrapper, Int, Int]]
checkAll("WriterT[ListWrapper, Int, Int]", SemigroupTests[WriterT[ListWrapper, Int, Int]].semigroup)
- checkAll("Semigroup[WriterT[ListWrapper, Int, Int]]", SerializableTests.serializable(Semigroup[WriterT[ListWrapper, Int, Int]]))
+ checkAll("Semigroup[WriterT[ListWrapper, Int, Int]]",
+ SerializableTests.serializable(Semigroup[WriterT[ListWrapper, Int, Int]]))
Semigroup[Writer[Int, Int]]
checkAll("Writer[Int, Int]", SemigroupTests[Writer[Int, Int]].semigroup)
@@ -321,7 +345,7 @@ class WriterTSuite extends CatsSuite {
implicit val L: Monoid[ListWrapper[Int]] = ListWrapper.monoid[Int]
implicit val app = WriterT.catsDataApplicativeForWriterT[Validated[String, ?], ListWrapper[Int]]
implicit val iso = SemigroupalTests.Isomorphisms.invariant[WriterT[Validated[String, ?], ListWrapper[Int], ?]]
- implicit def eq1[A:Eq]: Eq[WriterT[Validated[String, ?], ListWrapper[Int], A]] =
+ implicit def eq1[A: Eq]: Eq[WriterT[Validated[String, ?], ListWrapper[Int], A]] =
WriterT.catsDataEqForWriterT[Validated[String, ?], ListWrapper[Int], A]
implicit val eq2: Eq[EitherT[WriterT[Validated[String, ?], ListWrapper[Int], ?], String, Int]] =
EitherT.catsDataEqForEitherT[WriterT[Validated[String, ?], ListWrapper[Int], ?], String, Int]
@@ -330,8 +354,12 @@ class WriterTSuite extends CatsSuite {
Apply[WriterT[Validated[String, ?], ListWrapper[Int], ?]]
Applicative[WriterT[Validated[String, ?], ListWrapper[Int], ?]]
- checkAll("WriterT[Validated[String, ?], ListWrapper[Int], ?]", ApplicativeTests[WriterT[Validated[String, ?], ListWrapper[Int], ?]].applicative[Int, Int, Int])
- checkAll("Applicative[WriterT[Validated[String, ?], ListWrapper[Int], ?]]", SerializableTests.serializable(Applicative[WriterT[Validated[String, ?], ListWrapper[Int], ?]]))
+ checkAll("WriterT[Validated[String, ?], ListWrapper[Int], ?]",
+ ApplicativeTests[WriterT[Validated[String, ?], ListWrapper[Int], ?]].applicative[Int, Int, Int])
+ checkAll(
+ "Applicative[WriterT[Validated[String, ?], ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Applicative[WriterT[Validated[String, ?], ListWrapper[Int], ?]])
+ )
}
{
@@ -339,16 +367,22 @@ class WriterTSuite extends CatsSuite {
implicit val L: Monoid[ListWrapper[Int]] = ListWrapper.monoid[Int]
implicit val appErr = WriterT.catsDataApplicativeErrorForWriterT[Validated[String, ?], ListWrapper[Int], String]
implicit val iso = SemigroupalTests.Isomorphisms.invariant[WriterT[Validated[String, ?], ListWrapper[Int], ?]]
- checkAll("WriterT[Validated[String, ?], ListWrapper[Int], ?]", ApplicativeErrorTests[WriterT[Validated[String, ?], ListWrapper[Int], ?], String].applicativeError[Int, Int, Int])
- checkAll("ApplicativeError[WriterT[Validated[String, ?], ListWrapper[Int], ?], Unit]", SerializableTests.serializable(ApplicativeError[WriterT[Validated[String, ?], ListWrapper[Int], ?], String]))
+ checkAll(
+ "WriterT[Validated[String, ?], ListWrapper[Int], ?]",
+ ApplicativeErrorTests[WriterT[Validated[String, ?], ListWrapper[Int], ?], String].applicativeError[Int, Int, Int]
+ )
+ checkAll(
+ "ApplicativeError[WriterT[Validated[String, ?], ListWrapper[Int], ?], Unit]",
+ SerializableTests.serializable(ApplicativeError[WriterT[Validated[String, ?], ListWrapper[Int], ?], String])
+ )
}
{
// F has a MonadError and L has a Monoid
implicit val L: Monoid[ListWrapper[Int]] = ListWrapper.monoid[Int]
implicit val iso = SemigroupalTests.Isomorphisms.invariant[WriterT[Option, ListWrapper[Int], ?]]
- implicit val eq0: Eq[EitherT[WriterT[Option, ListWrapper[Int], ?], Unit, Int]] = EitherT.catsDataEqForEitherT[WriterT[Option, ListWrapper[Int], ?], Unit, Int]
-
+ implicit val eq0: Eq[EitherT[WriterT[Option, ListWrapper[Int], ?], Unit, Int]] =
+ EitherT.catsDataEqForEitherT[WriterT[Option, ListWrapper[Int], ?], Unit, Int]
Functor[WriterT[Option, ListWrapper[Int], ?]]
Apply[WriterT[Option, ListWrapper[Int], ?]]
@@ -358,16 +392,20 @@ class WriterTSuite extends CatsSuite {
Monad[WriterT[Option, ListWrapper[Int], ?]]
ApplicativeError[WriterT[Option, ListWrapper[Int], ?], Unit]
- checkAll("WriterT[Option, ListWrapper[Int], ?]", MonadErrorTests[WriterT[Option, ListWrapper[Int], ?], Unit].monadError[Int, Int, Int])
- checkAll("MonadError[WriterT[Option, ListWrapper[Int], ?], Unit]", SerializableTests.serializable(MonadError[WriterT[Option, ListWrapper[Int], ?], Unit]))
+ checkAll("WriterT[Option, ListWrapper[Int], ?]",
+ MonadErrorTests[WriterT[Option, ListWrapper[Int], ?], Unit].monadError[Int, Int, Int])
+ checkAll("MonadError[WriterT[Option, ListWrapper[Int], ?], Unit]",
+ SerializableTests.serializable(MonadError[WriterT[Option, ListWrapper[Int], ?], Unit]))
}
{
// F has a ContravariantMonoidal
ContravariantMonoidal[WriterT[Const[String, ?], Int, ?]]
- checkAll("WriterT[Const[String, ?], Int, ?]", ContravariantMonoidalTests[WriterT[Const[String, ?], Int, ?]].contravariantMonoidal[Int, Int, Int])
- checkAll("ContravariantMonoidal[WriterT[Const[String, ?], Int, ?]]", SerializableTests.serializable(ContravariantMonoidal[WriterT[Const[String, ?], Int, ?]]))
+ checkAll("WriterT[Const[String, ?], Int, ?]",
+ ContravariantMonoidalTests[WriterT[Const[String, ?], Int, ?]].contravariantMonoidal[Int, Int, Int])
+ checkAll("ContravariantMonoidal[WriterT[Const[String, ?], Int, ?]]",
+ SerializableTests.serializable(ContravariantMonoidal[WriterT[Const[String, ?], Int, ?]]))
}
{
@@ -377,7 +415,8 @@ class WriterTSuite extends CatsSuite {
Invariant[WriterT[ListWrapper, Int, ?]]
checkAll("WriterT[ListWrapper, Int, ?]", InvariantTests[WriterT[ListWrapper, Int, ?]].invariant[Int, Int, Int])
- checkAll("Invariant[WriterT[ListWrapper, Int, ?]]", SerializableTests.serializable(Invariant[WriterT[ListWrapper, Int, ?]]))
+ checkAll("Invariant[WriterT[ListWrapper, Int, ?]]",
+ SerializableTests.serializable(Invariant[WriterT[ListWrapper, Int, ?]]))
}
{
@@ -386,8 +425,10 @@ class WriterTSuite extends CatsSuite {
Foldable[Const[String, ?]]
Foldable[WriterT[Const[String, ?], ListWrapper[Int], ?]]
- checkAll("WriterT[Const[String, ?], ListWrapper[Int], ?]", FoldableTests[WriterT[Const[String, ?], ListWrapper[Int], ?]].foldable[Int, Int])
- checkAll("Foldable[WriterT[Const[String, ?], ListWrapper[Int], ?]]", SerializableTests.serializable(Foldable[WriterT[Const[String, ?], ListWrapper[Int], ?]]))
+ checkAll("WriterT[Const[String, ?], ListWrapper[Int], ?]",
+ FoldableTests[WriterT[Const[String, ?], ListWrapper[Int], ?]].foldable[Int, Int])
+ checkAll("Foldable[WriterT[Const[String, ?], ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Foldable[WriterT[Const[String, ?], ListWrapper[Int], ?]]))
Foldable[Id]
Foldable[WriterT[Id, ListWrapper[Int], ?]]
@@ -402,22 +443,27 @@ class WriterTSuite extends CatsSuite {
Traverse[Const[String, ?]]
Traverse[WriterT[Const[String, ?], ListWrapper[Int], ?]]
- checkAll("WriterT[Const[String, ?], ListWrapper[Int], ?]", TraverseTests[WriterT[Const[String, ?], ListWrapper[Int], ?]].traverse[Int, Int, Int, Int, Option, Option])
- checkAll("Traverse[WriterT[Const[String, ?], ListWrapper[Int], ?]]", SerializableTests.serializable(Traverse[WriterT[Const[String, ?], ListWrapper[Int], ?]]))
+ checkAll("WriterT[Const[String, ?], ListWrapper[Int], ?]",
+ TraverseTests[WriterT[Const[String, ?], ListWrapper[Int], ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("Traverse[WriterT[Const[String, ?], ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Traverse[WriterT[Const[String, ?], ListWrapper[Int], ?]]))
Traverse[Id]
Traverse[WriterT[Id, ListWrapper[Int], ?]]
Traverse[Writer[ListWrapper[Int], ?]]
- checkAll("WriterT[Id, ListWrapper[Int], ?]", TraverseTests[WriterT[Id, ListWrapper[Int], ?]].traverse[Int, Int, Int, Int, Option, Option])
+ checkAll("WriterT[Id, ListWrapper[Int], ?]",
+ TraverseTests[WriterT[Id, ListWrapper[Int], ?]].traverse[Int, Int, Int, Int, Option, Option])
}
{
// F has a Comonad and L has a Monoid
Comonad[WriterT[(String, ?), ListWrapper[Int], ?]]
- checkAll("WriterT[(String, ?), ListWrapper[Int], ?]", ComonadTests[WriterT[(String, ?), ListWrapper[Int], ?]].comonad[Int, Int, Int])
- checkAll("Comonad[WriterT[(String, ?), ListWrapper[Int], ?]]", SerializableTests.serializable(Comonad[WriterT[(String, ?), ListWrapper[Int], ?]]))
+ checkAll("WriterT[(String, ?), ListWrapper[Int], ?]",
+ ComonadTests[WriterT[(String, ?), ListWrapper[Int], ?]].comonad[Int, Int, Int])
+ checkAll("Comonad[WriterT[(String, ?), ListWrapper[Int], ?]]",
+ SerializableTests.serializable(Comonad[WriterT[(String, ?), ListWrapper[Int], ?]]))
Comonad[Id]
Comonad[WriterT[Id, ListWrapper[Int], ?]]
@@ -427,5 +473,6 @@ class WriterTSuite extends CatsSuite {
}
checkAll("WriterT[Option, Int, ?]", CommutativeMonadTests[WriterT[Option, Int, ?]].commutativeMonad[Int, Int, Int])
- checkAll("CommutativeMonad[WriterT[Option, Int, ?]]",SerializableTests.serializable(CommutativeMonad[WriterT[Option, Int, ?]]))
+ checkAll("CommutativeMonad[WriterT[Option, Int, ?]]",
+ SerializableTests.serializable(CommutativeMonad[WriterT[Option, Int, ?]]))
}