a lisp implementation, in Haskell