Haskell 捕获Happstack中的异常

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

我得到了一个异常(使用了空列表中的Prelude.head),该异常使所有http请求返回502/505异常(happstack应用程序在stdout中打印“http请求失败:发送资源消失(断管)”

我的问题是:在Happstack中控制异常的最佳实践是什么?我应该使用simpleHTTP以外的东西,还是只在控制器函数上使用Control.Exception.catch

它目前看起来与速成班中的示例类似:

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

有人为此提交了修补程序,但尚未对其进行审查/合并