2012-02-14 70 views
0

我读了真实世界哈斯克尔第9章 有一种maybeIO函数封装了IO功能结果变成可能:如何使用haskell控件。异常处理返回一个IO(也许)

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) 

,但我得到一个解析错误:在顶级

回答

3

赤裸裸的表达,我没有得到任何这样的解析错误 - 唯一的错误我得到的是从缺少的功能:

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

你需要import Control.Monad这是liftM函数的定义在哪里。这或使用fmap而不是liftM

您的解析错误可能是由于缩进不正确,但是复制和粘贴您的代码不会导致我遇到这样的问题。

+0

是的,它的工作原理,谢谢。必须将其他代码混淆编译器。 – 2012-02-14 19:22:06