git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Make untiFixedPoint work in a Monad
commitc4c5830da87bd94dcf873533e7ebc90294f9b456 authorBrian McKenna <brian@brianmckenna.org> dateMon 20 Apr 2015, 22:59 (12 years ago) parent0258e1d
1 file changed+5−4
src/Language/PureScript/CodeGen/JS/Optimizer.hs+5−4
src/Language/PureScript/CodeGen/JS/Optimizer.hs+5−4
@@ -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'