Skip to content

Commit 73524a7

Browse files
committed
Walkaround type inference problem (thanks @milessabin)
1 parent 0006307 commit 73524a7

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

tests/run-with-compiler/i5941/macro_1.scala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,6 @@ object Lens {
1212
def set(t: T, s: S): S = _set(t)(s)
1313
}
1414

15-
/** case class Address(streetNumber: Int, streetName: String)
16-
*
17-
* Lens.gen[Address, Int](_.streetNumber) ~~>
18-
*
19-
* Lens[Address, Int](_.streetNumber)(n => a => a.copy(streetNumber = n))
20-
*/
21-
inline def gen[S, T](get: S => T): Lens[S, T] = ~impl('(get))
22-
2315
def impl[S: Type, T: Type](getter: Expr[S => T])(implicit refl: Reflection): Expr[Lens[S, T]] = {
2416
import refl._
2517
import util._
@@ -41,3 +33,17 @@ object Lens {
4133
}
4234
}
4335
}
36+
37+
object GenLens {
38+
/** case class Address(streetNumber: Int, streetName: String)
39+
*
40+
* Lens.gen[Address, Int](_.streetNumber) ~~>
41+
*
42+
* Lens[Address, Int](_.streetNumber)(n => a => a.copy(streetNumber = n))
43+
*/
44+
45+
def apply[S] = new MkGenLens[S]
46+
class MkGenLens[S] {
47+
inline def apply[T](get: S => T): Lens[S, T] = ~Lens.impl('(get))
48+
}
49+
}

tests/run-with-compiler/i5941/usage_2.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ case class Address(streetNumber: Int, streetName: String)
22

33
object Test {
44
def main(args: Array[String]): Unit = {
5-
// val len = Lens.gen[Address, Int](_.streetNumber)
6-
val len = Lens.gen[Address, Int]( (a: Address) => a.streetNumber)
5+
val len = GenLens[Address](_.streetNumber)
76
val address = Address(10, "High Street")
87
assert(len.get(address) == 10)
98
val addr2 = len.set(5, address)

0 commit comments

Comments
 (0)