Scala shapeless-使用Mapped包装到具有2个或更多参数的类型

Scala shapeless-使用Mapped包装到具有2个或更多参数的类型,scala,shapeless,Scala,Shapeless,例如,我有 class C[T, U] { ... } class D[T, L <: HList, M <: HList] { ... } 因为T是D的类型参数,所以这样的定义必须在D的主体内,因此从D的类型参数(即从方括号内)看不到它 因此,我应该编写自己的Mapped实现吗?或者有一些内置的解决方案吗?如果您的问题是C有2个参数而不是1个参数,并且希望避免定义可以使用的别名 或编译器插件 Mapped.Aux[L, C[T, ?], M] 通常,likeshapeless.

例如,我有

class C[T, U] { ... }
class D[T, L <: HList, M <: HList] { ... }
因为
T
D
的类型参数,所以这样的定义必须在
D
的主体内,因此从
D
的类型参数(即从方括号内)看不到它


因此,我应该编写自己的
Mapped
实现吗?或者有一些内置的解决方案吗?

如果您的问题是
C
有2个参数而不是1个参数,并且希望避免定义可以使用的别名

或编译器插件

Mapped.Aux[L, C[T, ?], M]
通常,like
shapeless.ops.hlist.Mapped
应在隐式定义中使用,如

class C[T, U] {
//    ...
}

class D[T, L <: HList, M <: HList] {
//    ...
}

object D {
  implicit def mkInstanceOfD[T, L <: HList, M <: HList](implicit 
    mapped: Mapped.Aux[L, C[T, ?], M]): D[T, L, M] = ???
//implicit def mkInstanceOfD[T, L <: HList, M <: HList](implicit 
//  mapped: Mapped.Aux[L, ({ type l[U] = C[T, U] })#l, M]): D[T, L, M] = ???
}
C类[T,U]{
//    ...
}
D类[T,L
Mapped.Aux[L, C[T, ?], M]
class C[T, U] {
//    ...
}

class D[T, L <: HList, M <: HList] {
//    ...
}

object D {
  implicit def mkInstanceOfD[T, L <: HList, M <: HList](implicit 
    mapped: Mapped.Aux[L, C[T, ?], M]): D[T, L, M] = ???
//implicit def mkInstanceOfD[T, L <: HList, M <: HList](implicit 
//  mapped: Mapped.Aux[L, ({ type l[U] = C[T, U] })#l, M]): D[T, L, M] = ???
}