#if __GLASGOW_HASKELL__ >= 701 {-# LANGUAGE Trustworthy #-} #endif module Directory ( Permissions( Permissions, readable, writable, executable, searchable ), createDirectory, removeDirectory, removeFile, renameDirectory, renameFile, getDirectoryContents, getCurrentDirectory, setCurrentDirectory, doesFileExist, doesDirectoryExist, getPermissions, setPermissions, getModificationTime ) where import System.Directory hiding (Permissions, readable, writable, executable, searchable, getPermissions, setPermissions, getModificationTime) import qualified System.Directory as SD import System.Time(ClockTime(..)) #ifdef UTCTIME_IN_DIRECTORY import Data.Time.Clock.POSIX(utcTimeToPOSIXSeconds) getModificationTime = fmap toClockTime . SD.getModificationTime toClockTime = flip TOD 0 . floor . realToFrac . utcTimeToPOSIXSeconds #else getModificationTime = SD.getModificationTime #endif getModificationTime :: FilePath -> IO ClockTime data Permissions = Permissions { readable :: Bool, writable :: Bool, executable :: Bool, searchable :: Bool } deriving (Eq, Ord, Read, Show) getPermissions :: FilePath -> IO Permissions getPermissions fp = do perm <- SD.getPermissions fp return $ Permissions { readable = SD.readable perm, writable = SD.writable perm, executable = SD.executable perm, searchable = SD.searchable perm } setPermissions :: FilePath -> Permissions -> IO () setPermissions fp perm = let mkPerm = setOwnerReadable (readable perm) . setOwnerWritable (writable perm) . setOwnerExecutable (executable perm) . setOwnerSearchable (searchable perm) in SD.setPermissions fp (mkPerm emptyPermissions)