on fa9bfb9 help sign in
elk/src/Optimize/Environment.hs
50 lines 951 B history raw
1module Optimize.Environment
2 ( Optimizer, run
3 , Env
4 , getVariantDict
5 , getTailCall, setTailCall
6 , freshName
7 ) where
9import qualified Control.Monad.State as State
11import qualified Optimize.Patterns.DecisionTree as DT
14type Optimizer a =
15 State.State Env a
18run :: DT.VariantDict -> Optimizer a -> a
19run variantDict optimizer =
20 State.evalState optimizer (Env False 0 variantDict)
23data Env = Env
24 { _hasTailCall :: Bool
25 , _uid :: Int
26 , _variantDict :: DT.VariantDict
27 }
30getVariantDict :: Optimizer DT.VariantDict
31getVariantDict =
32 State.gets _variantDict
35getTailCall :: Optimizer Bool
36getTailCall =
37 State.gets _hasTailCall
40setTailCall :: Bool -> Optimizer ()
41setTailCall bool =
42 do env <- State.get
43 State.put (env { _hasTailCall = bool })
46freshName :: Optimizer String
47freshName =
48 do (Env htc uid vd) <- State.get
49 State.put (Env htc (uid + 1) vd)
50 return ("_p" ++ show uid)