2011-09-17 167 views
0

我試圖模式匹配在一個case語句這樣的類型如下:無法推斷類型

result <- action 
case result of 
    Success _ -> do something 
    Failure e -> case e of 
       MyException myField -> do take another action 
       _ -> ... 

編譯器不能推斷E〜MyException我明白了。我的問題是我需要提供哪些其他信息才能使編譯器匹配我的異常類型。在這種特殊情況下,我知道如果出現故障,返回的類型將是MyException。

編輯:

結果的類型(從AWS包)爲: (事務RA,ConfigurationFetch(信息R))=> 配置 - >的R - > IO(響應(ResponseMetadata一個)a)

a來自Data.Attempt,它可以是成功或失敗。

+1

'result'的類型是什麼?如果你沒有明確寫出,你可以在ghci上執行':t action'來找出答案。 – hugomg

回答

3

假設你正在使用可擴展的異常(這是在最近GHC的默認設置),你的結果是大概就像

data Result = Success MySuccess | Failure SomeException 

您需要將SomeException轉化爲自己的異常類型。這是通過功能toException :: Exception e => SomeException -> Maybe e完成的。然後,你會處理這個問題,如:

Failure e -> case toException e of 
       Just (MyException myField) -> do take another action 
       _ -> ... 

當然,這是假設我是對你的Result類型。