12 processEvent :: State -> Event -> IO State
13 processEvent state (Button True) = do
14 createProcess (proc "music-toggle" [])
16 processEvent state (Button False) = return state
18 processEvent state (Rotate dir) = do
19 if dir < 2 then createProcess (proc "volume-up" [])
20 else createProcess (proc "volume-down" [])
23 processEvent state (StatusChange status) = do
26 readState :: State -> IO State
30 next :: a -> (a -> IO a) -> IO ()
32 newstate <- func state
37 loop :: FilePath -> IO ()
39 powermate <- openDevice devname
41 state <- readState $ State { stPowerMate=powermate, stVolume=0 }
43 next state $ \call -> do
44 event <- readEventWithSkip powermate Nothing
46 Nothing -> return call
47 Just event -> processEvent call event
51 powermate <- searchForDevice