symbolic computation in haskell