axel-0.0.11: src/Axel/Utils/FilePath.hs
module Axel.Utils.FilePath where
import Axel.Prelude
import Control.Lens ((%~), _Wrapping', op, op)
import Data.Function ((&))
import qualified Data.Text as T
import Data.Text.Lens (unpacked)
import qualified System.FilePath as FilePath
(</>) :: FilePath -> FilePath -> FilePath
(FilePath prefix) </> (FilePath suffix) =
FilePath . T.pack $ (FilePath.</>) (T.unpack prefix) (T.unpack suffix)
(<.>) :: FilePath -> Text -> FilePath
(FilePath prefix) <.> suffix =
FilePath . T.pack $ (FilePath.<.>) (T.unpack prefix) (T.unpack suffix)
stripExtension :: Text -> FilePath -> Maybe FilePath
stripExtension ext =
(_Wrapping' FilePath . unpacked) $ FilePath.stripExtension (T.unpack ext)
replaceExtension :: FilePath -> Text -> FilePath
replaceExtension filePath newExt =
filePath & _Wrapping' FilePath . unpacked %~
flip FilePath.replaceExtension (T.unpack newExt)
takeFileName :: FilePath -> FilePath
takeFileName = _Wrapping' FilePath . unpacked %~ FilePath.takeFileName
takeBaseName :: FilePath -> FilePath
takeBaseName = _Wrapping' FilePath . unpacked %~ FilePath.takeBaseName
takeDirectory :: FilePath -> FilePath
takeDirectory = _Wrapping' FilePath . unpacked %~ FilePath.takeDirectory
splitDirectories :: FilePath -> [FilePath]
splitDirectories =
map (FilePath . T.pack) . FilePath.splitDirectories . (T.unpack . op FilePath)
joinPath :: [FilePath] -> FilePath
joinPath =
(FilePath . T.pack) . FilePath.joinPath . map (T.unpack . op FilePath)