2016-05-02 4 views
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 = ...; 
      .... } 

おかげで、 ニール

答えて

0

問題が解決し、私はMonadCatchIO-変圧器からtryを使用し、それが働きました。

関連する問題