git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Make untiFixedPoint work in a Monad
c4c5830Brian McKenna
src/Language/PureScript/CodeGen/JS/Optimizer.hs+5−4
@@ -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
82
82
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
85 where
85 where
86+ go a = do
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'