01:34:47 <trap_exit> where can I get an UNBIASED view of happ vs snap vs yesod ?
01:34:59 <stepcut> unlikely
01:35:28 <trap_exit> where can I read three pieces of propoganda, one for each framework that bashes theother two ?
01:35:55 <stepcut> :)
01:40:14 <mightybyte> trap_exit: I tried to do that here.  http://softwaresimply.blogspot.com/2012/04/hopefully-fair-and-useful-comparison-of.html
01:40:30 <trap_exit> man
01:40:35 <trap_exit> that is like 29 months old
01:40:41 <mightybyte> Also here: http://softwaresimply.blogspot.com/2012/12/haskell-web-framework-matrix_20.html
01:40:44 <trap_exit> but useful nevertheless :-)
01:40:58 <mightybyte> AFAIK it is still fairly applicable.
01:41:35 <mightybyte> APIs can change with the wind, but the underlying philosophy held by developers generally doesn't.
01:43:54 <trap_exit> mightybyte: what are combinators, and why are they better than DSLS?
01:43:59 <trap_exit> given you're in happstack, not yesod ?
01:45:22 <mightybyte> combinators are what haskell is all about.
01:45:26 <mightybyte> in short, functions.
01:45:31 <mightybyte> things you can compose together.
01:46:06 <mightybyte> Taking two individual pieces each with their own predictable behavior and combining them to get a predictable composite behavior.
01:47:10 <mightybyte> DSLs as they exist in Yesod are created by template haskell.
01:47:18 <trap_exit> hmm
01:47:20 <trap_exit> i like dsls
01:47:25 <trap_exit> I don't like tempplate haskell
01:47:33 <mightybyte> You write code in their DSL and then it generates template haskell for you
01:47:51 <mightybyte> DSLs done in this way are less constrained.
01:48:05 <trap_exit> mightybyte: are you defending yesod ?
01:48:07 <mightybyte> They don't have to be shoehorned into Haskell syntax and types.
01:48:14 <mightybyte> I'm trying to be unbiased.
01:48:33 <trap_exit> so there thing is this
01:48:35 <mightybyte> But that also means that things aren't as predictable.
01:48:45 <trap_exit> I actually care very little about static compile time checking
01:48:48 <trap_exit> as I intend to use Haste.App
01:48:57 <mightybyte> Once you enter a quasiquote, if you're coming from the outside, all bets are off.
01:49:03 <trap_exit> I just want a dumb as possible web server with ssl so I can server a basic index.htl + *.js files to use with Haste.App
01:49:14 <mightybyte> None of your pre-existing knowledge helps you figure out what to type.
01:49:16 <trap_exit> maybe the correct answer is ... nginx
01:49:39 <trap_exit> so many of these tools seem to care about form based web applications
01:49:43 <trap_exit> whereas I'm after a single page application
01:49:54 <mightybyte> ahh
01:50:03 <trap_exit> hmm, thanks for your help
01:50:05 <trap_exit> i'm convinced now
01:50:08 <trap_exit> I just wanted nginx + Haste.app
01:50:09 <mightybyte> The other thing about DSLs is that they tend to not be very extendable.
01:50:26 <trap_exit> in all seriousness: assume I'm using Haste.App -- that my webpage is single page, and the js is written in Haskell
01:50:29 <mightybyte> If the syntax they give you doesn't quite do what you want, then you're stuck.
01:50:32 <trap_exit> why do I need any of this static form-based type checking?
01:50:45 <mightybyte> Maybe you don't.
01:51:02 <mightybyte> This last point is where combinators win over DSLs.
01:51:17 <mightybyte> Because combinators exist in Haskell land you have all the power of haskell to abstract them.
01:51:23 <trap_exit> right
01:51:24 <mightybyte> With a DSL, you don't have all the power of Haskell.
01:51:37 <mightybyte> ...unless the DSL author makes his DSL Haskell.
01:52:04 <mightybyte> And I think it's a safe bet that SPJ & co have thought more about building programming language abstractions than Joe DSL author.
01:52:27 <mightybyte> So if you're concerned about flexibility and power, you should go with combinators.
01:53:04 <mightybyte> If you're concerned about the most elegant possible syntax for describing your domain, then DSLs are probably more what you want.
01:55:42 <mightybyte> Well, I've got to go now.  Best of luck deciding.
01:58:04 <trap_exit> thanks for your help :-)