{-# LANGUAGE MultiWayIf #-} module TORCS.Connect.Util where import Data.IORef import FRP.Yampa (DTime) import Data.Time.Clock import Control.Concurrent -- | A small wrapper to keep track of how long each lap took countLaps :: ([Double],Double) -> [Double] countLaps (lapTs,lastT) = if | lastT == 0 -> [] | lastT>0 && (length lapTs == 0 || lastT /= head lapTs) -> lastT : lapTs | otherwise -> lapTs timediff :: IORef UTCTime -> UTCTime -> IO DTime timediff ref cur = do old <- readIORef ref writeIORef ref cur return $ realToFrac $ diffUTCTime cur old mySwapMVar :: MVar a -> a -> IO Bool mySwapMVar m v = do tryTakeMVar m tryPutMVar m v