on master help sign in
Start using strict State and Writer

This brings allocation down again. So the entire path of these optimizations is 914MB => 841MB => 811MB The time reductions are more reliably around 10% now. Pretty cool! Also, it is pretty annoying that lazy-by-default is quite a bit slower and I get no benefits from the laziness in my code!

commit772952749a999acf4d3ca94cbb11eef1229c951f authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 1 Jun 2017, 20:15 (9 years ago) parent56b0e37
4 files changed+6−6
src/Elm/Compiler/Type/Extract.hs+1−1 src/Optimize/Environment.hs+2−2 src/Type/Environment.hs+1−1 src/Type/Type.hs+2−2
src/Elm/Compiler/Type/Extract.hs+1−1
@@ -6,7 +6,7 @@ module Elm.Compiler.Type.Extract
66 )
77 where
88
9−import qualified Control.Monad.Writer as Writer
9+import qualified Control.Monad.Writer.Strict as Writer
1010import qualified Data.Map as Map
1111import qualified Data.Maybe as Maybe
1212import qualified Data.Set as Set
src/Optimize/Environment.hs+2−2
@@ -13,7 +13,7 @@ module Optimize.Environment
1313 )
1414 where
1515
16−import qualified Control.Monad.State as State
16+import qualified Control.Monad.State.Strict as State
1717import Data.Monoid ((<>))
1818import qualified Data.Set as Set
1919import qualified Data.Text as Text
@@ -143,7 +143,7 @@ freshName =
143143
144144register :: Var.Global -> Optimizer ()
145145register global =
146− State.modify (registerHelp global)
146+ State.modify' (registerHelp global)
147147
148148
149149registerHelp :: Var.Global -> Env -> Env
src/Type/Environment.hs+1−1
@@ -11,7 +11,7 @@ module Type.Environment
1111 where
1212
1313import Control.Monad (foldM)
14−import qualified Control.Monad.State as State
14+import qualified Control.Monad.State.Strict as State
1515import qualified Data.List as List
1616import qualified Data.Map as Map
1717import qualified Data.Set as Set
src/Type/Type.hs+2−2
@@ -3,8 +3,8 @@
33module Type.Type where
44
55import Control.Monad (when)
6−import Control.Monad.State (StateT, liftIO)
7−import qualified Control.Monad.State as State
6+import Control.Monad.State.Strict (StateT, liftIO)
7+import qualified Control.Monad.State.Strict as State
88import qualified Data.Char as Char
99import qualified Data.Map as Map
1010import Data.Monoid ((<>))