module Main where import Text.Printf import Control.Monad.Reader import System.IO import System.Posix.IO import System.Linux.EpollM eventTypes :: [EventType] eventTypes = [inEvent, edgeTriggeredEvent, oneShotEvent] callback :: Event a -> Epoll () callback e = do let fd = eventFd e et = eventType e ds = eventDesc e liftIO $ do 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 eventTypes ds main :: IO () main = runEpollSmall_ $ do add_ eventTypes stdInput defaultDispatchLoop callback