module Data.Path
    (
    -- * Safe Path Types

      Path() -- Opaque path on purpose

    , AbsPath
    , RelPath
    , Absolute() -- Phantom anyway
    , Relative() -- Phantom anyway

    -- ** Safe path helper types

    , PathPiece()     -- Opaque path on purpose
    , LastPathPiece() -- Opaque path on purpose
    , Extension()     -- Opaque path on purpose


    -- * Constructing safe values

    -- ** Constructing safe values safely

    , relpath
    , abspath
    , ext
    , ground

    -- ** Constructing safe values unsafely

    , unsafeRelPathError
    , unsafeAbsPathError
    , unsafePathPieceError
    , unsafeLastPieceError
    , unsafeExtError


    -- * Rendering safe paths to 'FilePath's

    , toRelFilePath
    , toAbsFilePath


    -- * Functions involving extension

    -- ** Inspecting extensions

    , takeExtension
    , takeExtensions

    -- ** Adding extensions

    , addExtension
    , (<.>)
    , addExtensions

    -- ** Removing extensions

    , dropExtensionExact
    , dropExtension
    , dropExtensions

    -- ** Replacing extensions

    , replaceExtensionExact
    , replaceExtension
    , (-<.>)
    , replaceExtensions
    , replaceExtensionss

    -- ** Removing given extensions

    , stripExtension
    , stripExtensions

    -- ** Splitting extensions off a path

    , splitExtension
    , splitExtensions

    -- ** Predicates involving extensions

    , hasExtension


    -- * Functions involving Path pieces

    -- ** File names

    -- *** Inspecting file names

    , takeFileNameExact
    , takeFileName

    -- *** Removing file names

    , dropFileNameExact
    , dropFileName

    -- *** Replacing file names

    , replaceFileNameExact
    , replaceFileName

    -- ** Base names

    -- *** Inspecting base names

    , takeBaseNameExact
    , takeBaseName

    -- *** Replacing base names

    , replaceBaseNameExact
    , replaceBaseName

    -- ** Directories

    -- *** Replacing directories

    , replaceDirectoryExact
    , replaceDirectory

    -- ** Combining paths

    , combineExact
    , combine
    , (</>)

    -- ** Pieces of paths

    , splitPath
    , joinPath


    -- * Separators

    -- ** Paths

    , pathSeparator
    , pathSeparators
    , isPathSeparator

    -- ** Extension

    , extensionSeparator
    , extensionSeparators
    , isExtensionSeparator

    ) where

import Data.Path.Internal