minesweeper-0.8.8: Driver/Simplified.hs
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)