没有解析异常

时间:2012-01-16 08:52:17

标签: haskell

我正在尝试缓解由read函数引起的异常:

run :: CurrentData -> IO ()
run current = do
{
    x <- (getCommandFromUser) `E.catch` handler;
    updated <- executeCommand x current;
    run updated;    
} where handler :: E.IOException -> IO Command
    handler e = do putStrLn "wrong command format" >> return (DoNothing);

在此代码函数中,getCommandfrom用户从用户获取一些字符串,然后尝试使用“read”函数从该字符串中读取一些数据

如果读取失败,则会抛出异常:

*** Exception : prelude.read : no parse

和程序退出... 我无法捕捉到这个异常 - 这个异常的类型是什么???

我还尝试了E.SomeException而不是E.IOException ...

E来自导入Control.Exception As E

1 个答案:

答案 0 :(得分:1)

“这个例外的类型是什么?”类型为ErrorCall,也可从Control.Exception获取。 ErrorCall是调用error函数时抛出的内容。 只需更改handler的类型即可。让事情发挥作用的最后手段是抓住E.SomeException,但这几乎总是错误的。