Writing a Haskell interpreter for fun and profit