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 inside structural refinements, e.g. T in
Tag[{ def x: 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
- Alphabetic
- By Inheritance
- Tag
- AnyTag
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
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
==(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( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
hasPreciseClass: Boolean
- Definition Classes
- AnyTag
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
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
- Definition Classes
- Tag → AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()