【发布时间】:2017-02-07 01:39:45
【问题描述】:
我尝试编写一个类型类SumEq5,使其HList 类型参数的前两个字段加起来为5:
trait SumEq5[A]
object SumEq5 {
def apply[L <: HList](implicit ev: SumEq5[L]): SumEq5[L] = ev
implicit def sumEq5Ev[L <: HList, A <: Nat, B <: Nat](
implicit hcons: IsHCons.Aux[L, A, B :: HNil],
ev: Sum.Aux[A, B, _5]
): SumEq5[L] = new SumEq5[L] {}
}
但它似乎不起作用:
import shapeless._
import shapeless.nat._
import net.SumEq5
scala> SumEq5[_0 :: _5 :: HNil]
<console>:19: error: could not find implicit value for
parameter ev: net.SumEq5[shapeless.::[shapeless.nat._0,shapeless.::
[shapeless.nat._5,shapeless.HNil]]]
SumEq5[_0 :: _5 :: HNil]
请告诉我为什么_0 :: _5 :: HNil 没有证据表明它的两个Nat 等于5。
编辑
根据 Denis Rosca 在shapeless's gitter 的帮助更新了问题。
【问题讨论】:
-
特征是空的,那为什么不直接
new SumEq5[L]呢? -
这很好,但它对我的输入不起作用,不是吗?