在我的一个快照处理程序中,我使用HTTP客户端调用外部资源,它可以抛出一个HttpException。在最简单的情况下,我只想在调试时捕获错误并写入std;但是,我很难将类型排列起来。
assignCategories' :: String -> [String] -> Handler App (AuthManager App) String
assignCategories' l_id cats = do
let baseAttribs = M.fromList [("id",l_id)]
let saveQuery = WMSaveObject {baseAttributesSO= baseAttribs ,relatedSO=relatedObjects}
-- this is the function that can throw an HTTPException
-- runWMSave :: WMQueryObj -> Handler App (AuthManager App) String
saveresponse <- try $ H.runWMSave saveQuery
return $ case saveresponse of
Left e -> show (e :: HttpException)
Right r -> r我玩过这些类型,但通常都会出现以下错误.是否有在处理程序中调用HTTP并捕获异常的最佳实践?
我在用Control.Monad.Catch。我试着使用Control.Exception的try,但在排列类型时遇到了更多的困难。
No instance for (Control.Monad.Catch.MonadCatch
(Handler App (AuthManager App)))
arising from a use of ‘try’
In the expression: try
In a stmt of a 'do' block:
saveresponse <- try $ H.runWMSave saveQuery
In the expression:
do { liftIO $ putStrLn l_id;
let baseAttribs = M.fromList ...;
let relatedObjects = concatMap makeRelatedRow cats;
let saveQuery = ...;
.... }谢谢,尼尔
发布于 2016-05-03 04:11:47
问题解决了,我使用了MonadCatchIO变压器的try,这就奏效了。
https://stackoverflow.com/questions/36993372
复制相似问题