Simple StateT use
From HaskellWiki
(Difference between revisions)
m (Added type signatures) |
m |
||
| Line 10: | Line 10: | ||
main = runStateT code [1..] >> return () | main = runStateT code [1..] >> return () | ||
-- | -- | ||
| - | -- layer | + | -- layer an infinite list of uniques over the IO monad |
-- | -- | ||
Revision as of 21:53, 27 February 2007
A small example showing how to combine a State monad (in this case a unique supply), with the IO monad, via a monad transformer.
No need to resort to nasty mutable variables or globals!
import Control.Monad.State main :: IO () main = runStateT code [1..] >> return () -- -- layer an infinite list of uniques over the IO monad -- code :: StateT [Integer] IO () code = do x <- pop io $ print x y <- pop io $ print y return () -- -- pop the next unique off the stack -- pop :: StateT [Integer] IO Integer pop = do (x:xs) <- get put xs return x io :: IO a -> StateT [Integer] IO a io = liftIO
