Scala 不成形:保留预弯和拆分以延迟执行

Scala 不成形:保留预弯和拆分以延迟执行,scala,shapeless,Scala,Shapeless,我的目标是包装一个HList并保存足够的信息,以便在以后执行预结束和拆分操作 case class Wrap[L <: HList](wrapped: L) val x = Wrap("x" :: "y" :: HNil) val y = Wrap(1 :: 2 :: HNil) case class Append[L1, L2](w1: Wrap[L1], w2: Wrap[L2], prepend: Prepend[L1, L2], length: Length[L1]) def

我的目标是包装一个HList并保存足够的信息,以便在以后执行预结束和拆分操作

case class Wrap[L <: HList](wrapped: L)

val x = Wrap("x" :: "y" :: HNil)
val y = Wrap(1 :: 2 :: HNil)

case class Append[L1, L2](w1: Wrap[L1], w2: Wrap[L2], prepend: Prepend[L1, L2], length: Length[L1])

def append[L1, L2](w1: Wrap[L1], w2: Wrap[L2])(implicit prepend: Prepend[L1, L2], length: Length[L1]) = Append(w1, w2, prepend, length)

val xAppendY = append(x,y)

val merged = xAppendY.prepend(xAppendY.w1.wrapped, xAppendY.w2.wrapped)

val split = Split[xAppendY.prepend.Out, xAppendY.length.Out] // <-- error here

split.apply(merged)

case-class-Wrap[L以下版本的代码有效:

  import shapeless.ops.hlist.{Length, Prepend, Split}
  import shapeless.{::, HList, HNil, Nat}

  case class Wrap[L <: HList](wrapped: L)

  val x = Wrap("x" :: "y" :: HNil)
  val y = Wrap(1 :: 2 :: HNil)

  case class Append[L1 <: HList, L2 <: HList, L3 <: HList, N <: Nat](w1: Wrap[L1], w2: Wrap[L2], prepend: Prepend.Aux[L1, L2, L3], length: Length.Aux[L1, N])

  def append[L1 <: HList, L2 <: HList, L3 <: HList, N <: Nat](w1: Wrap[L1], w2: Wrap[L2])(implicit prepend: Prepend.Aux[L1, L2, L3], length: Length.Aux[L1, N]) = Append(w1, w2, prepend, length)

  val xAppendY = append(x,y)

  val merged = xAppendY.prepend(xAppendY.w1.wrapped, xAppendY.w2.wrapped)

  val split = Split[xAppendY.prepend.Out, xAppendY.length.Out]

  split.apply(merged)
import shapeless.ops.hlist.{Length,Prepend,Split}
导入无形状。{::,HList,HNil,Nat}

case-class-Wrap[L以下版本的代码有效:

  import shapeless.ops.hlist.{Length, Prepend, Split}
  import shapeless.{::, HList, HNil, Nat}

  case class Wrap[L <: HList](wrapped: L)

  val x = Wrap("x" :: "y" :: HNil)
  val y = Wrap(1 :: 2 :: HNil)

  case class Append[L1 <: HList, L2 <: HList, L3 <: HList, N <: Nat](w1: Wrap[L1], w2: Wrap[L2], prepend: Prepend.Aux[L1, L2, L3], length: Length.Aux[L1, N])

  def append[L1 <: HList, L2 <: HList, L3 <: HList, N <: Nat](w1: Wrap[L1], w2: Wrap[L2])(implicit prepend: Prepend.Aux[L1, L2, L3], length: Length.Aux[L1, N]) = Append(w1, w2, prepend, length)

  val xAppendY = append(x,y)

  val merged = xAppendY.prepend(xAppendY.w1.wrapped, xAppendY.w2.wrapped)

  val split = Split[xAppendY.prepend.Out, xAppendY.length.Out]

  split.apply(merged)
import shapeless.ops.hlist.{Length,Prepend,Split}
导入无形状。{::,HList,HNil,Nat}
案例类包装[L]