flite-0.1.1: Flite/CompileFrontend.hs
module Flite.CompileFrontend (frontend) where
import Flite.Syntax
import Flite.Traversals
import Flite.Matching
import Flite.Case
import Flite.Let
import Flite.Identify
import Flite.Strictify
import Flite.ConcatApp
import Flite.Inline
import Flite.Fresh
import Control.Monad
frontend :: InlineFlag -> Prog -> Prog
frontend i p = snd (runFresh (frontendM i p) "$" 0)
frontendM :: InlineFlag -> Prog -> Fresh Prog
frontendM i p =
return (identifyFuncs p)
>>= desugarCase
>>= desugarEqn
>>= inlineLinearLet
>>= inlineSimpleLet
>>= return . caseElim
>>= return . concatApps
>>= inlineTop i
>>= return . strictifyPrim