Re: [Haskell-cafe] Problem about exception

It seems that the problem is to follow a protocol, reporting protocol errors (unexpected responses) and permitting recovery if the `supervisor' decided that the error can be fixed by re-reading from the server. This problem -- specifically, communicating with a supervisor `out-of-band' and recovery -- is a good use case for delimited continuations. The following code implements the scenario in Magicloud's message. http://okmij.org/ftp/continuations/CCmonad/ProtocolRecovery.hs Actually, the code is interactive, letting the use play a good or a bad server. One can see for themselves the effect of expected or unexpected responses. The title comments show the examples of good or bad interactions. Here is a sample transcript of several interactions. ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 2 Client Dis-connected ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 3 Exception: Err_bad_resp Res_debug DEBUG Enter response, as a number 1..4 3 Exception: Err_bad_resp Res_debug DEBUG Enter response, as a number 1..4 2 Client Dis-connected *ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 4 Exception: Err_bad_resp Res_disconnect Aborting Client Dis-connected *ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 1 Exception: Err_bad_resp Res_hello Really bad response! Client Dis-connected

Thank you. I am looking into it.
On Thu, Jan 27, 2011 at 5:05 PM,
It seems that the problem is to follow a protocol, reporting protocol errors (unexpected responses) and permitting recovery if the `supervisor' decided that the error can be fixed by re-reading from the server.
This problem -- specifically, communicating with a supervisor `out-of-band' and recovery -- is a good use case for delimited continuations.
The following code implements the scenario in Magicloud's message. http://okmij.org/ftp/continuations/CCmonad/ProtocolRecovery.hs
Actually, the code is interactive, letting the use play a good or a bad server. One can see for themselves the effect of expected or unexpected responses. The title comments show the examples of good or bad interactions. Here is a sample transcript of several interactions.
ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 2 Client Dis-connected
ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 3 Exception: Err_bad_resp Res_debug DEBUG Enter response, as a number 1..4 3 Exception: Err_bad_resp Res_debug DEBUG Enter response, as a number 1..4 2 Client Dis-connected
*ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 4 Exception: Err_bad_resp Res_disconnect Aborting Client Dis-connected
*ProtocolRecovery> main Client Connected sending: Req_hello Enter response, as a number 1..4 1 sending: Req_who_are_you Enter response, as a number 1..4 1 Exception: Err_bad_resp Res_hello Really bad response! Client Dis-connected
-- 竹密岂妨流水过 山高哪阻野云飞
participants (2)
-
Magicloud Magiclouds
-
oleg@okmij.org