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 {
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+ }
Original file line number Diff line number Diff line change @@ -2,8 +2,7 @@ case class Address(streetNumber: Int, streetName: String)
22
33object 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)
You can’t perform that action at this time.
0 commit comments