Skip to content
Snippets Groups Projects
Commit c853c617 authored by Simon Marlow's avatar Simon Marlow
Browse files

[project @ 1997-12-17 11:21:44 by simonm]

Add runST.
parent 7b2f8c91
No related branches found
No related tags found
No related merge requests found
...@@ -12,6 +12,7 @@ module LazyST ( ...@@ -12,6 +12,7 @@ module LazyST (
ST, ST,
runST,
unsafeInterleaveST, unsafeInterleaveST,
-- ST is one, so you'll likely need some Monad bits -- ST is one, so you'll likely need some Monad bits
...@@ -35,6 +36,7 @@ import qualified UnsafeST ( unsafeInterleaveST ) ...@@ -35,6 +36,7 @@ import qualified UnsafeST ( unsafeInterleaveST )
import PrelBase ( Eq(..), Int, Bool, ($), ()(..) ) import PrelBase ( Eq(..), Int, Bool, ($), ()(..) )
import Monad import Monad
import Ix import Ix
import GHC
newtype ST s a = ST (STBase.State s -> (a,STBase.State s)) newtype ST s a = ST (STBase.State s -> (a,STBase.State s))
...@@ -50,6 +52,10 @@ instance Monad (ST s) where ...@@ -50,6 +52,10 @@ instance Monad (ST s) where
ST k_a = k r ST k_a = k r
in in
k_a new_s k_a new_s
-- ToDo: un-inline this, it could cause problems...
runST :: (All s => ST s a) -> a
runST st = case st of ST st -> let (r,_) = st (STBase.S# realWorld#) in r
\end{code} \end{code}
%********************************************************* %*********************************************************
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment