package derived
- Alphabetic
- Public
- All
Type Members
- sealed trait IterState[+A] extends AnyRef
- trait IterableDerivationFromMkIterable extends AnyRef
- trait MkConsK[F[_], G[_]] extends AnyRef
- trait MkConsK0 extends MkConsK1
- trait MkConsK1 extends MkConsK2
- trait MkConsK2 extends AnyRef
- trait MkEmpty[A] extends Empty[A]
- Annotations
- @implicitNotFound("Could not derive an instance of Empty[${A}]")
- trait MkEmptyK[F[_]] extends EmptyK[F]
- trait MkEmptyK0 extends MkEmptyK1
- trait MkEmptyK1 extends MkEmptyK2
- trait MkEmptyK2 extends MkEmptyK3
- trait MkEmptyK3 extends AnyRef
- trait MkEmptyKDerivation extends MkEmptyK0
- trait MkEq[T] extends Eq[T]
- trait MkFoldable[F[_]] extends Foldable[F]
- trait MkFoldable0 extends MkFoldable1
- trait MkFoldable1 extends MkFoldable2
- trait MkFoldable2 extends MkFoldable3
- trait MkFoldable3 extends AnyRef
- trait MkFoldableDerivation extends MkFoldable0
- trait MkFunctor[F[_]] extends Functor[F]
- Annotations
- @implicitNotFound("Could not derive an instance of Functor[${F}]")
- trait MkHash[A] extends Hash[A]
- trait MkHash0 extends MkHash1
- trait MkHash1 extends AnyRef
- trait MkIterable[F[_]] extends AnyRef
- trait MkIterable0 extends MkIterable1
- trait MkIterable1 extends MkIterable2
- trait MkIterable2 extends MkIterable3
- trait MkIterable3 extends AnyRef
- trait MkMonoid[T] extends Monoid[T]
- trait MkMonoidK[F[_]] extends MonoidK[F]
- trait MkOrder[T] extends Order[T]
- trait MkPartialOrder[T] extends PartialOrder[T]
- trait MkPure[F[_]] extends Pure[F]
- trait MkPure0 extends MkPure1
- trait MkPure1 extends MkPure2
- trait MkPure2 extends AnyRef
- trait MkPureDerivation extends MkPure0
- trait MkSemigroup[T] extends Semigroup[T]
- trait MkSemigroupK[F[_]] extends SemigroupK[F]
- trait MkSemigroupK4 extends AnyRef
- trait MkShow[A] extends Show[A]
Due to a limitation in the way Shapeless'
describe
is currently implemented,Show
can't be derived for ADTs which are _both_ recursive _and_ generic in one or more type parameters.Due to a limitation in the way Shapeless'
describe
is currently implemented,Show
can't be derived for ADTs which are _both_ recursive _and_ generic in one or more type parameters.See: https://github.com/typelevel/kittens/pull/48#issue-249836267 https://github.com/milessabin/shapeless/issues/750
See the test suite for more precise examples of what can and cannot be derived.
- trait MkShow1 extends MkShow2
- trait MkShow2 extends MkShow3
- trait MkShow3 extends AnyRef
- trait MkShowDerivation extends MkShow1
- trait MkShowPretty[A] extends ShowPretty[A]
- trait MkShowPretty1 extends MkShowPretty2
- trait MkShowPretty2 extends MkShowPretty3
- trait MkShowPretty3 extends AnyRef
- trait MkShowPrettyDerivation extends MkShowPretty1
- trait ShowPretty[A] extends Show[A]
- trait Trivial1[F[_]] extends AnyRef
Value Members
- object HashBuilder
- object IterState
- object MkConsK extends MkConsK0
- object MkEmpty extends MkEmptyDerivation with Serializable
- object MkEmptyK extends MkEmptyKDerivation with Serializable
- object MkEq extends MkEqDerivation with Serializable
- object MkFoldable extends MkFoldableDerivation with Serializable
- object MkFunctor extends MkFunctorDerivation with Serializable
- object MkHash extends MkHash0 with Serializable
- object MkIterable extends MkIterable0
- object MkMonoid extends MkMonoidDerivation with Serializable
- object MkMonoidK extends MkMonoidK0 with Serializable
- object MkOrder extends MkOrderDerivation with Serializable
- object MkPartialOrder extends MkPartialOrderDerivation with Serializable
- object MkPure extends MkPureDerivation with Serializable
- object MkSemigroup extends MkSemigroupDerivation with Serializable
- object MkSemigroupK extends MkSemigroupK0 with Serializable
- object MkShow extends MkShowDerivation with Serializable
- object MkShowPretty extends MkShowPrettyDerivation with Serializable
- object ShowPretty extends Serializable
- object Trivial1
- object auto
Fully automatically derive the instance, note that this derivation is not cached, so it will re-derive every time an instance is needed in the application, which could significantly impact the compilation time.
- object cached
cached cache the derived instance but this cache are global, so be cautious only use it when there is only one instance globally in your application.
- object consk
- object semi
allows semi automatically derive each instance.
allows semi automatically derive each instance. The derivation might need help when there are fields with type constructor that comes with instances e.g.
scala> case class Foo(bars: List[Bar]) scala> case class Bar(a: String) scala> cats.derived.semi.show[Foo].show(Foo(List(Bar("a")))) res1: String = Foo(bars = $colon$colon(head = Bar(a = a), tl$access$1 = Nil.type()))
Note that semi.show didn't respect the native
Show[List]
instanceYou could either derive a Bar instance first
scala> implicit val barShow = cats.derived.semi.show[Bar] scala> cats.derived.semi.show[Foo].show(Foo(List(Bar("a")))) res2: String = Foo(bars = List(Bar(a = a)))
Or you can take advantage of a controlled auto derivation
scala> implicit val fooShow: Show[Foo] = { | import cats.derived.auto.show._ | cats.derived.semi.show | } scala> Foo(List(Bar("a"))).show res3: String = Foo(bars = List(Bar(a = a)))