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
T
Only if
tag.hasPreciseClass
returns 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()