A little background on implicits, maybe it'll help you. A particular expression will only ever have one implicit conversion applied -- the compiler will not attempt to chain together implicit conversions (as I believe that's an NP problem)
So, the arguments to bind(...) are BindParams. There are implicit conversions out there to convert (String, NodeSeq => NodeSeq) to a FuncBindParam, which makes the nice "name" -> function syntax work. But you provided (String, NodeSeq => List[Node]), not (String, NodeSeq => NodeSeq), so it couldn't find an implicit to apply. You could have also rewritten to use a FuncBindParam directly rather than apply a type annotation (not that there's any benefit, just FYI). e.g. bind("videos", template, ... FuncBindParam("list", ns => resources.flatMap(...))) -Ross On Dec 30, 2009, at 3:03 PM, Igor Lev wrote: > Hmm that _was_ pretty silly. I guess I have to go over the implicits > section in my Scala notes :) > > Thanks for the quick response David. > > On Wed, Dec 30, 2009 at 2:19 PM, David Pollak <feeder.of.the.be...@gmail.com > > wrote: > > > On Wed, Dec 30, 2009 at 11:03 AM, Igor <igor...@gmail.com> wrote: > Hi everyone, > > Long time lurker, first time poster here, I've been trying to pick up > Lift recently and am stuck with a seemingly simple bind: > <div> > <subject:videos> > <videos:count/> out of <videos:total/> videos > <videos:list> > <div> > <video:name/> <span class="cm"> some text</span> > </div> > </videos:list> > </subject:videos> > </div> > > val length = resources.length > bind("videos", template, > "count" -> length, > "total" -> length, > "list" -> {(ns: NodeSeq) => resources.flatMap(c => bind("video", > ns, > "name" -> > <a href="#">{c.displayName}</a>))}) > > > > {(ns: NodeSeq) => (resources.flatMap(c => bind()): NodeSeq)} > > That should do it. You have to tell the compiler you want a NodeSeq > out of the function and the compiler will apply the implicit > conversion from List[Node] -> NodeSeq > > This is throwing the following compiler error: > > error: overloaded method value bind with alternatives > (String,net.liftweb.common.Box[(scala.xml.NodeSeq) => > scala.xml.NodeSeq],net.liftweb.common.Box > [(scala.xml.PrefixedAttribute) => > scala.xml.MetaData > ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*) > scala.xml.NodeSeq <and> > (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*) > scala.xml.NodeSeq cannot be applied to > (java.lang.String > ,scala.xml.NodeSeq > ,net.liftweb.util.Helpers.IntBindParam > ,net.liftweb.util.Helpers.IntBindParam, > (String, (scala.xml.NodeSeq) => List[scala.xml.Node])) > bind("videos", template, > > > Now as far as I can tell the issue is that I'm getting a List > [scala.xml.Node] out of the flatMap. For some reason I thought I was > able to do this before but if not should I be doing something else to > convert it to a NodeSeq instead ? > > I basically have a section that I want to populate with some content > (1 content item per list item) and also stick the length of the list > in the top of the section. > > Not sure if my whole approach is flawed or not, open to any > suggestions or pointers to the relevant section of TFM. > > > Thanks a lot, > Igor > > -- > > You received this message because you are subscribed to the Google > Groups "Lift" group. > To post to this group, send email to lift...@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 > . > > > > > > -- > Lift, the simply functional web framework http://liftweb.net > Beginning Scala http://www.apress.com/book/view/1430219890 > Follow me: http://twitter.com/dpp > Surf the harmonics > > -- > > You received this message because you are subscribed to the Google > Groups "Lift" group. > > To post to this group, send email to lift...@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 > . > > > -- > > You received this message because you are subscribed to the Google > Groups "Lift" group. > To post to this group, send email to lift...@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 > . -- You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to lift...@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.