module Main where import System.Linux.Epoll import System.Posix.IO import System.IO import Data.Maybe import Text.Printf eventTypes :: [EventType] eventTypes = [inEvent, edgeTriggeredEvent, oneShotEvent] callback :: Device -> Event a -> IO () callback d e = do let et = eventType e fd = eventFd e setFdOption fd NonBlockingRead True printf "event=%s, fd=%s\n" (show et) (show fd) (s, c) <- fdRead fd 16 printf "read %s byte(s): %s\n" (show c) s modify d eventTypes (eventDesc e) main :: IO () main = do let s = fromJust $ toSize 32 dev <- create s add dev () eventTypes stdInput defaultDispatchLoop (callback dev) dev