Tree transducer based program transformations for Haskell