3
我在这里经历了一些关于同一事物的问题,但似乎无法为我的案例找到解决方案。再次在HLists上映射
在本质上我需要定义接受一个x,的方法,其中x <:T和一个L,其中L <:HList并且使用从T.
继承每个可能的类中定义的过度POLY1映射升我已经尝试了几种方法,我的最后一次尝试导致了一些非常可怕的scalac炸弹。我一定在做一些非常愚蠢的事情,但似乎无法摆脱它的困扰!
import shapeless._
import ops.hlist._
trait T {
val fun: Poly1
}
case class C() extends T {
object fun extends Poly1 {
implicit val caseInt = at[Int](i => "int " + i)
override def toString = "here I am, poly1"
}
}
def method[X <: T](x: X) = x.fun
method(C())
res0: shapeless.Poly1 = here I am, poly1
def method2[X <: T, L <: HList](x: X, l: L)(implicit m: Mapper[x.fun.type, L]) = l map x.fun
method(C(), 23 :: HNil) //BOOM!
正如我在Twitter上刚才提到的,你[可能的运气(HTTP ://stackoverflow.com/questions/11442440/unable-to-map-on-hlist/11442871#comment15099885_11442871)。 –
@TravisBrown说了什么......''C()'是易变的,它会挫败隐式搜索'fun'的情况。 –