2012-02-14 67 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