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
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
==(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()