On Mon, May 24, 2010 at 7:47 PM, Chris Smith <cdsmith@gmail.com> wrote:
Just one comment (in a few parts).

On Mon, 2010-05-24 at 17:47 +0300, Michael Snoyman wrote:

> I would say that Yesod and Snap are very orthogonal projects. Without
> offense to the Snap authors, I don't really think Snap is a framework;
> it's much more low-level than that.

That seems to be overstating the case a bit.  Snap is designed to write
applications directly on top of it, and in that sense acts as a
framework.  Some of the difference you're seeing likely comes down to
preference about how heavy the "framework" ought to be.

> * Yesod has type-safe URLs, I don't believe Snap has any similar
> feature. However, as I mentioned already, Snap is lower level than
> Yesod, so you could easily implement type-safe URLs on top of Snap.

Snap does provide a form of routing requests, and even of parsing data
from the contents of the URL.  It looks to be based on combinators
similar to what Happstack does, with the exception that capturing
variables from URLs is done in a relatively braindead way by adding
special syntax with colons inside strings.

The point here is, Snap does something different; not necessarily
something worse.  We all have our preferences.  Treating Snap as a new
underlying server implementation on top of which to layer WAI and Yesod
is possible, but rather missing the point.  Much of what I get from Snap
is that we can dispense with some of the unnecessary complexity and just
solve problems.

Then again, I've also built three or four significant internally used
web applications with Happstack, and have yet to use happstack-state for
anything but working through tutorials.  Could be I'm just afraid of
change...

I think you read my e-mail a little too harshly. Let me rephrase:

* The feature set Snap has right now does not qualify it as a framework *in my mind*. If someone asks to compare the features of Snap and Yesod, there's not much to say. I'm well aware of the subjectivity of the term framework, I'm merely saying that by the criteria I know, and which I think most people are used to, Snap does not provide the features of a framework.

* I'm well aware of Snap's routing abilities, but it still does not support type-safe URLs. You may not want type-safe URLs, that's fine. But I can't compare Yesod's implementation of them versus Snap's, simply because the latter is absent.

If you see Snap as a great way to write applications without complications, go for it, I think that's great. For people that want features that Yesod provides, I think it will be nice to have a fast server to run on top of.

Michael