playing around with Haskell free monads