Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. import shapeless._
  2.  
  3. // A pair of ordinary case classes ...
  4. case class Address(street : String, city : String, postcode : String)
  5. case class Person(name : String, age : Int, address : Address)
  6.  
  7. // Some lenses over Person/Address ...
  8. val nameLens = lens[Person] >> 'name
  9. val ageLens = lens[Person] >> 'age
  10. val addressLens = lens[Person] >> 'address
  11. val streetLens = lens[Person] >> 'address >> 'street
  12. val cityLens = lens[Person] >> 'address >> 'city
  13. val postcodeLens = lens[Person] >> 'address >> 'postcode
  14.  
  15. scala> val person = Person("Joe Grey", 37, Address("Southover Street", "Brighton", "BN2 9UA"))
  16. person: Person = Person(Joe Grey,37,Address(Southover Street,Brighton,BN2 9UA))
  17.  
  18. scala> val age1 = ageLens.get(person) // Read field, note inferred type
  19. age1: Int = 37
  20.  
  21. scala> val person2 = ageLens.set(person)(38) // Update field
  22. person2: Person = Person(Joe Grey,38,Address(Southover Street,Brighton,BN2 9UA))
  23.  
  24. scala> val person3 = ageLens.modify(person2)(_ + 1) // Transform field
  25. person3: Person = Person(Joe Grey,39,Address(Southover Street,Brighton,BN2 9UA))
  26.  
  27. scala> val street = streetLens.get(person3) // Read nested field
  28. street: String = Southover Street
  29.  
  30. scala> val person4 = streetLens.set(person3)("Montpelier Road") // Update nested field
  31. person4: Person = Person(Joe Grey,39,Address(Montpelier Road,Brighton,BN2 9UA))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement