@@ -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`