-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 1/26/11 21:10 , Magicloud Magiclouds wrote: > Hi, > Consider such a case: I'm making a client program. There is a > process, client and server exchange some information in a strict > order. So I do (persudo code): > exchange = do > sendHello > readMsg >>= expect hello processHelloReply > sendWhatsyourname > readMsg >>= expect name processNameReply > > And expect is something like: > expect c f (cmd, msg) = > if c == cmd then > f msg > else > fail "unexpected" > > This is OK until this situation: The server may send some special > command, for example DEBUG, DISCONNECT. This breaks the process above. > So I think I could throw the unexpected command to outer function to > handle. Something like: > main = do > connect > catch exchange $ \e -> do > case e of > UnexpectedCMD DEBUG -> -- ignore process > UnexpectedCMD DISCONNECT -> -- disconnect process > _ -> -- something really wrong > > Well, with Control.Exception, I do not know how to make this done.
It looks to me like the very example in the Control.Exception documentation will do this, with some renaming. > -- many languages call this a "control exception"; think break/next > -- etc. It's an exception used internally to modify control flow. > data ControlException = CEDebug | CEDisconnect > deriving (Show, Typeable) > > instance Exception ControlException So now you can trap your ControlException above, or anything else is presumably a true exception. - -- brandon s. allbery [linux,solaris,freebsd,perl] [email protected] system administrator [openafs,heimdal,too many hats] [email protected] electrical and computer engineering, carnegie mellon university KF8NH -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk1A3RgACgkQIn7hlCsL25XRMgCeNEImC8VWPiM0fHB5Bu2ooFc8 nz8An0TwHXXUxJl7bhndSVf2vxWbXpGf =HIqR -----END PGP SIGNATURE----- _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
