module DialogueSpIO where import SP import DoRequest import DialogueIO(Response,Request(..)) import Queue dialogueSpIO :: SP Response Request -> IO () {- --Simple implementation: dialogueSpIO sp = case sp of PutSP req sp' -> do resp <- doRequest req dialogueSpIO (startupSP [resp] sp') GetSP xsp -> do resp <- doRequest GetAsyncInput dialogueSpIO (xsp resp) NullSP -> return () -} -- More efficient queueing of responses dialogueSpIO sp = doIO sp empty where doIO sp respq = case sp of PutSP req sp' -> do resp <- doRequest req doIO sp' (enter respq resp) GetSP xsp -> case qremove respq of Just (resp,respq') -> doIO (xsp resp) respq' Nothing -> do resp <- doRequest GetAsyncInput doIO (xsp resp) respq NullSP -> return ()