Create a Tag of a type formed by applying the type in tag
to args
.
Create a Tag of a type formed by applying the type in tag
to args
.
Example:
implicit def tagFromTagTAKA[T[_, _[_], _]: TagK3, K[_]: TagK, A0: Tag, A1: Tag]: Tag[T[A0, K, A1]] = Tag.appliedTag(TagK3[T].tag, List(Tag[A0].tag, TagK[K].tag, Tag[A1].tag))
Use Tag.auto.T[TYPE_PARAM]
syntax to summon a Tag
for a type parameter of any kind:
Use Tag.auto.T[TYPE_PARAM]
syntax to summon a Tag
for a type parameter of any kind:
def module1[F[_]: Tag.auto.T] = new ModuleDef { ... } def module2[F[_, _]: Tag.auto.T] = new ModuleDef { ... }
def y[K[_[_, _], _[_], _[_[_], _, _, _]](implicit ev: Tag.auto.T[K]): Tag.auto.T[K] = ev
def x[K[_[_, _], _[_], _[_[_], _, _, _]: Tag.auto.T]: Tag.auto.T[K] = implicitly[Tag.auto.T[K]]
Create a Tag of a type formed from an intersection
of types (A with B) with a structural refinement taken from structType
Create a Tag of a type formed from an intersection
of types (A with B) with a structural refinement taken from structType
structType
is assumed to be a weak type of the entire type, e.g.
Tag[A with B {def abc: Unit}] == refinedTag(classOf[Any], List(LTag[A].tag, LTag[B].tag), LTag.Weak[A with B { def abc: Unit }].tag, Map.empty)
(Since version ) see corresponding Javadoc for more information.