module XCall(doXCall,doSCall,XCallState,initXCall,getAsyncInput, otCatch,catchIo,rfail,ok)where import Control.Applicative import System.IO.Error(catchIOError) import P_IO_data import DoXCommand import DoXRequest import AsyncInput(XCallState,initXCall,getAsyncInput',doSelect,doSocketRequest) doSCall = doXCall doXCall iostate req = --print req >> case req of XRequest r -> otCatch (XResponse <$> doXRequest r) XCommand c -> otCatch (Success <$ doXCommand c) GetAsyncInput -> getAsyncInput iostate SocketRequest r -> otCatch $ doSocketRequest iostate r Select dl -> otCatch $ doSelect iostate dl _ -> fail $ "Not implemented yet: "++show req getAsyncInput state = otCatch $ getAsyncInput' state otCatch io = catchIo OtherError io catchIo e io = catchIOError io (rfail . e . show) ok :: IO Response ok = return Success rfail = return . Failure