package reflect
- Alphabetic
- By Inheritance
- reflect
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- trait AnyTag extends AnyRef
- trait HKTag[T] extends AnyTag
Internal unsafe API representing a poly-kinded, higher-kinded type tag.
Internal unsafe API representing a poly-kinded, higher-kinded type tag.
To create a Tag* implicit for an arbitrary kind use the following syntax:
type TagK5[K[_, _, _, _, _]] = HKTag[ { type Arg[A, B, C, D, E] = K[A, B, C, D, E] } ]
As an argument to HKTag, you should specify the type variables your type parameter will take and apply them to it, in order.
type TagFGC[K[_[_, _], _[_], _[_[_], _, _, _]] = HKTag[ { type Arg[A[_, _], B[_], C[_[_], _, _, _]] = K[A, B, C] } ]
A convenience macro
Tag.auto.T
is available to automatically create a type lambda for a type of any kind:def x[K[_[_, _], _[_], _[_[_], _, _, _]: Tag.auto.T]: Tag.auto.T[K] = implicitly[Tag.auto.T[K]]
- final class HKTagMaterializer[T] extends AnyVal
Force eager expansion for all recursive implicit searches inside TagMacro by introducing a proxy implicit to display better error messages
Force eager expansion for all recursive implicit searches inside TagMacro by introducing a proxy implicit to display better error messages
- See also
test ResourceEffectBindingsTest."Display tag macro stack trace when ResourceTag is not found"
- trait Tag[T] extends AnyTag
Like scala.reflect.api.TypeTags.TypeTag, but supports higher-kinded type tags via
TagK
type class.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
styleExample:
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 withno TypeTag available for MyService[F]
errorCurrently some limitations apply as to when a
Tag
will be correctly constructed: * Type Parameters do not yet resolve inside structural refinements, e.g. T inTag[{ 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
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
- type TagK[K[_]] = HKTag[AnyRef { type Arg[A] = K[A] }]
TagK
is like a scala.reflect.api.TypeTags.TypeTag but for higher-kinded types.TagK
is like a scala.reflect.api.TypeTags.TypeTag but for higher-kinded types.Example:
def containerTypesEqual[F[_]: TagK, K[_]: TagK]): Boolean = TagK[F].tag.tpe =:= TagK[K].tag.tpe containerTypesEqual[Set, collection.immutable.Set] == true containerTypesEqual[Array, List] == false
- type TagK10[K[_, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9] }]
- type TagK11[K[_, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10] }]
- type TagK12[K[_, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11] }]
- type TagK13[K[_, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12] }]
- type TagK14[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13] }]
- type TagK15[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14] }]
- type TagK16[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15] }]
- type TagK17[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16] }]
- type TagK18[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17] }]
- type TagK19[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18] }]
- type TagK20[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19] }]
- type TagK21[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20] }]
- type TagK22[K[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21] }]
- type TagK3[K[_, _, _]] = HKTag[AnyRef { type Arg[A, B, C] = K[A,B,C] }]
- type TagK4[K[_, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3] = K[A0,A1,A2,A3] }]
- type TagK5[K[_, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4] = K[A0,A1,A2,A3,A4] }]
- type TagK6[K[_, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5] = K[A0,A1,A2,A3,A4,A5] }]
- type TagK7[K[_, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6] = K[A0,A1,A2,A3,A4,A5,A6] }]
- type TagK8[K[_, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7] = K[A0,A1,A2,A3,A4,A5,A6,A7] }]
- type TagK9[K[_, _, _, _, _, _, _, _, _]] = HKTag[AnyRef { type Arg[A0, A1, A2, A3, A4, A5, A6, A7, A8] = K[A0,A1,A2,A3,A4,A5,A6,A7,A8] }]
- type TagKK[K[_, _]] = HKTag[AnyRef { type Arg[A, B] = K[A,B] }]
- class TagLambdaMacro extends TagMacro
- Annotations
- @nowarn()
- class TagMacro extends AnyRef
- Annotations
- @nowarn()
- type TagT[K[_[_]]] = HKTag[AnyRef { type Arg[A[_]] = K[A] }]
- type TagTK[K[_[_], _]] = HKTag[AnyRef { type Arg[A[_], B] = K[A,B] }]
- type TagTK3[K[_[_], _, _, _]] = HKTag[AnyRef { type Arg[A[_], B, C, D] = K[A,B,C,D] }]
- type TagTKK[K[_[_], _, _]] = HKTag[AnyRef { type Arg[A[_], B, C] = K[A,B,C] }]
- trait WeakTag[T] extends AnyTag
- trait WeakTagInstances1 extends AnyRef
Value Members
- object DebugProperties
Java properties and macro settings that control behavior and debug output of Lightweight Reflection macros
Java properties and macro settings that control behavior and debug output of Lightweight Reflection macros
- See also
- object HKTag
- object HKTagMaterializer
- object Tag
- object TagK
- object TagK3
- object TagKK
- object TagT
- object TagTK
- object TagTK3
- object TagTKK
- object WeakTag extends WeakTagInstances1