module Xrequest(xrequest,xrequestF, xrequestK,Cont(..)) where
--import Command(XRequest)
--import Event(XResponse)
import FRequest
import FudgetIO
import EitherUtils(Cont(..))
import NullF(F,K)
--import DialogueIO hiding (IOError)

xrequestK :: XRequest -> (XResponse -> Maybe a) -> Cont (K b c) a
xrequestK = forall a b c.
XRequest -> (XResponse -> Maybe a) -> (a -> K b c) -> K b c
forall (f :: * -> * -> *) ans b ho.
FudgetIO f =>
XRequest -> (XResponse -> Maybe ans) -> (ans -> f b ho) -> f b ho
xrequest :: (XRequest -> (XResponse -> Maybe a) -> Cont (K b c) a)
xrequestF :: XRequest -> (XResponse -> Maybe a) -> Cont (F b c) a
xrequestF = forall a b c.
XRequest -> (XResponse -> Maybe a) -> (a -> F b c) -> F b c
forall (f :: * -> * -> *) ans b ho.
FudgetIO f =>
XRequest -> (XResponse -> Maybe ans) -> (ans -> f b ho) -> f b ho
xrequest :: (XRequest -> (XResponse -> Maybe a) -> Cont (F b c) a)

xrequest :: XRequest -> (XResponse -> Maybe ans) -> (ans -> f b ho) -> f b ho
xrequest XRequest
xreq XResponse -> Maybe ans
expected = FRequest -> (FResponse -> Maybe ans) -> (ans -> f b ho) -> f b ho
forall (f :: * -> * -> *) ans b ho.
FudgetIO f =>
FRequest -> (FResponse -> Maybe ans) -> (ans -> f b ho) -> f b ho
cmdContLow (XRequest -> FRequest
XReq XRequest
xreq) FResponse -> Maybe ans
expectXResp
  where expectXResp :: FResponse -> Maybe ans
expectXResp FResponse
msg =
          case FResponse
msg of
            XResp XResponse
xr -> XResponse -> Maybe ans
expected XResponse
xr
            FResponse
_ -> Maybe ans
forall a. Maybe a
Nothing

{- old:
xrequestK = xrequest cmdContK

xrequestF = xrequest cmdContF

xrequest k cmd exp' =
    k (DoXRequest cmd)
      (\msg ->
       case msg of
         IOResponse (XResponse xr) -> exp' xr
         _ -> Nothing)

-}