Я пытаюсь определить класс типа, что HList, L
, содержит определенный тип, A
.Типичный элемент, содержащий элемент в HList?
trait Contains[A] {
type Out
}
object Contains {
type Aux[A, O] = Contains[A] { type Out = O }
def contains[L <: HList, A]
(implicit ev: Contains.Aux[L, A]) = ev
implicit def containsInt[H, L <: HList, A]
(implicit ev: H == A): Contains.Aux[H :: L, A] =
new Contains[H :: L] {
type Out = A
}
}
Конечно, это не компилируется из-за ev: H == A
.
Существует ли такой тип эквивалентного типа?
После того, как это работает, я бы ожидать, что следующие компиляции:
implicitly[Contains.Aux[Int :: HNil, Int]]
, так как есть в HList в Int
.
Принимаю во внимание, что implicitly[Contains.Aux[String :: HNil, Boolean]
не компилируется, так как нет Boolean
на входе HList.
Я думаю, что вы можете изменить тип доказательств в: неявных эв: H =: = A Вообще-то трудно получить этот тип Ограничение на работу –
Я нашел эту ссылку для Shapeless good: https://github.com/underscoreio/shapeless-guide/blob/develop/dist/shapeless-guide.pdf –
Я купил и прочитал большую часть этой прекрасной книги. Мне нужно перечитать его! –