Я попытался написать класс типов, SumEq5
, такой, что первые два поля своего HList
параметра типа добавить до 5
:Проверка времени компиляции на сумму Nat's?
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.
EDIT
Обновленный вопрос на помощь Дениса Рошки в shapeless's gitter.
Черта пуста, так почему бы не просто ' новый SumEq5 [L] '? – cchantep
Это нормально, но это не сработает для моего ввода, нет? –