如何使用haskell Control。返回IO的异常句柄(可能是a)

时间:2012-02-14 05:18:04

标签: haskell

我正在阅读真实世界的第9章。 有一个mayIO函数将IO函数结果包装到Maybe:

    maybeIO :: IO a -> IO (Maybe a)
    maybeIO act = handle(\_ -> return Nothing) ( liftM Just act)

但是这段代码在GHC 7或+中不起作用,我想知道如何编辑这段代码以便在GHC 7中工作,我试过

    import Control.Exception (bracket, handle, SomeException(..))
    maybeIO :: IO a -> IO (Maybe a)
    maybeIO act = handle(\(SomeException e) -> return Nothing) ( liftM Just act)

但是我得到了一个Parse错误:顶层的裸体表达

1 个答案:

答案 0 :(得分:3)

我没有得到任何这样的解析错误 - 我得到的唯一错误是缺少函数:

so3.hs:3:62: Not in scope: `liftM'

您需要import Control.Monad这是定义liftM函数的位置。或者使用fmap代替liftM

您的解析错误可能是由于缩进不正确造成的,但代码的复制和粘贴不会导致此类问题。