take -bytestring +filepath
Get the base name, without an extension or path.
> takeBaseName "file/test.txt" == "test"
> takeBaseName "dave.ext" == "dave"
> takeBaseName "" == ""
> takeBaseName "test" == "test"
> takeBaseName (addTrailingPathSeparator x) == ""
> takeBaseName "file/file.tar.gz" == "file.tar"
Get the directory name, move up one level.
> takeDirectory x `isPrefixOf` x || takeDirectory x == "."
> takeDirectory "foo" == "."
> takeDirectory "/foo/bar/baz" == "/foo/bar"
> takeDirectory "/foo/bar/baz/" == "/foo/bar/baz"
> takeDirectory "foo/bar/baz" == "foo/bar"
> Windows: takeDirectory "foo\\bar" == "foo"
> Windows: takeDirectory "foo\\bar\\\\" == "foo\\bar"
> Windows: takeDirectory "C:\\" == "C:\\"
Get the drive from a filepath.
> takeDrive x == fst (splitDrive x)
Get the extension of a file, returns "" for no extension, .ext otherwise.
> takeExtension x == snd (splitExtension x)
> Valid x => takeExtension (addExtension x "ext") == ".ext"
> Valid x => takeExtension (replaceExtension x "ext") == ".ext"
Get all extensions
> takeExtensions "file.tar.gz" == ".tar.gz"
Get the file name.
> takeFileName "test/" == ""
> takeFileName x `isSuffixOf` x
> takeFileName x == snd (splitFileName x)
> Valid x => takeFileName (replaceFileName x "fred") == "fred"
> Valid x => takeFileName (x </> "fred") == "fred"
> Valid x => isRelative (takeFileName x)