uniform-fileio-0.1.5.2: Uniform/FileStatus.hs
----------------------------------------------------------------------
--
-- Module : uniform-FileIO
-- Copyright : andrew u frank -
--
----------------------------------------------------------------------
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
-- | the routines to take apart the file status
module Uniform.FileStatus
( getFileStatus,
isDirectory,
isRegularFile,
getFileStatus',
isSymbolicLink,
getModificationTimeFromStatus,
getFileSize,
P.EpochTime,
P.FileStatus,
)
where
import qualified System.Directory as S
import qualified System.Posix as P
import Uniform.Error
-- (ErrIO, callIO, putIOwords, showT)
import Uniform.FilenamePath (Path, toShortFilePath)
import Uniform.Strings (putIOwords, showT)
unL :: Path df ar -> FilePath
unL = toShortFilePath
--getFileStatus :: Path df ra -> ErrIO P.FileStatus
-- getFileStatus :: (Control.Monad.Error.Class.MonadError m,
-- Control.Monad.IO.Class.MonadIO m,
-- Control.Monad.Error.Class.ErrorType m ~ Data.Text.Internal.Text)
-- => Path df ar -> m P.FileStatus
getFileStatus fp = callIO $ P.getFileStatus . unL $ fp
getFileStatus' :: FilePath -> ErrIO P.FileStatus
getFileStatus' fp = callIO $ P.getFileStatus fp
isRegularFile :: P.FileStatus -> Bool
isRegularFile = P.isRegularFile
isDirectory :: P.FileStatus -> Bool
isDirectory = P.isDirectory
isSymbolicLink :: P.FileStatus -> Bool
isSymbolicLink = P.isSymbolicLink
getModificationTimeFromStatus :: P.FileStatus -> P.EpochTime
getModificationTimeFromStatus = P.modificationTime
getFileSize = P.fileSize
createSymbolicLink :: Show (Path df ra) => Path df ra -> Path df ra -> ErrIO ()
createSymbolicLink fn tn = do
putIOwords ["createSymbolidLink", showT fn, "to", showT tn]
callIO $ P.createSymbolicLink (unL fn) (unL tn)
renameLink :: Path df ra -> Path df ra -> ErrIO ()
renameLink old new = callIO $ P.rename (unL old) (unL new)