module FilePaths
( module X
) where
import Data.Bool (not, (&&))
import Data.Eq ((/=), (==))
import Data.List (isInfixOf, null)
import Data.Maybe
import qualified System.FilePath as FilePath
import Data.Validity
import Path as X
import Path.Internal
import Path.IO as X
instance Validity (Path Abs File) where
isValid p@(Path fp)
= FilePath.isAbsolute fp
&& not (FilePath.hasTrailingPathSeparator fp)
&& FilePath.isValid fp
&& not (".." `isInfixOf` fp)
&& (parseAbsFile fp == Just p)
instance Validity (Path Rel File) where
isValid p@(Path fp)
= FilePath.isRelative fp
&& not (FilePath.hasTrailingPathSeparator fp)
&& FilePath.isValid fp
&& fp /= "."
&& fp /= ".."
&& not (".." `isInfixOf` fp)
&& (parseRelFile fp == Just p)
instance Validity (Path Abs Dir) where
isValid p@(Path fp)
= FilePath.isAbsolute fp
&& FilePath.hasTrailingPathSeparator fp
&& FilePath.isValid fp
&& not (".." `isInfixOf` fp)
&& (parseAbsDir fp == Just p)
instance Validity (Path Rel Dir) where
isValid p@(Path fp)
= FilePath.isRelative fp
&& FilePath.hasTrailingPathSeparator fp
&& FilePath.isValid fp
&& not (null fp)
&& fp /= "."
&& fp /= ".."
&& not (".." `isInfixOf` fp)
&& (parseRelDir fp == Just p)