让我们做出以下假设:
我如何找出该例外的类型?
最小例子:
main = error "foo"
(这里当然是ErrorCall
,但您无法从错误消息中得知。)
答案 0 :(得分:17)
是。假设您使用新的例外API,所有Exception
类型必须是Typeable
的实例。
import Control.Exception
import Data.Typeable
import Prelude hiding (catch)
realMain = error "example"
main = realMain `catch` h where
h (SomeException e) = do
putStrLn $ "Caught exception of type " ++ show (typeOf e)
putStrLn $ show e
结果:
Caught exception of type GHC.Exception.ErrorCall example