[Haskell] FP-style vs. OO-style AST structure