0
在我的一個捕捉處理程序中,我使用http-client通過HTTP調用外部資源,這會引發HttpException
。在最簡單的情況下,我只想捕捉錯誤並在調試時寫入標準輸出;不過,我正在經歷一段艱難的時期,纔將這些類型排列起來。在捕捉處理程序中捕獲HTTPException
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 = ...;
.... }
感謝, 尼爾