2017-04-19 1 views
1

Haskell에서 독점적으로 사용하기 위해 파일을 잠그고 이미 잠긴 경우 IOError을 던집니다.Haskell에서 잠긴 파일을보고하는 더 나은 방법

import Data.Maybe (fromMaybe) 
import System.FileLock (FileLock, SharedExclusive (Exclusive), tryLockFile) 

-- ... 
do 
    -- ... 
    maybeFileLock <- tryLockFile path Exclusive -- returns Maybe FileLock 
    let fileLock = fromMaybe (throwIO (userError "File locked")) maybeFileLock 

Maybe을 처리하고 Nothing 경우 만 예외를 슬로우하는 더 좋은 방법이 있나요? 이 두 줄을 하나로 결합 할 수 있습니까?

N.B. :이 선들의 어떤 조합이라도 의도를 분명하게 알 수 없다고 주장 할 수 있습니다.

+0

예제 코드는 유효하지 않습니다. 유형 오류가 있습니다. –

답변

3
fileLock <- fromMaybe (throwIO (userError "File locked")) 
    <$> tryLockFile path Exclusive 

하지만 throwIO :: Exception e => e -> IO a, 그래서 이것과 코드가 FileLockIO a 사이에 불일치한다. 대신 :

fileLock <- maybe (throwIO (userError "File locked")) pure 
    =<< tryLockFile path Exclusive 
+0

그게 효과가 있어요. 감사. 컴파일을 시도 할 때 불일치 유형을 인식했지만이를 수정하는 방법을 계속 연구하고있었습니다. – Ralph