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.