-module CLasH.Normalize.NormalizeTypes where
-
--- Standard modules
-import qualified Control.Monad.Trans.Writer as Writer
-import qualified Data.Monoid as Monoid
-
--- GHC API
-import qualified CoreSyn
-
--- Local imports
-import CLasH.Translator.TranslatorTypes
-
--- Wrap a writer around a TranslatorSession, to run a single transformation
--- over a single expression and track if the expression was changed.
-type TransformMonad = Writer.WriterT Monoid.Any TranslatorSession
-
--- | In what context does a core expression occur?
-data CoreContext = AppFirst -- ^ The expression is the first
- -- argument of an application (i.e.,
- -- it is applied)
- | AppSecond -- ^ The expression is the second
- -- argument of an application
- -- (i.e., something is applied to it)
- | LetBinding -- ^ The expression is bound in a
- -- (recursive or non-recursive) let
- -- expression.
- | LetBody -- ^ The expression is the body of a
- -- let expression
- | LambdaBody -- ^ The expression is the body of a
- -- lambda abstraction
- | Other -- ^ Another context
- deriving (Eq, Show)
--- | Transforms a CoreExpr and keeps track if it has changed.
-type Transform = [CoreContext] -> CoreSyn.CoreExpr -> TransformMonad CoreSyn.CoreExpr