首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获Happstack中的异常

捕获Happstack中的异常
EN

Stack Overflow用户
提问于 2011-10-12 04:56:43
回答 1查看 333关注 0票数 2

我得到了一个异常(在一个空列表上使用了Prelude.head ),这使得之后的所有http-request都返回一个502/505异常( happstack应用程序在标准输出中打印"HTTP request failed with: send resource with (Broken )“)。

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-12 05:56:52

你说的“服务器宕机”是什么意思?

如果您正在处理一个请求并执行head [],那么这应该只会杀死正在处理该特定请求的线程。服务器本身应该继续运行并处理其他请求。

如果你已经找到了杀死整个服务器的方法,那就是bug和bug报告/测试案例。

如果只终止当前线程,并且您希望捕获该异常,那么我认为您需要使用MonadPeelIO,

http://hackage.haskell.org/packages/archive/monad-peel/0.1/doc/html/Control-Monad-IO-Peel.html

有人已经为此提交了补丁,但它还没有被审查/合并。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7732400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档