我正在阅读真实世界的第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错误:顶层的裸体表达
答案 0 :(得分:3)
我没有得到任何这样的解析错误 - 我得到的唯一错误是缺少函数:
so3.hs:3:62: Not in scope: `liftM'
您需要import Control.Monad
这是定义liftM
函数的位置。或者使用fmap
代替liftM
。
您的解析错误可能是由于缩进不正确造成的,但代码的复制和粘贴不会导致此类问题。