Transitive LUB?

时间:2014-08-23 12:38:21

标签: scala shapeless

它编译的代码片段需要更改哪些内容?

import shapeless._
import LUBConstraint._
import ops.hlist.Prepend

class Foo[L <: HList: <<:[Int]#λ](val l: L) {
  def ++[H <: HList: <<:[Int]#λ](h: H)(implicit prepend: Prepend[L, H]) = {
    new Foo(l ::: h)
  }
}

目前:

could not find implicit value for evidence parameter of type shapeless.LUBConstraint[prepend.Out,Int]

1 个答案:

答案 0 :(得分:7)

好问题......你非常接近: - )

问题在于,即使对我们来说很明显,Scala编译器也无法推断两个HListsInt元素的串联是HList的{ {1}}元素。我们可以通过将连接类型拉出到类型变量(Int中来帮助它,注意使用Out类型别名来约束这个新类型变量)然后要求它直接证明Prepend.Aux具有必需的属性(通过要求Out的形状的证据,

Out