-- Russian Doll principle in haskell module Main where import Control.Concurrent.MVar import Control.Monad (join) main :: IO () main = do fn <- newEmptyMVar putMVar fn $ do putStrLn "First!" swapMVar fn (putStrLn "Again!") >> return () join $ readMVar fn join $ readMVar fn join $ readMVar fn