Hello, I did not understand the example you posted, as it contains functions that are not defined, but here is something you can do (this is using monadLib, but something like that should probably work with the libraries distributed with GHC). Letme know if this helps. -Iavor import Monad.StateT import Monad.Id import Random type M = StateT (StdGen,[Int]) Id randomItem :: M () randomItem = do (g,xs) <- peek let (x,g') = random g poke_ (g',mod x 5 : xs) needMoreItems :: M Bool needMoreItems = do (_,xs) <- peek return (sum xs < 50) whileM p b = do x <- p if x then b >> whileM p b else return () test = do g <- newStdGen print $ runId $ evalState (g,[]) $ do whileM needMoreItems randomItem (_,xs) <- peek return xs On 11/22/05, Yitzchak Gale <gale@sefer.org> wrote:
Hi Iavor,
Just to clarify, I wasn't suggesting that the the monad is strict in the state component, but rather that it is strict in the pair containing the result and the state.
Does this help in the "createItems" examples I sent to Udo in the previous post?
Thanks, Yitz