I tried to install the latest version of heist. The install failed (something about directory) and following that I get the dreaded circular dependency message when I try to recompile my application:
cabal.exe: dependencies conflict: ghc-6.12.1 requires array ==0.3.0.1 however array-0.3.0.1 was excluded because ghc-6.12.1 requires array ==0.3.0.0 So for now, the entire effort is toast. I'm beginning to wonder about Haskell's stability in general. :( Kevin --- On Tue, 6/22/10, Kevin Jardine <[email protected]> wrote: > From: Kevin Jardine <[email protected]> > Subject: Re: [Snap Framework] renderTemplate with XML fragments in Heist > To: [email protected] > Date: Tuesday, June 22, 2010, 12:33 PM > I'm still floundering but now I'm > trying a modified approach: > > My own node functions (called by the splice function) have > been returning > > MyMonad [Node] > > I'm now recoding them to all return > > Splice MyMonad > > in case that might work. > > Kevin > > --- On Tue, 6/22/10, Kevin Jardine <[email protected]> > wrote: > > > From: Kevin Jardine <[email protected]> > > Subject: Re: [Snap Framework] renderTemplate with XML > fragments in Heist > > To: [email protected] > > Date: Tuesday, June 22, 2010, 11:00 AM > > Sorry for banging on about this. > > > > I now have code that returns lists of nodes and starts > by > > running the page shell template with Splice functions > > handling the rest. So far as I know, this is the > "Heist way" > > to do things. > > > > I am still running into the problem that > renderTemplate > > returns a byte string and callTemplate returns some > exotic > > complex type. > > > > Is there not a public template function that returns a > list > > of nodes? > > > > Kevin > > > > --- On Thu, 6/17/10, MightyByte <[email protected]> > > wrote: > > > > > From: MightyByte <[email protected]> > > > Subject: Re: [Snap Framework] renderTemplate with > XML > > fragments in Heist > > > To: "Kevin Jardine" <[email protected]> > > > Cc: [email protected] > > > Date: Thursday, June 17, 2010, 6:36 PM > > > Yes, that's correct. Just keep > > > in mind that one of our main goals is > > > to promote the clean separation between view and > > business > > > logic. > > > Heist was intentionally designed to discourage > > putting > > > business logic > > > in the templates (views). This is why we > didn't > > make > > > any kind of loop > > > or conditional syntax available in the > templates. > > > Similarly we want > > > to discourage putting views inside your Haskell > > code. > > > So while it > > > might be easy to make a splice like this: > > > > > > myArticle post = do > > > let body = [Element "span" [("class", > "author")] > > > [Text (getAuthor post)] > > > > > > ,Element "div" [("class", "postbody")] > (getBody > > > post) > > > > > > ] > > > return [Element "h1" [] [Text (getTitle > post)] > > > ,Element > > > "div" [("class", "post")] body > > > ] > > > > > > ...we discourage this pattern of putting view > details > > in > > > your code. > > > The preferred approach would be to implement this > bit > > of > > > HTML as > > > another template that gets each of the > individual > > pieces of > > > data from > > > bound splices. > > > > > > On Thu, Jun 17, 2010 at 12:13 PM, Kevin Jardine > <[email protected]> > > > wrote: > > > > OK, thanks for the encouragement. > > > > > > > > I was looking at the definition of > bindStrings > > itself > > > and it occurs to me that a trivial variant would > be: > > > > > > > > bindNodes pairs ts = foldr add ts pairs > > > > where > > > > add (n,v) = bindSplice n (return v) > > > > > > > > So perhaps I'll start with that and see > where it > > takes > > > me. > > > > > > > > That means that I would be rewriting my > view > > system to > > > process lists of nodes rather than strings, but > the > > same > > > flow structure would remain (at least for now). > > > > > > > > Kevin > > > > > > > > --- On Thu, 6/17/10, MightyByte <[email protected]> > > > wrote: > > > > > > > >> From: MightyByte <[email protected]> > > > >> Subject: Re: [Snap Framework] > renderTemplate > > with > > > XML fragments in Heist > > > >> To: "Kevin Jardine" <[email protected]> > > > >> Date: Thursday, June 17, 2010, 6:05 PM > > > >> Yes, that is exactly the approach we > > > >> had in mind. You could even > > > >> eliminate nodeDict as a parameter and > store > > it as > > > state in > > > >> MyMonad. > > > >> But you wouldn't have to do that. You > can > > > organize it > > > >> in whatever way > > > >> works best for your application. > > > >> > > > >> On Thu, Jun 17, 2010 at 12:00 PM, Kevin > > Jardine > > > <[email protected]> > > > >> wrote: > > > >> > One experiment that I'm looking at > is > > > defining: > > > >> > > > > >> > klugeSplice :: > [(B.ByteString,[Node])] > > -> > > > Splice > > > >> MyMonad > > > >> > klugeSplice nodeDict = do > > > >> > input <- getParamNode > > > >> > let name = getName input > > > >> > return $ fromMaybe [Text > (B.pack > > > "oops")] $ > > > >> lookup name nodeDict > > > >> > > > > >> > and passing > > > >> > > > > >> > (klugeSplice nodeDict) as the > first > > parameter > > > to > > > >> bindSplice. > > > >> > > > > >> > At least that function compiles but > I'm > > > afraid that > > > >> I'm still lost in a conceptual sea so > I'm not > > sure > > > if this > > > >> is anything like the best approach. > > > >> > > > > >> > Kevin > > > >> > > > > >> > --- On Thu, 6/17/10, Kevin Jardine > > <[email protected]> > > > >> wrote: > > > >> > > > > >> >> From: Kevin Jardine <[email protected]> > > > >> >> Subject: Re: [Snap Framework] > > > renderTemplate with > > > >> XML fragments in Heist > > > >> >> To: [email protected] > > > >> >> Date: Thursday, June 17, 2010, > 5:05 > > PM > > > >> >> To explain in more detail, I > had > > > >> >> thought that Heist was a > "slave" > > > template > > > >> library. > > > >> >> > > > >> >> You hand it some attributes > (nodes > > or > > > strings) and > > > >> a > > > >> >> template name and it hands you > back > > > something > > > >> (nodes or a > > > >> >> rendered string). > > > >> >> > > > >> >> Currently, however, it seems > as > > though > > > Heist is > > > >> the master > > > >> >> app and mine ends up being the > slave > > - > > > you hand > > > >> Heist a page > > > >> >> shell and define some hooks and > it > > does > > > all the > > > >> work and > > > >> >> hands you the final string. > > > >> >> > > > >> >> Is that correct? > > > >> >> > > > >> >> If so, I'm still keen to use > the > > library > > > but will > > > >> have to > > > >> >> rethink how I am doing things > as the > > work > > > flow is > > > >> in essence > > > >> >> in the reverse order of what I > am > > used > > > to. > > > >> >> > > > >> >> Kevin > > > >> >> > > > >> >> --- On Thu, 6/17/10, Kevin > Jardine > > <[email protected]> > > > >> >> wrote: > > > >> >> > > > >> >> > From: Kevin Jardine <[email protected]> > > > >> >> > Subject: Re: [Snap > Framework] > > > renderTemplate > > > >> with XML > > > >> >> fragments in Heist > > > >> >> > To: "MightyByte" <[email protected]> > > > >> >> > Date: Thursday, June 17, > 2010, > > 4:34 > > > PM > > > >> >> > Thanks for your patience > here! > > > >> >> > > > > >> >> > I am still running into a > > > conceptual > > > >> difficulty here > > > >> >> as I > > > >> >> > want to pass around a > > > dictionary/map > > > >> structure of some > > > >> >> kind > > > >> >> > of attribute value pairs. > > > >> >> > > > > >> >> > Eg. [(String, [Node])] or > > > [(String,String)] > > > >> which I > > > >> >> can > > > >> >> > manipulate in my own monad > and > > then > > > pass to > > > >> Heist when > > > >> >> and > > > >> >> > if I choose. > > > >> >> > > > > >> >> > But bindSplice takes a > > function > > > where I would > > > >> want a > > > >> >> > dictionary. > > > >> >> > > > > >> >> > I am obviously lacking in > > > Heist-foo. > > > >> >> > > > > >> >> > What to do? > > > >> >> > > > > >> >> > Kevin > > > >> >> > > > > >> >> > --- On Thu, 6/17/10, > > MightyByte > > > <[email protected]> > > > >> >> > wrote: > > > >> >> > > > > >> >> > > From: MightyByte > <[email protected]> > > > >> >> > > Subject: Re: [Snap > > Framework] > > > >> renderTemplate with > > > >> >> XML > > > >> >> > fragments in Heist > > > >> >> > > To: "Kevin Jardine" > <[email protected]> > > > >> >> > > Date: Thursday, June > 17, > > 2010, > > > 3:55 PM > > > >> >> > > Yeah, this was our > > intent. > > > >> >> > > renderTemplate is the > only > > way > > > to get > > > >> >> > > things out of > > TemplateMonad. > > > By using > > > >> >> bindSplice as > > > >> >> > I > > > >> >> > > mentioned > > > >> >> > > above, you keep your > data > > is > > > structured > > > >> nodes > > > >> >> when > > > >> >> > > possible. > > > >> >> > > bindStrings is only > > intended as > > > a > > > >> convenient way > > > >> >> to > > > >> >> > pass > > > >> >> > > strings into > > > >> >> > > templates. > > > >> >> > > > > > >> >> > > On Thu, Jun 17, 2010 > at > > 9:47 > > > AM, Kevin > > > >> Jardine > > > >> >> <[email protected]> > > > >> >> > > wrote: > > > >> >> > > > Or am I making > a > > > conceptual error > > > >> here? > > > >> >> > > > > > > >> >> > > > Perhaps I should > be > > using > > > >> runTemplate to get > > > >> >> the > > > >> >> > XML > > > >> >> > > fragments and only > use > > > renderTemplate at > > > >> the very > > > >> >> top > > > >> >> > > level? > > > >> >> > > > > > > >> >> > > > This would keep > the > > input > > > as > > > >> structured > > > >> >> nodes > > > >> >> > and > > > >> >> > > convert to > bytestrings > > only at > > > the last > > > >> step. > > > >> >> > > > > > > >> >> > > > Kevin > > > >> >> > > > > > > >> >> > > > --- On Thu, > 6/17/10, > > Kevin > > > Jardine > > > >> <[email protected]> > > > >> >> > > wrote: > > > >> >> > > > > > > >> >> > > >> From: Kevin > > Jardine > > > <[email protected]> > > > >> >> > > >> Subject: > > > renderTemplate with > > > >> XML > > > >> >> fragments > > > >> >> > in > > > >> >> > > Heist > > > >> >> > > >> To: [email protected] > > > >> >> > > >> Date: > Thursday, > > June > > > 17, 2010, > > > >> 3:38 PM > > > >> >> > > >> If I call > > > >> >> > > >> > > > >> >> > > >> > renderTemplate > > > (bindStrings > > > >> dict > > > >> >> > > emptyTemplateState) > > > >> >> > > >> > templateName > > > >> >> > > >> > > > >> >> > > >> this works > fine > > if the > > > dict > > > >> values are > > > >> >> all > > > >> >> > > unstructured > > > >> >> > > >> data. > > > >> >> > > >> > > > >> >> > > >> However, if > they > > are > > > XML > > > >> structures, > > > >> >> the > > > >> >> > resulting > > > >> >> > > HTML is > > > >> >> > > >> escaped, > > presumably > > > because > > > >> bindStrings > > > >> >> > inserts > > > >> >> > > them as Text > > > >> >> > > >> nodes. > > > >> >> > > >> > > > >> >> > > >> What > function > > instead > > > of > > > >> bindStrings do > > > >> >> I > > > >> >> > call to > > > >> >> > > insert > > > >> >> > > >> XML > fragments? > > > >> >> > > >> > > > >> >> > > >> Kevin > > > >> >> > > >> > > > >> >> > > >> > > > >> >> > > >> > > > >> >> > > >> > > > >> >> > > > > > > >> >> > > > > > > >> >> > > > > > > >> >> > > > > > > >> >> > > > _______________________________________________ > > > >> >> > > > Snap mailing > list > > > >> >> > > > [email protected] > > > >> >> > > > http://mailman-mail5.webfaction.com/listinfo/snap > > > >> >> > > > > > > >> >> > > > > > >> >> > > > > >> >> > > > > >> >> > > > > >> >> > > > > >> >> > > > >> >> > > > >> >> > > > >> >> > > > >> > > > > >> > > > > >> > > > > >> > > > > _______________________________________________ > > > >> > Snap mailing list > > > >> > [email protected] > > > >> > http://mailman-mail5.webfaction.com/listinfo/snap > > > >> > > > > >> > > > > > > > > > > > > > > > > > _______________________________________________ > > > > Snap mailing list > > > > [email protected] > > > > http://mailman-mail5.webfaction.com/listinfo/snap > > > > > > > > > > > > > > > > > > > _______________________________________________ Snap mailing list [email protected] http://mailman-mail5.webfaction.com/listinfo/snap
