@@ -61,7 +61,7 @@ optimize js = do
6161optimize' :: (Monad m, MonadReader (Options mode) m) => JS -> m JS
6262optimize' js = do
6363 opts <- ask
64− return $ untilFixedPoint (applyAll
64+ untilFixedPoint (return . applyAll
6565 [ collapseNestedBlocks
6666 , collapseNestedIfs
6767 , tco opts
@@ -80,8 +80,9 @@ optimize' js = do
8080 , inlineCommonOperators
8181 , inlineAppliedArrComposition ]) js
8282
83−untilFixedPoint :: (Eq a) => (a -> a) -> a -> a
83+untilFixedPoint :: (Monad m, Eq a) => (a -> m a) -> a -> m a
8484untilFixedPoint f = go
8585 where
86− go a = let a' = f a in
87− if a' == a then a' else go a'
86+ go a = do
87+ a' <- f a
88+ if a' == a then return a' else go a'