Haskell-oefening

MVar's met STM

Meld je aan om je oplossing in te dienen en feedback te krijgen.

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