git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Collatz example, fix an optimizer bug due to inlining a converted STRef.
cd4aadcPhil Freeman
examples/passing/Collatz.pursnew file+18
@@ -0,0 +1,18 @@
1+module Main where
2+
3+import Prelude
4+import Eff
5+import ST
6+
7+collatz :: Number -> Number
8+collatz n = runPure (runST (do
9+ r <- newSTRef n
10+ count <- newSTRef 0
11+ untilE $ do
12+ modifySTRef count $ (+) 1
13+ m <- readSTRef r
14+ writeSTRef r $ if m % 2 == 0 then m / 2 else 3 * m + 1
15+ return $ m == 1
16+ readSTRef count))
17+
18+main = Trace.print $ collatz 1
src/Language/PureScript/CodeGen/Optimize.hs+1
@@ -96,6 +96,7 @@ isReassigned var1 = everything (||) (mkQ False check)
96 check :: JS -> Bool
96 check :: JS -> Bool
97 check (JSFunction _ args _) | var1 `elem` args = True
97 check (JSFunction _ args _) | var1 `elem` args = True
98 check (JSVariableIntroduction arg _) | var1 == arg = True
98 check (JSVariableIntroduction arg _) | var1 == arg = True
99+ check (JSAssignment (JSVar arg) _) | var1 == arg = True
99 check _ = False
100 check _ = False
100
101
101isRebound :: (Data d) => JS -> d -> Bool
102isRebound :: (Data d) => JS -> d -> Bool