Personal tools

Simple StateT use

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m
(+cat)
Line 35: Line 35:
   
 
[[Category:Code]]
 
[[Category:Code]]
  +
[[Category:Monad]]

Revision as of 00:51, 28 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