scala shapeless lenses not working -


in project encountered situation need perform nested update on immutable object instance of case class.

firstly wanted use copy function provided case classes stumbled upon lenses. looked shapeless , scalaz implementations , decided try use lenses shapeless, grabbed dependency, added "com.chuusai" % "shapeless" % "2.0.0" cross crossversion.full build.sbt , tried write simple, based on available example on github: https://github.com/milessabin/shapeless/wiki/feature-overview:-shapeless-2.0.0#boilerplate-free-lenses-for-arbitrary-case-classes.

object lenseexamples extends app {   import shapeless._    // pair of ordinary case classes ...   case class address(street : string, city : string, postcode : string)   case class person(name : string, age : int, address : address)    // lenses on person/address ...   val namelens     = lens[person] >> 0   val agelens      = lens[person] >> 1   val addresslens  = lens[person] >> 2   val streetlens   = lens[person] >> 2 >> 0   val citylens     = lens[person] >> 2 >> 1   val postcodelens = lens[person] >> 2 >> 2    val person = person("joe grey", 37, address("southover street", "brighton", "bn2 9ua"))    val age1 = agelens.get(person) } 

but during compilation getting errors like:

inferred type arguments [nothing,int] not conform method >>'s type parameter bounds [l <: shapeless.hlist,n <: shapeless.nat]   val namelens     = lens[person] >> 0                                   ^ type mismatch;  found   : int(0)  required: n   val namelens     = lens[person] >> 0                                      ^ not find implicit value parameter iso: shapeless.iso[api.lenseexamples.person,l]   val namelens     = lens[person] >> 0                                   ^                                                                        ^  

probably missing obvious because copy-pasted example wiki.

edit: after comment travis generated dependency graph project using https://github.com/jrudolph/sbt-dependency-graph , observed spray-routing including shapeless library:

[info]   +-io.spray:spray-routing:1.3.0 [s] [info]   | +-com.chuusai:shapeless_2.10:1.2.4 [s] [info]   | | +-org.scala-lang:scala-library:2.10.0 (evicted by: 2.10.4) [info]   | | +-org.scala-lang:scala-library:2.10.3 (evicted by: 2.10.4) 

so removed dependency , tried example https://github.com/milessabin/shapeless/blob/scala-2.9.x/examples/src/main/scala/shapeless/examples/lenses.scala , works properly.

your example should work if replace lens[person] lens[person] (ie. lower case l) throughout. why? shapeless dependency pointing @ just-published, not yet announced or documented shapeless-2.0.0 final release. shh ... don't tell ;-)


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

inno setup - TLabel or TNewStaticText - change .Font.Style on Focus like Cursor changes with .Cursor -