
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?