2011-09-17 11 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になります。

EDIT:

(AWSパッケージから)結果のタイプがある: (トランザクションRA、ConfigurationFetch(インフォR))=> 設定 - > R - > IO(レスポンス(たResponseMetaData A )a)

aは、Data.Attempt(成功または失敗のいずれか)です。

+1

'result'の種類は何ですか?明示的に記述しなかった場合は、ghciで ':t action'を実行して見つけ出すことができます。 – hugomg

答えて

3

あなたは(最近のGHCのではデフォルトである)拡張可能な例外を使用していると仮定すると、あなたの結果は、おそらくあなたは、あなた自身の例外タイプにSomeExceptionを変換する必要が

data Result = Success MySuccess | Failure SomeException 

のようなものです。これは、関数toException :: Exception e => SomeException -> Maybe eで行われます。そして、あなたはこのように対処します:これは私があなたのResultタイプに関する権利だと仮定している。もちろん、

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

関連する問題