NewtypeK

abstract class NewtypeK[Src[_]] extends NewtypeTraitK[Src]

For building newtypes over types that have an invariant type parameter (higher-kinded types).

Example:

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

 type Nel[A] = Nel.Type[A]

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

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

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

NOTE: the type-parameter is invariant. See NewtypeCovariantK for working with covariant type parameters.

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

Type members

Inherited types

override opaque type Type[A]
Inherited from:
NewtypeTraitK

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