Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
[matthijs/master-project/cλash.git] / NormalizeTypes.hs
1 {-# LANGUAGE TemplateHaskell #-}
2 module NormalizeTypes where
3
4
5 -- Standard modules
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
10 import Debug.Trace
11
12 -- GHC API
13 import CoreSyn
14 import qualified UniqSupply
15 import Outputable ( Outputable, showSDoc, ppr )
16
17 -- Local imports
18 import CoreShow
19 import Pretty
20
21 data TransformState = TransformState {
22   tsUniqSupply_ :: UniqSupply.UniqSupply
23 }
24
25 $( Data.Accessor.Template.deriveAccessors ''TransformState )
26
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