0
私のスナップハンドラの1つで、HTTPクライアントを使用してHTTP経由で外部リソースを呼び出していますが、これはHttpException
です。最も単純なケースでは、私はエラーをキャッチし、デバッグ中にstd outに書き込むだけです。しかし、私はタイプを並べるのに苦労している。スナップハンドラ内で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 = ...;
.... }
おかげで、 ニール