나는 그 HList
형식 매개 변수의 첫 번째 두 개의 필드가 5
까지 추가되도록 typeclass, SumEq5
, 쓰기를 시도 :Nat의 합계에 대한 컴파일 타임 확인?
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
에 2 개의 Nat
이 5와 같은지에 대한 암시가 있습니다.
EDIT
Denis Rosca의 도움말에 대한 질문은 shapeless's gitter으로 업데이트되었습니다.
형질이 비어, 추가 증인없이 다시, (오히려 정확히 두 이상) 요소를 적어도 두 사람과 함께
HList
의 수용이 일반화, 그래서 왜 그냥'수 새로운 SumEq5 [L]'? – cchantep괜찮 았지만 내 입력에는 작동하지 않을 수 있습니까? –