trait Tag[T] extends AnyTag
Like scala.reflect.api.TypeTags.TypeTag, but supports higher-kinded type tags via TagK type class.
In context of DI this lets you define modules parameterized by higher-kinded type parameters.
This is especially helpful for applying tagless final style
Example:
import distage.ModuleDef class MyModule[F[_]: Monad: TagK] extends ModuleDef { make[MyService[F]] make[F[Int]].named("lucky-number").from(Monad[F].pure(7)) }
Without a TagK constraint above, this example would fail with no TypeTag available for MyService[F] error
Currently some limitations apply as to when a Tag will be correctly constructed:
* Type Parameters do not yet resolve in structural refinement methods, e.g. T in
Tag[{ def x: T}]They do resolve in refinement type members however, e.g.
Tag[ Any { type Out = T } ]
* TagK* does not resolve for constructors with bounded parameters, e.g. S in
class Abc[S <: String]; TagK[Abc]
(You can still have a bound in partial application: e.g.
class Abc[S <: String, A]; TagK[Abc["hi", _]]
* Further details at https://github.com/7mind/izumi/issues/374
- Annotations
- @implicitNotFound()
- See also
"Lightweight Scala Reflection and why Dotty needs TypeTags reimplemented" https://blog.7mind.io/lightweight-reflection.html
izumi.reflect.macrortti.LTag - summoner for izumi.reflect.macrortti.LightTypeTag that does not resolve type parameters
izumi.reflect.macrortti.LTag.Weak - summoner for izumi.reflect.macrortti.LightTypeTag that does not resolve type parameters and allows unresolved ("weak") type parameters to be part of a tag
- Alphabetic
- By Inheritance
- Tag
- AnyTag
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def closestClass: Class[_]
Closest class found for the type or for a LUB of all intersection members in case of an intersection type.
Closest class found for the type or for a LUB of all intersection members in case of an intersection type.
A Scala type may not have an associated JVM class, as such this class may not be sufficient to create instances of
TOnly if
tag.hasPreciseClassreturns true it may be safe to reflect onclosestClass - abstract def tag: LightTypeTag
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def <:<(that: AnyTag): Boolean
- Definition Classes
- AnyTag
- final def =:=(that: AnyTag): Boolean
- Definition Classes
- AnyTag
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def equals(that: Any): Boolean
- Definition Classes
- AnyTag → AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def hasPreciseClass: Boolean
- Definition Classes
- AnyTag
- final def hashCode(): Int
- Definition Classes
- AnyTag → AnyRef → Any
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def toString(): String
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()