Skip to content

Instantly share code, notes, and snippets.

@noelmarkham
Last active August 29, 2015 14:10
Show Gist options
  • Save noelmarkham/31c426a7e945f8ddccc1 to your computer and use it in GitHub Desktop.
Save noelmarkham/31c426a7e945f8ddccc1 to your computer and use it in GitHub Desktop.
Futures and lenses
scala> usernameToUserIdLens.get("Alan").foreach(println)
** SELECT ID FROM USERS WHERE NAME = Alan
1
scala> userIdToStreetNameLens.get(1).foreach(println)
** SELECT STREET_NAME FROM ADDRESS WHERE USER_ID = 1
High Street
scala> val usernameToStreetNameLens = usernameToUserIdLens >=> userIdToStreetNameLens
scala> usernameToStreetNameLens.get("Alan").foreach(println)
** SELECT ID FROM USERS WHERE NAME = Alan
** SELECT STREET_NAME FROM ADDRESS WHERE USER_ID = 1
High Street
scala> usernameToStreetNameLens.set("Alan", "New Street")
** SELECT ID FROM USERS WHERE NAME = Alan
** SELECT STREET_NAME FROM ADDRESS WHERE USER_ID = 1
** UPDATE ADDRESS SET STREET_NAME = New Street WHERE USER_ID = 1
res99: scala.concurrent.Future[String] = scala.concurrent.impl.Promise$DefaultPromise@11a0c15c
** UPDATE USERS SET NAME = Alan WHERE ID = 1
scala> usernameToStreetNameLens.get("Alan").foreach(println)
** SELECT ID FROM USERS WHERE NAME = Alan
** SELECT STREET_NAME FROM ADDRESS WHERE USER_ID = 1
New Street
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment