3
H27 L
에 특정 유형 인 A
이 포함되도록 typecass를 정의하려고합니다.HCL에 포함 된 Typeclass 요소?
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
으로 인해 컴파일되지 않습니다.
이러한 "등가 유형"typeclass가 있습니까?
가 작동되면, 나는 기대할 컴파일하려면 다음
implicitly[Contains.Aux[Int :: HNil, Int]]
을 HList에 Int
을 거기에 있기 때문이다.
반면에 입력 된 HList에 Boolean
이 없기 때문에 implicitly[Contains.Aux[String :: HNil, Boolean]
이 컴파일되지 않을 것으로 예상됩니다.
나는 당신이 증거의 유형을 변경할 수 있다고 생각 H는 =이 유형을 얻기 어렵다 일반적으로 을 = https://github.com/underscoreio/shapeless-guide/blob/develop/dist/shapeless-guide.pdf –
를 작동하는 제약 나는 볼품 좋은이 참조를 발견했다. 나는 그것을 다시 읽을 필요가있다! –
제가 구입하고 우수한 책의 대부분을 읽어 –