import Control.Monad import Control.Concurrent.MVar import Text.Printf incrementAndPrint :: MVar Integer -> IO () incrementAndPrint counter = do newCount <- modifyMVar counter (\i -> return (i + 1, i + 1)) printf "The count is %d\n" newCount putStrLn "---------------" main :: IO () main = do putStrLn "Starting up" counter <- newMVar 0 replicateM_ 10 (incrementAndPrint counter) putStrLn "Finishing up"