@@ -1,22 +1,41 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Optimize.Environment
3module Optimize.Environment
4− ( Optimizer, run
4+ ( Optimizer, run
6− , getVariantDict
6+ , getVariantDict
8− , getTailCall, setTailCall
8+ , getTailCall, setTailCall
9− , freshName
9+ , freshName
12import qualified Control.Monad.State as State
13import qualified Control.Monad.State as State
13−import qualified Data.Text as Text
14+import Data.Monoid ((<>))
14import Data.Text (Text)
15import Data.Text (Text)
16+import qualified Data.Text as Text
16import qualified AST.Module.Name as ModuleName
18import qualified AST.Module.Name as ModuleName
17import qualified Optimize.DecisionTree as DT
19import qualified Optimize.DecisionTree as DT
28+ { _hasTailCall :: Bool
30+ , _variantDict :: DT.VariantDict
31+ , _home :: ModuleName.Canonical
20type Optimizer a =
39type Optimizer a =
21 State.State Env a
40 State.State Env a
@@ -26,12 +45,8 @@ run variantDict home optimizer =
26 State.evalState optimizer (Env False 0 variantDict home)
45 State.evalState optimizer (Env False 0 variantDict home)
30− { _hasTailCall :: Bool
49+-- HELPERS
32− , _variantDict :: DT.VariantDict
33− , _home :: ModuleName.Canonical
37getVariantDict :: Optimizer DT.VariantDict
52getVariantDict :: Optimizer DT.VariantDict
@@ -59,5 +74,5 @@ freshName :: Optimizer Text
59freshName =
74freshName =
60 do (Env htc uid vd home) <- State.get
75 do (Env htc uid vd home) <- State.get
61 State.put (Env htc (uid + 1) vd home)
76 State.put (Env htc (uid + 1) vd home)
62− return (Text.append "_p" (Text.pack (show uid)))
77+ return ("_p" <> Text.pack (show uid))