ref: c101325aaf8ed0ec3c8c4ff4b7d425bba799825a
dir: /mhs/System/FilePath.hs/
-- A few function copied from the filepath package module System.FilePath( FilePath, -- splitSearchPath, pathSeparator, -- takeExtension, dropExtension, (<.>), splitFileName, takeDirectory, (</>), ) where import Prelude(); import MHSPrelude import Data.List infixr 7 <.>, -<.> infixr 5 </> (</>) :: FilePath -> FilePath -> FilePath (</>) = combine {- hasLeadingPathSeparator :: FilePath -> Bool hasLeadingPathSeparator ('/':_) = True hasLeadingPathSeparator _ = False hasTrailingPathSeparator :: FilePath -> Bool hasTrailingPathSeparator = hasLeadingPathSeparator . reverse -} joinPath :: [FilePath] -> FilePath joinPath = foldr combine "" combine :: FilePath -> FilePath -> FilePath combine a b {-x | hasLeadingPathSeparator b = b | otherwise -} = combineAlways a b combineAlways :: FilePath -> FilePath -> FilePath combineAlways a b {-x | null a = b | null b = a | hasTrailingPathSeparator a = a ++ b | otherwise -} = a ++ pathSeparator : b pathSeparator :: Char pathSeparator = '/' isPathSeparator :: Char -> Bool isPathSeparator = (pathSeparator ==) --------- {- splitSearchPath :: String -> [FilePath] splitSearchPath = f where f xs = case break (':' ==) xs of (pre, [] ) -> g pre (pre, _:post) -> g pre ++ f post g "" = ["."] g x = [x] -} --------- splitFileName :: FilePath -> (String, String) splitFileName x = (if null dir then "./" else dir, name) where (dir, name) = splitFileName_ x splitFileName_ :: FilePath -> (String, String) splitFileName_ = breakEnd isPathSeparator dropFileName :: FilePath -> FilePath dropFileName = fst . splitFileName {- replaceBaseName :: FilePath -> String -> FilePath replaceBaseName pth nam = combineAlways a (nam <.> ext) where (a,b) = splitFileName_ pth ext = takeExtension b -} takeDirectory :: FilePath -> FilePath takeDirectory = dropTrailingPathSeparator . dropFileName dropTrailingPathSeparator :: FilePath -> FilePath dropTrailingPathSeparator = dropWhileEnd isPathSeparator --------- extSeparator :: Char extSeparator = '.' isExtSeparator :: Char -> Bool isExtSeparator = (extSeparator ==) {- splitExtension :: FilePath -> (String, String) splitExtension x = case nameDot of "" -> (x,"") _ -> (dir ++ init nameDot, extSeparator : ext) where (dir, file) = splitFileName_ x (nameDot, ext) = breakEnd isExtSeparator file takeExtension :: FilePath -> String takeExtension = snd . splitExtension -} dropExtension :: FilePath -> FilePath --dropExtension = fst . splitExtension dropExtension = reverse . drop 1 . dropWhile (not . isExtSeparator) . reverse (<.>) :: FilePath -> String -> FilePath (<.>) = addExtension addExtension :: FilePath -> String -> FilePath addExtension file "" = file addExtension file xs@(x:_) = res where res = if isExtSeparator x then file ++ xs else file ++ extSeparator : xs