module System.Unix.Files where import Control.Exception (catch) import Prelude hiding (catch) import System.Posix.Files (createSymbolicLink, removeLink) import System.IO.Error (isAlreadyExistsError) -- |calls 'createSymbolicLink' but will remove the target and retry if -- 'createSymbolicLink' raises EEXIST. forceSymbolicLink :: FilePath -> FilePath -> IO () forceSymbolicLink target linkName = createSymbolicLink target linkName `catch` (\e -> if isAlreadyExistsError e then do removeLink linkName createSymbolicLink target linkName else ioError e)