Logging in Threads

Log in om je oplossingen te testen.
import Control.Concurrent (MVar, newEmptyMVar, putMVar, takeMVar, forkIO) data Logger = Logger (MVar LogCommand) data LogCommand = Message String | Stop (MVar ()) -- Create a Logger mkLogger :: IO Logger mkLogger = do m <- newEmptyMVar let l = Logger m _ <- forkIO (runLogger l) return l -- Given a logger, read the logcommand and execute it. -- Message => print the message and wait for the next command -- Stop => print "logger: stop" runLogger :: Logger -> IO () runLogger (Logger m) = undefined -- Send a `Message` command to the logger. logMessage :: Logger -> String -> IO () logMessage (Logger m) s = putMVar m (Message s) -- Send a `Stop` command to the logger. logStop :: Logger -> IO () logStop (Logger m) = undefined -- Test, should print: -- hello -- bye -- logger: stop main :: IO () main = do l <- mkLogger logMessage l "hello" logMessage l "bye" logStop l
Je kunt zo vaak indienen als je wenst. Er wordt enkel rekening gehouden met je laatst ingediende oplossing.
Log in om je oplossingen te testen.