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
-~----------~----~----~----~------~----~------~--~---

Reply via email to