这是基于我之前的问题的建议:
go bs = do
r <- try $ parseRequest reader bs secure
case r of
Left ex -> do
putStrLn "got exception"
exceptionHandler writer ex
go empty
Right (request, bs') -> do
sendResponse writer =<< app request
go bs'
当没有异常时,Right 部分运行没有问题。但是,当抛出异常时,异常会一直冒泡到顶部并且 Left 不会运行。它似乎并不重要,它是一种什么样的例外。
以下是它应该捕获的异常(尽管它也不会捕获error
):
data ParseError
= Unexpected
| MalformedRequestLine ByteString
| MalformedHeader ByteString
| MissingHeader ByteString Headers
| UnknownSIPVersion ByteString
deriving (Typeable, Show, Eq)
instance Exception ParseError
这是异常处理程序的类型:
exceptionHandler :: (ByteString -> IO ())
-> ParseError
-> IO ()
这也是 ghc 的 7.4.1 版本。
任何想法为什么?