[web-devel] On the state of Haskell web frameworks
Nils Schweinsberg
ml at n-sch.de
Sun Sep 19 18:50:39 CEST 2010
About one year ago, I started hacking on web projects with Haskell. One
of my first web application was, just like hpaste, a simple paste bin:
Website: http://npaste.de/
Source: http://github.com/mcmaniac/npaste.de
npaste.de has currently over 3000 pastes and 13 registered users. You
can use custom/random paste IDs, hide your paste or modify/delete them
(if you have a user account). I did a lot of experiments in there and
the source of npaste is therefor probably not very beautiful/easy to
read. As my second "big" project I started just recently to turn my
current "website" (a static index.html on n-sch.de) into a dynamic
Haskell powered website with integrated blog, comment system etc. It's
still in its early days, but the code can be found on:
http://github.com/mcmaniac/n-sch.de
Since I'm using happstack in all my projects (seems to be the most
"complete" web framework to me) I released a small library
"happstack-auth" on last friday, which is a high level library for user
authentication/session managment in happstack applications. I wrote a
very simple example website on how to use this library. It can be found on:
Website: http://n-sch.de/happstack-auth
Source: http://github.com/mcmaniac/happstack-auth/tree/master/demo/
My general approach for a new web project is:
> 1. CGI/FastCGI
Happstack for me. Setting up the happstack server is a simple
"simpleHTTP appConf myWebapp" call, and happstack itself offers a lot of
very nice functions to
> 2. highlighting-kate
Used it for npaste.de aswell, in combination with pandoc (markdown
rendering).
> 3. Takusen
Since I'm using happstack, I'm using happstack-state as my primary
"database". Setting up the data types for the state and creating the
functions to manipulate them is sometimes a bit of a mess (since it
involves some template haskell etc), but I think it's worth it: You can
use real haskell data types instead of having to think about a database
representation.
In my latest "website-blog-project" I completly separated the state and
the actual code of the website. Only a small, very nice API is returned:
http://github.com/mcmaniac/n-sch.de/blob/master/src-lib/Blog.hs
> 4. ConfigFile
I usually just add a few lines to my Main.hs, so there is no big need
for a config:
http://github.com/mcmaniac/n-sch.de/blob/master/src/Main.hs#L24
> 5. blaze-html/xhtml
I used HSP for a while, but I think Blaze is way more beautiful to use:
http://github.com/mcmaniac/happstack-auth/blob/master/demo/Templates.hs
> 6. formlets
Didn't know about this lib. :) Gotta try it one day.
> 7. URI routing
Again, happstack is doing this very nicely:
http://github.com/mcmaniac/happstack-auth/blob/master/demo/Route.hs
> 8. Simple template writing
No template experience so far.
I'd say, once you *know* which libraries to use, it's very easy and
uncomplicated to create a new website with haskell. But since there is
no complete framework, the learning curve is a bit steep at the
beginning and you'll have to do a lot of experiments before you realize
what libraries are actually usefull.
By the way, did anyone use javascript on their websites? I wonder if
there are any nice ways to combine those two worlds?
More information about the web-devel
mailing list