NewtypeCovariantK

abstract class NewtypeCovariantK[Src[_]] extends NewtypeCovariantTraitK[Src]

For building newtypes over types that have a covariant type parameter (higher-kinded types).

Example:

 // Only needed for type-class derivation
 import cats._
 import cats.implicits._

 type NonEmptyList[A] = NonEmptyList.Type[A]

 object NonEmptyList extends NewtypeCovariantK[List] {
   def apply[A](head: A, tail: A*): NonEmptyList[A] =
     unsafeCoerce(head :: tail.toList)

   def unapply[F[_], A](list: F[A])(
     implicit ev: F[A] =:= NonEmptyList[A]
   ): Some[(A, List[A])] = {
     val l = value(list)
     Some((l.head, l.tail))
   }

   implicit def eq[A: Eq]: Eq[NonEmptyList[A]] =
     derive
   implicit val traverse: Traverse[NonEmptyList] =
     deriveK
   implicit val monad: Monad[NonEmptyList] =
     deriveK
 }

NOTE: the type-parameter is covariant.

See also:

NewtypeK for working with invariance.

trait NewtypeCovariantTraitK[Src]
trait NewEncodingK[Src]
class Object
trait Matchable
class Any

Type members

Inherited types

override opaque type Type[+A]
Inherited from:
NewtypeCovariantTraitK

Value members

Inherited methods

final inline protected def derive[F[_], A](using ev: F[Src[A]]): F[Type[A]]
Inherited from:
NewEncodingK
final inline protected def deriveK[F[_[_]]](using ev: F[Src]): F[Type]
Inherited from:
NewEncodingK
final inline protected def unsafeCoerce[A](value: Src[A]): Type[A]
Inherited from:
NewEncodingK

Extensions

Inherited extensions

extension [A](self: Type[A])
final inline def value: Src[A]
Inherited from:
NewEncodingK

Implicits

Inherited implicits

final implicit def extractor[A]: Aux[Type[A], Src[A]]
Inherited from:
NewEncodingK
implicit def typeName[A : TypeInfo]: TypeInfo[Type[A]]
Inherited from:
NewEncodingK