Haskell exercise

MVar's met STM

Sign in to hand in your solution and get feedback.

import Control.Concurrent.STM (STM, TVar, newTVar, readTVar, writeTVar, retry, atomically) import Control.Concurrent (threadDelay, forkIO) import Prelude hiding (read) newtype STMMVAR a = STMMVAR (TVar (Maybe a)) newEmptySTMMVAR :: STM (STMMVAR a) newEmptySTMMVAR = undefined takeSTMMVAR :: STMMVAR a -> STM a takeSTMMVAR (STMMVAR t) = undefined putSTMMVAR :: STMMVAR a -> a -> STM () putSTMMVAR (STMMVAR t) a = undefined write :: STMMVAR String -> STMMVAR String -> IO () write ta tb = do threadDelay 1000000 atomically $ do putSTMMVAR ta "Hello" putSTMMVAR tb "World" return () read :: STMMVAR String -> STMMVAR String -> IO (String, String) read ta tb = atomically $ do b <- takeSTMMVAR tb a <- takeSTMMVAR ta return (a,b) main :: IO () main = do ta <- atomically newEmptySTMMVAR tb <- atomically newEmptySTMMVAR _ <- forkIO $ write ta tb x <- read ta tb putStrLn $ show x