packages feed

minesweeper-0.8.8: Log.hs

module Log 
    ( LogState
    , writeLog
    , stdOutLog
    , fileLog
    , noLog
    ) where

import Control.Concurrent.MVar
import Data.Time.Clock
import Data.Time.Format()

data LogState 
    = NoLog
    | FileLog (MVar FilePath)
    | StdOutLog

----------------------------------

noLog = NoLog
stdOutLog = StdOutLog
fileLog f = do
    writeFile f ""
    fmap FileLog $ newMVar f

writeLog :: LogState -> [String] -> IO ()
writeLog _ []
    = return ()
writeLog NoLog _ 
    = return ()
writeLog (FileLog m) s 
    = modifyMVar_ m $ \fn -> do
        time <- getCurrentTime
        appendFile fn $ unlines s
--        appendFile fn $ unlines $ ("-----  " ++ show time ++ "  -----"): s
        return fn
writeLog StdOutLog s = do 
    time <- getCurrentTime
    putStrLn $ unlines s
--        appendFile fn $ unlines $ ("-----  " ++ show time ++ "  -----"): s