import Control.Concurrent import Control.Monad -- ----------------------------------------------------------------------------- -- <> -- <> -- < IO () logger (Logger m) = loop where loop = do cmd <- takeMVar m case cmd of Message msg -> do putStrLn msg loop Stop s -> do putStrLn "logger: stop" putMVar s () -- >> -- < String -> IO () logMessage (Logger m) s = putMVar m (Message s) -- >> -- < IO () logStop (Logger m) = do s <- newEmptyMVar putMVar m (Stop s) takeMVar s -- >> -- <
>