无法推断出类型

时间:2011-09-17 23:46:09

标签: haskell

我正在尝试对case语句中的类型进行模式匹配,例如:

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

编译器无法推断出我理解的e~MyException。我的问题是我需要提供给编译器的其他信息才能匹配我的异常类型。在这种特殊情况下,我知道如果存在失败,则返回的类型将是MyException。

修改

结果类型(来自Aws包)是: (事务r a,ConfigurationFetch(Info r))=&gt;      配置 - &gt; r - &gt; IO(响应(ResponseMetadata a)a)

a来自Data.Attempt,它是成功或失败。

1 个答案:

答案 0 :(得分: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类型是对的。