X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Control%2FMonad%2FST%2FLazy.hs;h=5bf12650cd46ae205074efaa9e758538c4ff8821;hb=1364d50a755a360a9d567ff3ac229649af16ac47;hp=a160cdf39f4a727e6a4fc0b39d3f840c651eccfa;hpb=1e6ad7ab1d081f69cfb09eac24f2a47536080fff;p=haskell-directory.git diff --git a/Control/Monad/ST/Lazy.hs b/Control/Monad/ST/Lazy.hs index a160cdf..5bf1265 100644 --- a/Control/Monad/ST/Lazy.hs +++ b/Control/Monad/ST/Lazy.hs @@ -9,8 +9,8 @@ -- Portability : non-portable (requires universal quantification for runST) -- -- This module presents an identical interface to "Control.Monad.ST", --- but the underlying implementation of the state thread is /lazy/ (in --- the sense that (@_|_ >> a@ is not necessarily equal to @_|_@). +-- except that the monad delays evaluation of state operations until +-- a value depending on them is required. -- ----------------------------------------------------------------------------- @@ -61,6 +61,10 @@ import Hugs.LazyST -- -- It serves to keep the internal states of different invocations of -- 'runST' separate from each other and from invocations of 'stToIO'. +-- +-- The '>>=' and '>>' operations are not strict in the state. For example, +-- +-- @'runST' (writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2@ newtype ST s a = ST (State s -> (a, State s)) data State s = S# (State# s)