{-# LANGUAGE TemplateHaskell #-} -- | This module wraps the rewrite stage, performing some rewrites on the ferry core AST. module Database.Ferry.Compiler.Stages.RewriteStage (rewritePhase) where import Database.Ferry.Compiler.Types import Database.Ferry.Compiler.ExecuteStep import Database.Ferry.TypedCore.Render.Dot import Database.Ferry.Common.Render.Dot import Database.Ferry.TypedCore.Data.TypedCore import Database.Ferry.TypedCore.Rewrite.OpRewrite import Database.Ferry.Impossible rewritePhase :: CoreExpr -> PhaseResult CoreExpr rewritePhase e = executeStep inferStage e inferStage :: CompilationStep CoreExpr CoreExpr inferStage = CompilationStep "Rewrite" OpRewrite step artefacts where step :: CoreExpr -> PhaseResult CoreExpr step e = return $ rewrite e artefacts = [(DotRewrite ,"dot", \s -> return $ makeDot s)] makeDot :: CoreExpr -> String makeDot c = case runDot $ toDot c of Right s -> s Left _ -> $impossible