File tree Expand file tree Collapse file tree 2 files changed +15
-10
lines changed
tests/run-with-compiler/i5941 Expand file tree Collapse file tree 2 files changed +15
-10
lines changed Original file line number Diff line number Diff line change @@ -12,14 +12,6 @@ object Lens {
12
12
def set (t : T , s : S ): S = _set(t)(s)
13
13
}
14
14
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
-
23
15
def impl [S : Type , T : Type ](getter : Expr [S => T ])(implicit refl : Reflection ): Expr [Lens [S , T ]] = {
24
16
import refl ._
25
17
import util ._
@@ -41,3 +33,17 @@ object Lens {
41
33
}
42
34
}
43
35
}
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
+ }
Original file line number Diff line number Diff line change @@ -2,8 +2,7 @@ case class Address(streetNumber: Int, streetName: String)
2
2
3
3
object Test {
4
4
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)
7
6
val address = Address (10 , " High Street" )
8
7
assert(len.get(address) == 10 )
9
8
val addr2 = len.set(5 , address)
You can’t perform that action at this time.
0 commit comments