Ok I don't think it is a compiler bug.
Marc called it like: var singular = BindHelpers.attr("singular", {s: String => {s.toLowerCase ...}, false} BUT the apply function is defined as def apply[T](key: String, f: Info => T, default: => T): T Note that function f takes an Info not a T as parameter and for attr object Info = NodeSeq and not String. => compiler errors. So Marc your conversion function is provided here with a NodeSeq and not a String so you can say: var singular = BindHelpers.attr[Boolean]("singular", {s: NodeSeq=> {...}, false} Br's, Marius On Jan 9, 2:59 pm, Marius <marius.dan...@gmail.com> wrote: > I hate git on windows ... I use it for the book unfortunatelly. > > On Jan 9, 1:46 pm, "David Pollak" <feeder.of.the.be...@gmail.com> > wrote: > > > > > On Fri, Jan 9, 2009 at 2:59 AM, Marius <marius.dan...@gmail.com> wrote: > > > > That's weird. I see that someone modified the code that I committed > > > moving most of the logic in the trait itself. I'm not sure if David > > > did that cause in git I see "unknown" author. > > > Yep... it was me... from my Windows machine which has a less > > than awesome support for Git. > > > > I do like those changes > > > but I need to look later on today when I get home if they have > > > something to do with your problem. Since apply functions are > > > implemented in the trait itself it it seems that compiler does not see > > > that Info abstract type is in fact a String in the attr object > > > context. I wonder if it's a compiler bug :D > > > Hmmm... that'd suck. > > Oh yeah big time ... If indeed my assumption is correct (which I need > to verify) I'll open a compiler bug and see if I can fix it. Worst > case scenario rollback ... which I hope it won't be the case. > > > > > > In my tests I used similar examples as you did and worked with no > > > problems. But I did not test with latest changed. > > > > Br's, > > > Marius > > > > On Jan 9, 10:35 am, Marc Boschma > > > <marc+lift...@boschma.cx<marc%2blift...@boschma.cx>> > > > wrote: > > > > Me either (rather embarrassing, had an old copy of BindHelpers.scala > > > > lying about :/ ) > > > > > However, a rather strange outcome... > > > > > [WARNING] /Users/marc/src/dad/todo/src/main/scala/com/liftworkshop/ > > > > snippet/TD.scala:99: error: overloaded method value apply with > > > > alternatives [T](String,String, > > > > (net.liftweb.util.BindHelpers.attr.Info) => T,=> T)T <and> [T](String, > > > > (net.liftweb.util.BindHelpers.attr.Info) => T,=> T)T <and> [T] > > > > (String,String,(net.liftweb.util.BindHelpers.attr.Info) => T)Option[T] > > > > <and> [T](String,(net.liftweb.util.BindHelpers.attr.Info) => > > > > T)Option[T] <and> (String,String,=> > > > > net > > > > .liftweb > > > > .util.BindHelpers.attr.Info)net.liftweb.util.BindHelpers.attr.Info > > > > <and> (String,=> > > > > net > > > > .liftweb > > > > .util.BindHelpers.attr.Info)net.liftweb.util.BindHelpers.attr.Info > > > > <and> (String,String)Option[net.liftweb.util.BindHelpers.attr.Info] > > > > <and> (String)Option[net.liftweb.util.BindHelpers.attr.Info] cannot be > > > > applied to (java.lang.String,(String) => Boolean,() => Boolean) > > > > [WARNING] val singular: Boolean = > > > BindHelpers.attr("singular", {s: > > > > String => s.toLowerCase match { > > > > > What I find weird is that the references to > > > > net.liftweb.util.BindHelpers.attr.Info (NodeSeq) > > > > > The offending line of code: > > > > val singular: Boolean = BindHelpers.attr("singular", > > > > {s: String => s.toLowerCase match { > > > > case "" => true > > > > case "true" => true > > > > case "t" => true > > > > case "yes" => true > > > > case "y" => true > > > > case _ => false}}, () => false) > > > > > I have also tried > > > > > val singular: Boolean = BindHelpers.attr("singular", > > > > {s: String => s.toLowerCase match { > > > > case "" => true > > > > case "true" => true > > > > case "t" => true > > > > case "yes" => true > > > > case "y" => true > > > > case _ => false}}, false) > > > > > which gets > > > > > [WARNING] /Users/marc/src/dad/todo/src/main/scala/com/liftworkshop/ > > > > snippet/TD.scala:99: error: type mismatch; > > > > [WARNING] found : (String) => Boolean > > > > [WARNING] required: (net.liftweb.util.BindHelpers.attr.Info) => Boolean > > > > [WARNING] val singular: Boolean = > > > BindHelpers.attr("singular", {s: > > > > String => s.toLowerCase match { > > > > > Once again the references to (net.liftweb.util.BindHelpers.attr.Info) > > > > => Boolean puzzle me... > > > > > It is like def apply[T](key: String, f: String => T, default: => > > > > T): T = attr(key).map(n => f(n.toString)).getOrElse(default) > > > > doesn't match... > > > > > I tried to help the compiler with > > > > > val singular: Boolean = BindHelpers.attr[Boolean] > > > > ("singular", {s: String => s.toLowerCase match { > > > > case "" => true > > > > case "true" => true > > > > case "t" => true > > > > case "yes" => true > > > > case "y" => true > > > > case _ => false}}, false) > > > > > and got > > > > > [WARNING] /Users/marc/src/dad/todo/src/main/scala/com/liftworkshop/ > > > > snippet/TD.scala:99: error: overloaded method value apply with > > > > alternatives (String,String,(net.liftweb.util.BindHelpers.attr.Info) > > > > => Boolean,=> Boolean)Boolean <and> (String, > > > > (net.liftweb.util.BindHelpers.attr.Info) => Boolean,=> Boolean)Boolean > > > > <and> (String,String,(net.liftweb.util.BindHelpers.attr.Info) => > > > > Boolean)Option[Boolean] <and> (String, > > > > (net.liftweb.util.BindHelpers.attr.Info) => Boolean)Option[Boolean] > > > > cannot be applied to (java.lang.String,(String) => Boolean,Boolean) > > > > [WARNING] val singular: Boolean = > > > > BindHelpers.attr[Boolean] > > > > ("singular", {s: String => s.toLowerCase match { > > > > > Marc > > > > > On 09/01/2009, at 3:44 PM, David Pollak wrote: > > > > > > Marc, > > > > > > Sorry... dunno what to tell you. :-( > > > > > > David > > > > > > On Thu, Jan 8, 2009 at 3:47 PM, Marc Boschma <marc > > > > > +lift...@boschma.cx> wrote: > > > > > Very cool indeed, except... I now get: > > > > > > [WARNING] /Users/marc/src/todo/src/main/scala/com/liftworkshop/ > > > > > snippet/TD.scala:99: error: value attr is not a member of object > > > > > net.liftweb.util.BindHelpers > > > > > [WARNING] val singular = BindHelpers.attr("singular", {s: > > > String > > > > > => s.toLowerCase match { > > > > > [WARNING] ^ > > > > > [WARNING] one error found > > > > > > I've cleaned out my .m2/repository and I always mvn -U clean > > > > > install... No proxies in place. Usually works a charm. > > > > > Frustrating as hell - I feel for those that actually make a living > > > > > in the Java/Maven world (must make a mental note to not quibble so > > > > > much on what those who do want to get paid :) > > > > > > Thoughts? > > > > > > Marc > > > > > > The full context of the code for those interested (David's todo app > > > > > modified thus): > > > > > > (The top of the file has import net.liftweb._ and import util._) > > > > > > private def doList(reDraw: () => JsCmd)(html: NodeSeq): > > > > > NodeSeq = { > > > > > val singular = BindHelpers.attr("singular", {s: > > > > > String => s.toLowerCase match { > > > > > case "" => true > > > > > case "true" => true > > > > > case "t" => true > > > > > case "yes" => true > > > > > case "y" => true > > > > > case _ => false}}, false) > > > > > val l = toShow > > > > > > if (singular) > > > > > l.flatMap(td => > > > > > bind("todo", html, > > > > > "check" -> > > > > > ajaxCheckbox(td.done, > > > > > v => > > > > > {td.done(v).save; reDraw()}), > > > > > "priority" -> > > > > > ajaxSelect(ToDo.priorityList, Full(td.priority.toString), > > > > > v => > > > > > {td.priority(v.toInt).save; reDraw()}), > > > > > "desc" -> desc(td, reDraw) > > > > > )) > > > > > else { > > > > > val xhtmls = template(html, l.length) > > > > > > l.zip(xhtmls).flatMap(n => { val (td , > > > > > xhtml) = n > > > > > bind("todo", xhtml, > > > > > "check" -> > > > > > ajaxCheckbox(td.done, > > > > > v => > > > > > {td.done(v).save; reDraw()}), > > > > > "priority" -> > > > > > ajaxSelect(ToDo.priorityList, Full(td.priority.toString), > > > > > v => > > > > > {td.priority(v.toInt).save; reDraw()}), > > > > > "desc" -> desc(td, reDraw) > > > > > )}) > > > > > } > > > > > } > > > > > > private def template(html: NodeSeq, i: Int): List[NodeSeq] = > > > > > expand(nodeSeq2List(html), i) > > > > > > private def nodeSeq2List(html: NodeSeq): List[NodeSeq] = { > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---