Lenses

1 view
Skip to first unread message

Bill Venners

unread,
Sep 19, 2014, 12:55:47 PM9/19/14
to Scala...@googlegroups.com
Hi All,

And here is the REPL session about Lenses in scalaz.

scala> case class Address(city: String, zip: Int)
defined class Address

scala> case class User(name: String, address: Address)
defined class User

scala> val user = User("Nad", Address("Sallad", 79071))
user: User = User(Nad,Address(Sallad,79071))

scala> val updatedUser = user.copy(name = "Evets")
updatedUser: User = User(Evets,Address(Sallad,79071))

scala> val updatedAddress = user.copy(address = user.address.copy(city
= "Revned"))
updatedAddress: User = User(Nad,Address(Revned,79071))

scala> val nameL: Lens[User, String] = Lens.lensu((u, newName) =>
u.copy(name = newName), _.name)
nameL: scalaz.Lens[User,String] = scalaz.LensFunctions$$anon$5@3a3941c8

scala> val addrL: Lens[User, Address] = Lens.lensu((u, newAddr) =>
u.copy(address = newAddr), _.address)
addrL: scalaz.Lens[User,Address] = scalaz.LensFunctions$$anon$5@5dd68001

scala> val zipL: Lens[Address, Int] = Lens.lensu((a, newZip) =>
a.copy(zip = newZip), _.zip)
zipL: scalaz.Lens[Address,Int] = scalaz.LensFunctions$$anon$5@48a5bc0c

scala> nameL.get(user)
res11: String = Nad

scala> addrL.set(user, Address("Empty", 0))
res12: User = User(Nad,Address(Empty,0))

scala> zipL compose addrL
res13: scalaz.LensFamily[User,User,Int,Int] =
scalaz.LensFamilyFunctions$$anon$4@3802736c

scala> res13.get(user)
res15: Int = 79071

scala> user
res16: User = User(Nad,Address(Sallad,79071))

scala> res13.set(user, 45678)
res17: User = User(Nad,Address(Sallad,45678))

Bill
----
Bill Venners
Artima, Inc.
http://www.artima.com
Reply all
Reply to author
Forward
0 new messages