2012-02-14 3 views
0

나는 실제 하스켈 a를 maybeIO 함수가 아마로 IO 기능의 결과가 래핑되어 9 장 읽고있다 : 습관에서 작동haskell Control 사용 방법. 예외 핸들 (아마)는 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

에서 알몸 표현을 나는하지 않았다 그와 같은 구문 분석 오류 - 유일한 오류 GOT는없는 기능에서했다 : 당신은 liftM 함수가 정의되는 경우이다 import Control.Monad 필요

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

. 또는 liftM 대신 fmap을 사용하십시오.

구문 분석 오류는 들여 쓰기가 잘못되었을 수 있지만 코드 복사하여 붙여 넣기하면 문제가되지 않습니다.

+0

예, 작동합니다. 다른 코드가 컴파일러와 혼동되어 있어야합니다. –