module Driver.Simplified ( Transition , DriverState , applyTransition , initDriverState , takeState ) where import When import Log (DriverState, initDriverState, takeState) import qualified Log as D import Data.Time.Clock import Data.List -------------- type Transition st = st -> Maybe st ----------------- applyTransition :: (Eq a, Ord a, Show a, Show b) => LogState -> DriverState st a -> [(st -> Bool, a, st -> When)] -> (UTCTime -> b -> IO ()) -> (a -> Transition st) -> a -> IO () applyTransition logState dst triggers handleResponse transition a = D.applyTransition logState dst handleResponse tr a where tr e st | Just (res, new_st) <- transition e st = (cancelled res, triggered res, f2 e res, new_st) | otherwise = ([], [], f1 e, st)