This library is identical to ST except that the ST monad
instance is lazy. The lazy ST monad tends to be more prone to
space leaks than the strict version, so most programmers will use the
former unless laziness is explicitly required. LazyST provides
two additional operations:
lazyToStrictST :: LazyST.ST s a -> ST.ST s a
strictToLazyST :: ST.ST s a -> LazyST.ST s a
These are used to convert between lazy and strict state threads. The
semantics with respect to laziness are as you would expect: the strict
state thread passed to strictToLazyST is not performed until the
result of the lazy state thread it returns is demanded.