Just ty -> isStateType ty
--- | Flattens nested non-recursive lets into a single list of bindings. The
--- expression passed does not have to be a let expression, if it isn't an
--- empty list of bindings is returned.
+-- | Flattens nested lets into a single list of bindings. The expression
+-- passed does not have to be a let expression, if it isn't an empty list of
+-- bindings is returned.
flattenLets ::
CoreSyn.CoreExpr -- ^ The expression to flatten.
-> ([Binding], CoreSyn.CoreExpr) -- ^ The bindings and resulting expression.
-flattenLets (CoreSyn.Let (CoreSyn.NonRec bndr expr) res) =
- ((bndr, expr):bindings, res')
+flattenLets (CoreSyn.Let binds expr) =
+ (bindings ++ bindings', expr')
where
-- Recursively flatten the contained expression
- (bindings, res') = flattenLets res
+ (bindings', expr') =flattenLets expr
+ -- Flatten our own bindings to remove the Rec / NonRec constructors
+ bindings = CoreSyn.flattenBinds [binds]
flattenLets expr = ([], expr)
-- | Create bunch of nested non-recursive let expressions from the given