@@ -61,7 +61,7 @@ optimize js = do
61optimize' :: (Monad m, MonadReader (Options mode) m) => JS -> m JS
61optimize' :: (Monad m, MonadReader (Options mode) m) => JS -> m JS
62optimize' js = do
62optimize' js = do
63 opts <- ask
63 opts <- ask
64− return $ untilFixedPoint (applyAll
64+ untilFixedPoint (return . applyAll
65 [ collapseNestedBlocks
65 [ collapseNestedBlocks
66 , collapseNestedIfs
66 , collapseNestedIfs
67 , tco opts
67 , tco opts
@@ -80,8 +80,9 @@ optimize' js = do
80 , inlineCommonOperators
80 , inlineCommonOperators
81 , inlineAppliedArrComposition ]) js
81 , inlineAppliedArrComposition ]) js
83−untilFixedPoint :: (Eq a) => (a -> a) -> a -> a
83+untilFixedPoint :: (Monad m, Eq a) => (a -> m a) -> a -> m a
84untilFixedPoint f = go
84untilFixedPoint f = go
86− go a = let a' = f a in
87+ a' <- f a
87− if a' == a then a' else go a'
88+ if a' == a then return a' else go a'