git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
provide Control.Monad.ST.pureST
6d03022Kevin Mahoney
examples/failing/Eff.pursnew file+12
@@ -0,0 +1,12 @@
1+module Main where
2+
3+import Prelude
4+import Control.Monad.Eff
5+import Control.Monad.ST
6+import Debug.Trace
7+
8+test = pureST (do
9+ ref <- newSTRef 0
10+ trace "ST"
11+ modifySTRef ref $ \n -> n + 1
12+ readSTRef ref)
examples/passing/Eff.purs+6
@@ -14,6 +14,12 @@ test2 = runPure (runST (do
14 modifySTRef ref $ \n -> n + 1
14 modifySTRef ref $ \n -> n + 1
15 readSTRef ref))
15 readSTRef ref))
16
16
17+test3 = pureST (do
18+ ref <- newSTRef 0
19+ modifySTRef ref $ \n -> n + 1
20+ readSTRef ref)
21+
17main = do
22main = do
18 test1
23 test1
19 Debug.Trace.print test2
24 Debug.Trace.print test2
25+ Debug.Trace.print test3
prelude/README.md+2
@@ -371,6 +371,8 @@
371
371
372 runST :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
372 runST :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
373
373
374+ pureST :: forall a. (forall h r. Eff (st :: ST h | r) a) -> a
375+
374 runSTArray :: forall a r. (forall h. Eff (st :: ST h | r) (STArray h a)) -> Eff r [a]
376 runSTArray :: forall a r. (forall h. Eff (st :: ST h | r) (STArray h a)) -> Eff r [a]
375
377
376 writeSTRef :: forall a h r. STRef h a -> a -> Eff (st :: ST h | r) a
378 writeSTRef :: forall a h r. STRef h a -> a -> Eff (st :: ST h | r) a
prelude/prelude.purs+2
@@ -915,3 +915,5 @@ module Control.Monad.ST where
915 \ return f;\
915 \ return f;\
916 \}" :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
916 \}" :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
917
917
918+ pureST :: forall a. (forall h r. Eff (st :: ST h | r) a) -> a
919+ pureST st = runPure (runST st)