我遇到了一个异常(在空列表上使用 Prelude.head),之后所有的 http 请求都返回了 502/505 异常(并且 happstack 应用程序打印“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