不明确的异常类型

时间:2013-01-20 16:53:13

标签: haskell types exception-handling

我将一些旧代码从Prelude.catch更改为Control.Exception.catch,并且出现了模糊的类型错误。 “没什么大不了的”,我想。然而,经过仔细检查,我不确定为什么这不起作用......

handler :: Exception e => e -> IO x

with_handler :: IO x -> IO x
with_handler act = catch act handler

在我看来,这段代码应该工作,但它显然违反了类型系统的一些主格规则。 (虽然我不确定。)

有人可以准确解释类型检查器不满意的内容吗?

1 个答案:

答案 0 :(得分:3)

编译器不知道handler使用哪种类型。它无法在运行时看到引发的异常,然后为handler选择适当的类型,它必须在编译时解析类型。

可能会给handler类型

handler :: SomeException -> IO x

这将解决歧义。