@@ -17,21 +17,6 @@ final case class R[K <: String, V](v: V)
1717
1818trait Selector [L <: HList , K , V ]
1919
20- object Selector {
21- implicit def caseFound [T <: HList , K <: String , V ]
22- : Selector [R [K , V ] :: T , K , V ] = {
23- println(" Selector.caseFound" )
24- null
25- }
26-
27- implicit def caseRecur [H , T <: HList , K <: String , V ]
28- (implicit i : Selector [T , K , V ])
29- : Selector [H :: T , K , V ] = {
30- println(" Selector.caseRecur" )
31- null
32- }
33- }
34-
3520// Subset of Frameless
3621// ----------------------------------------------------------------------------
3722
@@ -83,34 +68,46 @@ case class Column[T, A](label: String)
8368@ implicitNotFound(msg = " No column ${K} in type ${T}" )
8469trait Exists [T , K , V ]
8570
86- object Exists {
87- implicit def derive [T , H <: HList , K , V ]
88- (implicit
89- g : LabelledGeneric [T ] { type Repr = H },
90- s : Selector [H , K , V ]
91- ): Exists [T , K , V ] = {
71+ object UsedExists {
72+ implicit def derive [T , H <: HList , K , V ](implicit g : LabelledGeneric [T ] { type Repr = H }, s : Selector [H , K , V ]): Exists [T , K , V ] = {
9273 println(" Exists.derive" )
9374 null
9475 }
76+
77+ implicit def caseFound [T <: HList , K <: String , V ]: Selector [R [K , V ] :: T , K , V ] = {
78+ println(" Selector.caseFound" )
79+ null
80+ }
81+
82+ implicit def caseRecur [H , T <: HList , K <: String , V ](implicit i : Selector [T , K , V ]): Selector [H :: T , K , V ] = {
83+ println(" Selector.caseRecur" )
84+ null
85+ }
9586}
9687
9788object UnusedExists {
98- implicit unused def derive [T , H <: HList , K , V ]
99- (implicit
100- g : LabelledGeneric [T ] { type Repr = H },
101- s : Selector [H , K , V ]
102- ): Exists [T , K , V ] = {
89+ implicit unused def derive [T , H <: HList , K , V ](implicit unused g : LabelledGeneric [T ] { type Repr = H }, s : Selector [H , K , V ] ): Exists [T , K , V ] = {
10390 println(" UnusedExists.derive" )
10491 null
10592 }
93+
94+ unused implicit def caseFound [T <: HList , K <: String , V ]: Selector [R [K , V ] :: T , K , V ] = {
95+ println(" Selector.caseFound" )
96+ null
97+ }
98+
99+ unused implicit def caseRecur [H , T <: HList , K <: String , V ](implicit i : Selector [T , K , V ]): Selector [H :: T , K , V ] = {
100+ println(" Selector.caseRecur" )
101+ null
102+ }
106103}
107104
108105// X4 Example
109106// ----------------------------------------------------------------------------
110107
111108case class X4 [A , B , C , D ](a : A , b : B , c : C , d : D )
112109
113- object X4 {
110+ object UsedX4 {
114111 // Macro generated
115112 implicit def x4Repr [A , B , C , D ]: LabelledGeneric [X4 [A , B , C , D ]] {
116113 type Repr = R [" a" , A ] :: R [" b" , B ] :: R [" c" , C ] :: R [" d" , D ] :: HNil
@@ -120,6 +117,16 @@ object X4 {
120117 }
121118}
122119
120+ object UnusedX4 {
121+ // Macro generated
122+ implicit unused def x4Repr [A , B , C , D ]: LabelledGeneric [X4 [A , B , C , D ]] {
123+ type Repr = R [" a" , A ] :: R [" b" , B ] :: R [" c" , C ] :: R [" d" , D ] :: HNil
124+ } = {
125+ println(" X4.x4Repr" )
126+ null
127+ }
128+ }
129+
123130object Test {
124131 def main (args : Array [String ]): Unit = {
125132 val source : Vector [X4 [Int , String , Double , Boolean ]] =
@@ -131,16 +138,21 @@ object Test {
131138
132139 {
133140 import UnusedExists ._
141+ import UnusedX4 ._
134142 println(" unused" )
135143 val unusedD = ds.col(" d" )
136144 val outSpark1 : Vector [Boolean ] = ds.select(unusedD).collect()
137145 assert(outSpark1 == outColl)
138146 }
139147
140- println(" used" )
141- val usedD = ds.col(" d" )
142- val outSpark2 : Vector [Boolean ] = ds.select(usedD).collect()
143- assert(outSpark2 == outColl)
148+ {
149+ import UsedExists ._
150+ import UsedX4 ._
151+ println(" used" )
152+ val usedD = ds.col(" d" )
153+ val outSpark2 : Vector [Boolean ] = ds.select(usedD).collect()
154+ assert(outSpark2 == outColl)
155+ }
144156
145157 println(" end" )
146158 }
0 commit comments