我有一些看起来像这样的代码:
retryOnTimeout :: IO a -> IO a
retryOnTimeout action = catch action $ \ResponseTimeout ->
do putStrLn "Timed out. Trying again."
threadDelay 5000000
action
问题是还有很多其他的 HttpException 构造函数,我通常会继续尝试,不管错误到底是什么。现在如果我替换ResponseTimeout
为_
then 我会得到一个编译错误,因为它不能推断出异常的类型。
我也不想为异常处理程序提供类型签名。
我知道这并没有太多重复,但是添加一个案例_
感觉不对,因为它就像是在说:如果异常是 ResponseTimeout 则执行 x,但如果异常是其他任何事情,则执行完全相同的操作。有没有一种使用通配符的简洁方法,但仍然让编译器知道它是哪种类型?