Object/Trait

shapeless

Generic

Related Docs: trait Generic | package shapeless

Permalink

object Generic extends Serializable

The companion object for the Generic trait provides a way of obtaining a Generic[T] instance for some T. In addition, it defines Generic.Aux, which is an important implementation technique that can be generally useful.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Generic
  2. Serializable
  3. Serializable
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. type Aux[T, Repr0] = Generic[T] { type Repr = Repr0 }

    Permalink

    Provides a representation of Generic[T], which has a nested Repr type, as a type with two type parameters instead.

    Provides a representation of Generic[T], which has a nested Repr type, as a type with two type parameters instead.

    This is useful for two reasons. First, it's surprisingly easy to wind up with a Generic type that has lost the refinement that carries the crucial Generic.Repr type, a problem which Generic.Aux prevents.

    More importantly, Aux allows us to write code like this:

    def myMethod[T, R]()(implicit eqGen: Generic.Aux[T,R], repEq: Eq[R]) = ???

    Here, we specify T, and we find a Generic.Aux[T,R] by implicit search. We then use R in the second argument. Generic.Aux[T, R] is exactly equivalent to Generic[T] { type Repr = R }, but Scala doesn't allow us to write it this way:

    def myMethod[T, R]()(eqGen: Generic[T] { Repr = R }, reqEq: Eq[egGen.Repr]) = ???

    The reason is that we are not allowed to have dependencies between arguments in the same parameter group. So Aux neatly sidesteps this problem.

    The "Aux pattern" is now in use in several other libraries as well, and is a useful general technique.

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. def apply[T](implicit gen: Generic[T]): Aux[T, Repr]

    Permalink

    Provides an instance of Generic.

    Provides an instance of Generic. Prefer this over finding one with implicitly, or else use the.

    Either of these approaches preserves the Repr type refinement, which implicitly will lose.

  5. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  6. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  7. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  8. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  9. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  11. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  12. def instance[T, R](f: (T) ⇒ R, g: (R) ⇒ T): Aux[T, R]

    Permalink

    Creates a new Generic instance from a pair of functions.

    Creates a new Generic instance from a pair of functions.

    The functions f and g should be the inverse of each other, i.e.

    • f(g(x)) == x
    • g(f(y)) == y
  13. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  14. implicit macro def materialize[T, R]: Aux[T, R]

    Permalink
  15. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  16. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  17. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  18. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  19. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  20. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  21. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  22. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Serializable

Inherited from Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped