• package root
    Definition Classes
  • package cats

    The cats root package contains all the trait signatures of most Scala type classes.

    The cats root package contains all the trait signatures of most Scala type classes.

    Cats type classes are implemented using the approach from the Type classes as objects and implicits article.

    For each type class, cats provides three pieces: - Its signature: a trait that is polymorphic on a type parameter. Type class traits inherit from other type classes to indicate that any implementation of the lower type class (e.g. Applicative) can also serve as an instance for the higuer type class (e.g. Functor). - Type class 'instances, which are classes and objects that implement one or more type class signatures for some specific types. Type class instances for several data types from the Java or Scala standard libraries are declared in the subpackage cats.instances. - Syntax extensions, each of which provides the methods of the type class defines as extension methods (which in Scala 2 are encoded as implicit classes) for values of any type F; given that an instance of the type class for the receiver type (this) is in the implicit scope. Symtax extensions are declared in the cats.syntax package. - A set of laws, that are also generic on the type of the class, and are only defined on the operations of the type class. The purpose of these laws is to declare some algebraic relations (equations) between Scala expressions involving the operations of the type class, and test (but not verify) that implemented instances satisfy those equations. Laws are defined in the cats-laws package.

    Although most of cats type classes are declared in this package, some are declared in other packages: - type classes that operate on base types (kind *), and their implementations for standard library types, are contained in cats.kernel, which is a different SBT project. However, they are re-exported from this package. - type classes of kind F[_, _], such as cats.arrow.Profunctor" or cats.arrow.Arrow, which are relevant for Functional Reactive Programming or optics, are declared in the cats.arrow package. - Also, those type classes that abstract over (pure or impure) functional runtime effects are declared in the cats-effect library. - Some type classes for which no laws can be provided are left out of the main road, in a small and dirty alley. These are the alleycats.

    Definition Classes
  • package arrow
    Definition Classes
  • package conversions
    Definition Classes
  • package data
    Definition Classes
  • package evidence
    Definition Classes
  • As
  • AsInstances
  • Is
  • IsInstances
  • package free
    Definition Classes
  • package instances
    Definition Classes
  • package kernel
    Definition Classes
  • package syntax
    Definition Classes



package evidence

Linear Supertypes
Content Hierarchy
  1. Alphabetic
  2. By Inheritance
  1. evidence
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
  1. Public
  2. All

Type Members

  1. type <~<[-A, +B] = As[A, B]

    A convenient type alias for As, this declares that A is a subtype of B, and should be able to be a B is expected.

  2. type ===[A, B] = Is[A, B]

    A convenient type alias for Is, which declares that A is the same type as B.

  3. type >~>[+B, -A] = As[A, B]

    A flipped alias, for those used to their arrows running left to right

  4. sealed abstract class As[-A, +B] extends Serializable

    As substitutability: A better <:<

    As substitutability: A better <:<

    This class exists to aid in the capture proof of subtyping relationships, which can be applied in other context to widen other type

    A As B holds whenever A could be used in any negative context that expects a B. (e.g. if you could pass an A into any function that expects a B as input.)

    This code was ported directly from scalaz to cats using this version from scalaz:

    The original contribution to scalaz came from Jason Zaugg

  5. sealed abstract class AsInstances extends AnyRef
  6. abstract class Is[A, B] extends Serializable

    A value of A Is B is proof that the types A and B are the same.

    A value of A Is B is proof that the types A and B are the same. More powerfully, it asserts that they have the same meaning in all type contexts. This can be a more powerful assertion than A =:= B and is more easily used in manipulation of types while avoiding (potentially erroneous) coercions.

    A Is B is also known as Leibniz equality.

  7. sealed abstract class IsInstances extends AnyRef
  8. type Leibniz[A, B] = Is[A, B]

    This type level equality represented by Is is referred to as "Leibniz equality", and it had the name "Leibniz" in the scalaz

  9. type Liskov[-A, +B] = As[A, B]

    The property that a value of type A can be used in a context expecting a B if A <~< B is referred to as the "Liskov Substitution Principle", which is named for Barbara Liskov:

Value Members

  1. object As extends AsInstances with AsSupport with Serializable
  2. object Is extends IsInstances with IsSupport with Serializable

Inherited from AnyRef

Inherited from Any