2012-02-14 13 views
0

私は現実世界のHaskellのmaybeIO機能が多分にIO関数の結果がラップしている9 章読んでいます:文句を言わないで仕事どのように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

私は取得できませんでしたそのような解析エラー - 唯一のエラーI GOTが不足している機能からだった:あなたはliftM機能が定義されている場所であるimport Control.Monadに必要

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

。またはliftMの代わりにfmapを使用してください。

あなたの解析エラーは、間違ったインデントが原因である可能性がありますが、コードのコピーと貼り付けによって問題が発生することはありません。

+0

ええ、それは、ありがとう、働く。コンパイラが混乱している他のコードである必要があります。 –

関連する問題