我正在阅读现实世界haskell第9章。有一个maybeIO函数将IO函数结果封装到Maybe:中
maybeIO :: IO a -> IO (Maybe a)
maybeIO act = handle(_ -> return Nothing) ( liftM Just act)
但是这个代码在GHC7或+中不起作用,我想知道如何编辑这个代码,这样它就可以在GHC77中工作,我试过
import Control.Exception (bracket, handle, SomeException(..))
maybeIO :: IO a -> IO (Maybe a)
maybeIO act = handle((SomeException e) -> return Nothing) ( liftM Just act)
但我得到了一个解析错误:顶级的裸表达式
我没有得到任何这样的解析错误-我得到的唯一错误是缺少函数:
so3.hs:3:62: Not in scope: `liftM'
您需要import Control.Monad
,这是定义liftM
函数的地方。或者使用fmap
而不是liftM
。
您的解析错误可能是由于不正确的缩进,但复制并粘贴您的代码对我来说没有这样的问题。