on master help sign in
Add a way to flatten lets that have become nested
commit621a9c2d2ec4c930ac0871c783a43470a74cefb0 authorEvan Czaplicki <info@elm-lang.org> dateTue 16 Jul 2013, 21:40 (13 years ago) parent0cfae2e
1 file changed+7−1
compiler/Transform/SortDefinitions.hs+7−1
compiler/Transform/SortDefinitions.hs+7−1
@@ -1,5 +1,5 @@
11
2−module Transform.SortDefinitions (sortDefs, boundVars) where
2+module Transform.SortDefinitions (sortDefs, boundVars, flattenLets) where
33
44import Control.Monad.State
55import Control.Applicative ((<$>))
@@ -30,6 +30,12 @@ bound boundVars = modify (\freeVars -> Set.difference freeVars boundVars)
3030sortDefs :: LExpr t v -> LExpr t v
3131sortDefs expr = evalState (reorder expr) Set.empty
3232
33+flattenLets defs lexpr@(L _ _ expr) =
34+ case expr of
35+ Let ds body -> flattenLets (defs ++ ds) body
36+ _ -> (defs, lexpr)
37+
38+
3339reorder :: LExpr t v -> State (Set.Set String) (LExpr t v)
3440reorder lexpr@(L a b expr) =
3541 L a b `liftM`