The easiest approach to Сats imports is to import everything that's commonly needed:

import cats._
import cats.syntax.all._

The cats._ import brings in quite a few type classes (similar to interfaces) such as Monad, Semigroup, and Foldable. Instead of the entire cats package, you can import only the types that you need, for example:

import cats.Monad
import cats.Semigroup
import cats.Foldable

The, import brings in data structures such as Validated and State. Instead of the entire package, you can import only the types that you need, for example:


The cats.syntax.all._ import adds syntax enrichment onto certain types to provide some handy methods such as right-biased Either combinators:

import cats.syntax.all._

// Сats adds right-biased combinators to the standard library's Either
val e: Either[String, Int] = Right(3)
// e: Either[String, Int] = Right(value = 3) + 1)
// res4: Either[String, Int] = Right(value = 4)

// cats adds an orEmpty method to the standard library's Option
val o: Option[String] = None
// o: Option[String] = None
// res5: String = ""

If you'd like to import à la carte, you can do so, by importing from cats.syntax for syntax enrichment. For example, if you'd like to import the Semigroup syntax:

import cats.syntax.semigroup._

"Hello, " |+| "World!"
// res7: String = "Hello, World!"

The import adds the |+| syntax.

Note: Beware that if you import a type class instance or its syntax twice, you will receive conflicting implicits with a less than helpful error message. This usually happens when importing different type classes in the same hierarchy or when importing syntax enrichment for all type classes using cats.syntax.all._ or cats.implicits._ together with a more specific import like cats.syntax.option._ or cats.instances.either._. Below is an example of this phenomenon:

import cats.syntax.all._

1 |+| 2

import cats.syntax.semigroup._

3 |+| 5 // error: value |+| is not a member of Int

Compilation fails on the second invocation of |+| because we now have conflicting implicits from Semigroup.