에서 보기 힘든 두 나열하는 것과 같은 하나 담 업스트림 소스의 다른
문제
에서 엉성한 나가려고 함수를 작성하는 두 개의 HLists l1
고 l2
의 임의의 길이는 전시회 다음과 같은 속성:
- 길이
l1
고l2
은 동일합니다. l2
담고 정확한 종류의l1
, 에서 일정한 외부 유형을 생성자입니다.
경우에 따라서, l1
였
1 :: 1.2 :: "hello" :: HNil`
l2
수
Ordering[Int] :: Ordering[Double] :: Ordering[String] :: HNil
용 UnaryTCConstraint
고 LengthAux
할 수 있습 제한 길이 필요로 하는 정 외부 생성자 l2
, 그러나 그들을 가지고 준수이 문제가 되고 있습니다.
어떤 아이디어에 내가 어떻게 갈 수 있었을까요?
해결책
Mapped
제공하는 정확하게 이러한 제약 조건 없이 추가 필요 Length
.서 문서:
형식 등을 목격하고 그 결과의 포장의 각 요소
HList
L
에서 유형을 생성자F
가Out
.
여기 보이는 방법에 1.2.4:
import shapeless._
def foo[L1 <: HList, L2 <: HList](l1: L1, l2: L2)(implicit
ev: MappedAux[L1, Ordering, L2]
) = ()
val l1 = 1 :: 1.2 :: "hello" :: HNil
val l2 = Ordering[Int] :: Ordering[Double] :: Ordering[String] :: HNil
val l3 = Ordering[Int] :: Ordering[Double] :: Ordering[Char] :: HNil
그리고:
scala> foo(l1, l2)
scala> foo(l1, l3)
<console>:17: error: could not find implicit value for parameter ev: ...
으로 예상된다.2.0 추가 shapeless.ops.hlist._
수입 대체 MappedAux
가 Mapped.Aux
당신이 설치되어 있는 것입니다.
제휴하지 않습니다 StackOverflow