Packages

trait Functor[F[_]] extends Invariant[F]

Functor.

The name is short for "covariant functor".

Must obey the laws defined in cats.laws.FunctorLaws.

Self Type
Functor[F]
Annotations
@implicitNotFound( ... ) @typeclass( ... , ... )
Source
Functor.scala
Linear Supertypes
Invariant[F], Serializable, Serializable, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Functor
  2. Invariant
  3. Serializable
  4. Serializable
  5. AnyRef
  6. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def map[A, B](fa: F[A])(f: (A) ⇒ B): F[B]

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def as[A, B](fa: F[A], b: B): F[B]

    Replaces the A value in F[A] with the supplied value.

    Replaces the A value in F[A] with the supplied value.

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForList
    
    scala> Functor[List].as(List(1,2,3), "hello")
    res0: List[String] = List(hello, hello, hello)
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native() @IntrinsicCandidate()
  7. def compose[G[_]](implicit arg0: Functor[G]): Functor[[α]F[G[α]]]
  8. def compose[G[_]](implicit arg0: Invariant[G]): Invariant[[α]F[G[α]]]

    Compose Invariant F[_] and G[_] then produce Invariant[F[G[_]]] using their imap.

    Compose Invariant F[_] and G[_] then produce Invariant[F[G[_]]] using their imap.

    Example:

    scala> import cats.implicits._
    scala> import scala.concurrent.duration._
    
    scala> val durSemigroupList: Semigroup[List[FiniteDuration]] =
         | Invariant[Semigroup].compose[List].imap(Semigroup[List[Long]])(Duration.fromNanos)(_.toNanos)
    scala> durSemigroupList.combine(List(2.seconds, 3.seconds), List(4.seconds))
    res1: List[FiniteDuration] = List(2 seconds, 3 seconds, 4 seconds)
    Definition Classes
    Invariant
  9. def composeContravariant[G[_]](implicit arg0: Contravariant[G]): Contravariant[[α]F[G[α]]]

    Compose Invariant F[_] and Contravariant G[_] then produce Invariant[F[G[_]]] using F's imap and G's contramap.

    Compose Invariant F[_] and Contravariant G[_] then produce Invariant[F[G[_]]] using F's imap and G's contramap.

    Example:

    scala> import cats.implicits._
    scala> import scala.concurrent.duration._
    
    scala> type ToInt[T] = T => Int
    scala> val durSemigroupToInt: Semigroup[ToInt[FiniteDuration]] =
         | Invariant[Semigroup]
         |   .composeContravariant[ToInt]
         |   .imap(Semigroup[ToInt[Long]])(Duration.fromNanos)(_.toNanos)
    // semantically equal to (2.seconds.toSeconds.toInt + 1) + (2.seconds.toSeconds.toInt * 2) = 7
    scala> durSemigroupToInt.combine(_.toSeconds.toInt + 1, _.toSeconds.toInt * 2)(2.seconds)
    res1: Int = 7
    Definition Classes
    FunctorInvariant
  10. def composeFunctor[G[_]](implicit arg0: Functor[G]): Invariant[[α]F[G[α]]]

    Compose Invariant F[_] and Functor G[_] then produce Invariant[F[G[_]]] using F's imap and G's map.

    Compose Invariant F[_] and Functor G[_] then produce Invariant[F[G[_]]] using F's imap and G's map.

    Example:

    scala> import cats.implicits._
    scala> import scala.concurrent.duration._
    
    scala> val durSemigroupList: Semigroup[List[FiniteDuration]] =
         | Invariant[Semigroup]
         |   .composeFunctor[List]
         |   .imap(Semigroup[List[Long]])(Duration.fromNanos)(_.toNanos)
    scala> durSemigroupList.combine(List(2.seconds, 3.seconds), List(4.seconds))
    res1: List[FiniteDuration] = List(2 seconds, 3 seconds, 4 seconds)
    Definition Classes
    Invariant
  11. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  13. final def fmap[A, B](fa: F[A])(f: (A) ⇒ B): F[B]

    Alias for map, since map can't be injected as syntax if the implementing type already had a built-in .map method.

    Alias for map, since map can't be injected as syntax if the implementing type already had a built-in .map method.

    Example:

    scala> import cats.implicits._
    
    scala> val m: Map[Int, String] = Map(1 -> "hi", 2 -> "there", 3 -> "you")
    
    scala> m.fmap(_ ++ "!")
    res0: Map[Int,String] = Map(1 -> hi!, 2 -> there!, 3 -> you!)
  14. def fproduct[A, B](fa: F[A])(f: (A) ⇒ B): F[(A, B)]

    Tuple the values in fa with the result of applying a function with the value

    Tuple the values in fa with the result of applying a function with the value

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForOption
    
    scala> Functor[Option].fproduct(Option(42))(_.toString)
    res0: Option[(Int, String)] = Some((42,42))
  15. def fproductLeft[A, B](fa: F[A])(f: (A) ⇒ B): F[(B, A)]

    Pair the result of function application with A.

    Pair the result of function application with A.

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForOption
    
    scala> Functor[Option].fproductLeft(Option(42))(_.toString)
    res0: Option[(String, Int)] = Some((42,42))
  16. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  17. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  18. def ifF[A](fb: F[Boolean])(ifTrue: ⇒ A, ifFalse: ⇒ A): F[A]

    Lifts if to Functor

    Lifts if to Functor

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForList
    
    scala> Functor[List].ifF(List(true, false, false))(1, 0)
    res0: List[Int] = List(1, 0, 0)
    Annotations
    @noop()
  19. def imap[A, B](fa: F[A])(f: (A) ⇒ B)(g: (B) ⇒ A): F[B]

    Transform an F[A] into an F[B] by providing a transformation from A to B and one from B to A.

    Transform an F[A] into an F[B] by providing a transformation from A to B and one from B to A.

    Example:

    scala> import cats.implicits._
    scala> import scala.concurrent.duration._
    
    scala> val durSemigroup: Semigroup[FiniteDuration] =
         | Invariant[Semigroup].imap(Semigroup[Long])(Duration.fromNanos)(_.toNanos)
    scala> durSemigroup.combine(2.seconds, 3.seconds)
    res1: FiniteDuration = 5 seconds
    Definition Classes
    FunctorInvariant
  20. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  21. def lift[A, B](f: (A) ⇒ B): (F[A]) ⇒ F[B]

    Lift a function f to operate on Functors

    Lift a function f to operate on Functors

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForOption
    
    scala> val o = Option(42)
    scala> Functor[Option].lift((x: Int) => x + 10)(o)
    res0: Option[Int] = Some(52)
  22. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  23. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  24. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  25. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  26. def toString(): String
    Definition Classes
    AnyRef → Any
  27. def tupleLeft[A, B](fa: F[A], b: B): F[(B, A)]

    Tuples the A value in F[A] with the supplied B value, with the B value on the left.

    Tuples the A value in F[A] with the supplied B value, with the B value on the left.

    Example:

    scala> import scala.collection.immutable.Queue
    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForQueue
    
    scala> Functor[Queue].tupleLeft(Queue("hello", "world"), 42)
    res0: scala.collection.immutable.Queue[(Int, String)] = Queue((42,hello), (42,world))
  28. def tupleRight[A, B](fa: F[A], b: B): F[(A, B)]

    Tuples the A value in F[A] with the supplied B value, with the B value on the right.

    Tuples the A value in F[A] with the supplied B value, with the B value on the right.

    Example:

    scala> import scala.collection.immutable.Queue
    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForQueue
    
    scala> Functor[Queue].tupleRight(Queue("hello", "world"), 42)
    res0: scala.collection.immutable.Queue[(String, Int)] = Queue((hello,42), (world,42))
  29. def unzip[A, B](fab: F[(A, B)]): (F[A], F[B])

    Un-zips an F[(A, B)] consisting of element pairs or Tuple2 into two separate F's tupled.

    Un-zips an F[(A, B)] consisting of element pairs or Tuple2 into two separate F's tupled.

    NOTE: Check for effect duplication, possibly memoize before

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForList
    
    scala> Functor[List].unzip(List((1,2), (3, 4)))
    res0: (List[Int], List[Int]) = (List(1, 3),List(2, 4))
    Annotations
    @noop()
  30. def void[A](fa: F[A]): F[Unit]

    Empty the fa of the values, preserving the structure

    Empty the fa of the values, preserving the structure

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForList
    
    scala> Functor[List].void(List(1,2,3))
    res0: List[Unit] = List((), (), ())
  31. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  32. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  33. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. def widen[A, B >: A](fa: F[A]): F[B]

    Lifts natural subtyping covariance of covariant Functors.

    Lifts natural subtyping covariance of covariant Functors.

    NOTE: In certain (perhaps contrived) situations that rely on universal equality this can result in a ClassCastException, because it is implemented as a type cast. It could be implemented as map(identity), but according to the functor laws, that should be equal to fa, and a type cast is often much more performant. See this example of widen creating a ClassCastException.

    Example:

    scala> import cats.Functor
    scala> import cats.implicits.catsStdInstancesForOption
    
    scala> val s = Some(42)
    scala> Functor[Option].widen(s)
    res0: Option[Int] = Some(42)

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] ) @Deprecated
    Deprecated

Inherited from Invariant[F]

Inherited from Serializable

Inherited from Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped