我正在尝试对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,它是成功或失败。
答案 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
类型是对的。