Today I decided to embark on an exploration of Haskell web development. I have previously bootstrapped a basic Snap setup but never got into actual hacking. Today I decided to give Yesod a go. I ran into a number of difficulties that drained away all my spare time this evening but in the end I feel like I’m ready to dive in tomorrow.
I started off by attempting to install Yesod, with a simple cabal install yesod
. This command took about 10 minutes to finish compiling
dependencies on my ThinkPad X61 before it died with an error. The
problem seemed to be the version of
haskell-platform was rather
out-of-date, meaning a tool, called alex
was too old for Yesod. To
solve this rather small issue I took the rather drastic step of
upgrading Ubuntu on the ThinkPad to
Precise Pangolin because
this includes the latest haskell-platform…and its all new and…just
because! This is Ubuntu after all - trigger happy upgrades are the
name of the game.
Meanwhile, in Mac land. While that upgrade was running I tried to run the new yesod web app on a Mac. Unfortunately I ran into all the problems I’ve encountered before with cabal-dev on OS X.
Firstly there’s some weirdness with cabal-dev being set to install
everything in the system library location. This just makes no sense for
cabal-dev - the whole point is for it to install libraries in a
vendored, per-project location - not interfering with system
libraries. It manifested itself as asking for a password all the time
(turn on verbose -v3
to see it running all cabal commands with sudo
- O_o). To fix that you edit the config file, outlined in a blog post I found. Annoying.
Another problem I had was ghc/ld spamming the terminal with loads of linker warnings. This really slowed down compilation. I didn’t really solve this (happened on my Mac Mini - didn’t happen on my work MacBook Air). I remember having to set options for GHC to silence that crap, but I forget the details…
In order to get it all working on my Mac I:
- Uninstalled haskell-platform (this is homebrew installed for me)
- Re-installed haskell-platform
- cabal installed cabal-dev, yesod
Everything worked then. There’s also strange voodoo you have to run to
unregister old packages - brew info haskell-platform
splits out the
necessary commands.
After all that, things worked…mostly. Currently there seems to be
some car crash of dependencies caused by a new release of something
called tls-extras. A helpful stranger in IRC (#yesod) told me to
cabal-dev install tls-extra-0.4.2.1
- this forces a working version
of that library and then you can happily install yesod and
everything’s groovy.
Who said Haskell was difficult? Not me.
So now I have a skeleton Yesod project up and running and it’s all looking very promising. The helper script for creating projects gave me some confidence - specifically asking if I wanted sqlite, postgres, MongoDB or nothing seemed pretty good to me - this doesn’t appear to be a web framework/persistence system tied to a particular way of doing things.
The main reason why I decided to dive into Yesod however was the high volume of interesting yesod-related blog traffic - this is a pretty crucial metric in gauging the health of a library community in my opinion and my RSS reader has been bombarded with posts about it so I felt I had to see what all the fuss was about.
Hopefully happy Haskell hacking henceforth