{-# LANGUAGE MultiParamTypeClasses #-} module StateMachine where import Affection import Types import Test instance StateMachine State UserData where smLoad Menu = loadMap smUpdate Menu = const $ return () smDraw Menu = drawMap smEvent _ evs = do Subsystems w m <- subsystems <$> getAffection _ <- consumeSDLEvents w =<< consumeSDLEvents m evs return () smClean _ = do ud <- getAffection let Subsystems w m = subsystems ud toClean = uuid ud mapM_ (\u -> do partUnSubscribe w u partUnSubscribe m u ) toClean putAffection ud { uuid = [] }