@@ -26,6 +26,7 @@ import Data.List (nub, intersect)
26import Data.Maybe (isJust, mapMaybe)
26import Data.Maybe (isJust, mapMaybe)
27import Data.Monoid ((<>))
27import Data.Monoid ((<>))
28import Control.Applicative ((<$>), (<*>), pure)
28import Control.Applicative ((<$>), (<*>), pure)
29+import Control.Monad ((<=<))
30import qualified Data.Set as S
31import qualified Data.Set as S
@@ -48,18 +49,14 @@ collapseBindingGroupsModule :: [Module] -> [Module]
48collapseBindingGroupsModule = map $ \(Module name ds exps) -> Module name (collapseBindingGroups ds) exps
49collapseBindingGroupsModule = map $ \(Module name ds exps) -> Module name (collapseBindingGroups ds) exps
50createBindingGroups :: ModuleName -> [Declaration] -> Either ErrorStack [Declaration]
51createBindingGroups :: ModuleName -> [Declaration] -> Either ErrorStack [Declaration]
51−createBindingGroups moduleName decls = do
52+createBindingGroups moduleName = mapM f <=< handleDecls
52− (Let result _) <- createBindingGroupsForValue (Let decls (StringLiteral (error "Placeholder string literal was used in createBindingGroups.")))
55+ (f, _, _) = everywhereOnValuesTopDownM return handleExprs return
56− createBindingGroupsForValue :: Expr -> Either ErrorStack Expr
57+ handleExprs :: Expr -> Either ErrorStack Expr
57− createBindingGroupsForValue =
58− let (_, f, _) = everywhereOnValuesTopDownM return go return
61− go (Let ds val) = flip Let val <$> handleDecls ds
58+ handleExprs (Let ds val) = flip Let val <$> handleDecls ds
62− go other = return other
59+ handleExprs other = return other
65 -- Replace all sets of mutually-recursive declarations with binding groups
62 -- Replace all sets of mutually-recursive declarations with binding groups