Haskell 捕获Happstack中的异常
我得到了一个异常(使用了空列表中的Prelude.head),该异常使所有http请求返回502/505异常(happstack应用程序在stdout中打印“http请求失败:发送资源消失(断管)” 我的问题是:在Happstack中控制异常的最佳实践是什么?我应该使用simpleHTTP以外的东西,还是只在控制器函数上使用Control.Exception.catch 它目前看起来与速成班中的示例类似:Haskell 捕获Happstack中的异常,haskell,exception-handling,happstack,Haskell,Exception Handling,Happstack,我得到了一个异常(使用了空列表中的Prelude.head),该异常使所有http请求返回502/505异常(happstack应用程序在stdout中打印“http请求失败:发送资源消失(断管)” 我的问题是:在Happstack中控制异常的最佳实践是什么?我应该使用simpleHTTP以外的东西,还是只在控制器函数上使用Control.Exception.catch 它目前看起来与速成班中的示例类似: main :: IO () main = do hSetEncoding stdout
main :: IO ()
main = do
hSetEncoding stdout utf8
bracket (startSystemState (Proxy :: Proxy AppState)) createCheckpointAndShutdown $
\_control ->
simpleHTTP nullConf { port = 1729 } $ do
_ <- liftIO today
decodeBody policy
controller
where
createCheckpointAndShutdown control = do
createCheckpoint control
shutdownSystem control
main::IO()
main=do
HSE编码标准输出utf8
括号(startSystemState(Proxy::Proxy AppState))createCheckpointAndShutdown$
\_控制->
simplehttpnullconf{port=1729}$do
_你说的“服务器坏了”是什么意思
如果您正在处理一个请求并且执行了head[]
,那么这只会终止处理该特定请求的线程。服务器本身应继续运行和处理其他请求
如果您已经找到了杀死整个服务器的方法,那么这就是一个bug,我们将非常感谢bug报告/测试用例
如果只有当前线程被终止,并且您希望捕获该异常,那么我认为您需要使用MonadPeelIO
有人为此提交了修补程序,但尚未对其进行审查/合并