some real world haskell stuff