Merge pull request #741 from KMahoney/pure-run-st
provide Control.Monad.ST.pureST
commit4ae696598ee1477283b51c6601b66cdbbc2f8713
authorPhil Freeman <paf31@cantab.net>
dateSun 30 Nov 2014, 12:27 (12 years ago)
parent509d5c36d03022
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
1414 modifySTRef ref $ \n -> n + 1
1515 readSTRef ref))
1616
17+test3 = pureST (do
18+ ref <- newSTRef 0
19+ modifySTRef ref $ \n -> n + 1
20+ readSTRef ref)
21+
1722main = do
1823 test1
1924 Debug.Trace.print test2
25+ Debug.Trace.print test3
prelude/README.md+2
@@ -371,6 +371,8 @@
371371
372372 runST :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
373373
374+ pureST :: forall a. (forall h r. Eff (st :: ST h | r) a) -> a
375+
374376 runSTArray :: forall a r. (forall h. Eff (st :: ST h | r) (STArray h a)) -> Eff r [a]
375377
376378 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
915915 \ return f;\
916916 \}" :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a
917917
918+ pureST :: forall a. (forall h r. Eff (st :: ST h | r) a) -> a
919+ pureST st = runPure (runST st)