1 {-# LANGUAGE TemplateHaskell #-}
2 module NormalizeTypes where
6 import qualified Control.Monad.Trans.Writer as Writer
7 import qualified Control.Monad.Trans.State as State
8 import qualified Data.Monoid as Monoid
9 import qualified Data.Accessor.Template
14 import qualified UniqSupply
15 import Outputable ( Outputable, showSDoc, ppr )
21 data TransformState = TransformState {
22 tsUniqSupply_ :: UniqSupply.UniqSupply
25 $( Data.Accessor.Template.deriveAccessors ''TransformState )
27 type TransformMonad a = Writer.WriterT Monoid.Any (State.State TransformState) a
28 -- | Transforms a CoreExpr and keeps track if it has changed.
29 type Transform = CoreExpr -> TransformMonad CoreExpr