@@ -1,5 +1,5 @@
2−module Transform.SortDefinitions (sortDefs, boundVars) where
2+module Transform.SortDefinitions (sortDefs, boundVars, flattenLets) where
4import Control.Monad.State
4import Control.Monad.State
5import Control.Applicative ((<$>))
5import Control.Applicative ((<$>))
@@ -30,6 +30,12 @@ bound boundVars = modify (\freeVars -> Set.difference freeVars boundVars)
30sortDefs :: LExpr t v -> LExpr t v
30sortDefs :: LExpr t v -> LExpr t v
31sortDefs expr = evalState (reorder expr) Set.empty
31sortDefs expr = evalState (reorder expr) Set.empty
33+flattenLets defs lexpr@(L _ _ expr) =
35+ Let ds body -> flattenLets (defs ++ ds) body
33reorder :: LExpr t v -> State (Set.Set String) (LExpr t v)
39reorder :: LExpr t v -> State (Set.Set String) (LExpr t v)
34reorder lexpr@(L a b expr) =
40reorder lexpr@(L a b expr) =
35 L a b `liftM`
41 L a b `liftM`