module Main where import System.Environment import Control.Monad import Data.Maybe import Test.QuickCheck hiding ((==>)) import TestUtil import Prelude as P import Data.Semigroup import qualified Data.Char as C import qualified System.FilePath.Windows as W import qualified System.FilePath.Posix as P import qualified Legacy.System.FilePath.Windows as LW import qualified Legacy.System.FilePath.Posix as LP main :: IO () main = do args <- getArgs let count = case args of i:_ -> read i; _ -> 10000 let testNum = case args of _:i:_ | let num = read i , num < 0 -> drop (negate num) equivalentTests | let num = read i , num > 0 -> take num equivalentTests | otherwise -> [] _ -> equivalentTests putStrLn $ "Testing with " ++ show count ++ " repetitions" let total = length testNum let showOutput x = show x{output=""} ++ "\n" ++ output x bad <- fmap catMaybes $ forM (zip [1..] testNum) $ \(i,(msg,prop)) -> do putStrLn $ "Test " ++ show i ++ " of " ++ show total ++ ": " ++ msg res <- quickCheckWithResult stdArgs{chatty=False, maxSuccess=count} prop case res of Success{} -> pure Nothing bad -> do putStrLn $ showOutput bad; putStrLn "TEST FAILURE!"; pure $ Just (msg,bad) if null bad then putStrLn $ "Success, " ++ show total ++ " tests passed" else do putStrLn $ show (length bad) ++ " FAILURES\n" forM_ (zip [1..] bad) $ \(i,(a,b)) -> putStrLn $ "FAILURE " ++ show i ++ ": " ++ a ++ "\n" ++ showOutput b ++ "\n" fail $ "FAILURE, failed " ++ show (length bad) ++ " of " ++ show total ++ " tests" equivalentTests :: [(String, Property)] equivalentTests = [("( W.pathSeparator == '\\\\' ) == ( LW.pathSeparator == '\\\\' )", property $ ( W.pathSeparator == '\\' ) == ( LW.pathSeparator == '\\' )) ,("( P.pathSeparator == '/' ) == ( LP.pathSeparator == '/' )", property $ ( P.pathSeparator == '/' ) == ( LP.pathSeparator == '/' )) ,("( P.isPathSeparator P.pathSeparator ) == ( LP.isPathSeparator LP.pathSeparator )", property $ ( P.isPathSeparator P.pathSeparator ) == ( LP.isPathSeparator LP.pathSeparator )) ,("( W.isPathSeparator W.pathSeparator ) == ( LW.isPathSeparator LW.pathSeparator )", property $ ( W.isPathSeparator W.pathSeparator ) == ( LW.isPathSeparator LW.pathSeparator )) ,("( W.pathSeparators == ['\\\\', '/'] ) == ( LW.pathSeparators == ['\\\\', '/'] )", property $ ( W.pathSeparators == ['\\', '/'] ) == ( LW.pathSeparators == ['\\', '/'] )) ,("( P.pathSeparators == ['/'] ) == ( LP.pathSeparators == ['/'] )", property $ ( P.pathSeparators == ['/'] ) == ( LP.pathSeparators == ['/'] )) ,("( P.pathSeparator `elem` P.pathSeparators ) == ( LP.pathSeparator `elem` LP.pathSeparators )", property $ ( P.pathSeparator `elem` P.pathSeparators ) == ( LP.pathSeparator `elem` LP.pathSeparators )) ,("( W.pathSeparator `elem` W.pathSeparators ) == ( LW.pathSeparator `elem` LW.pathSeparators )", property $ ( W.pathSeparator `elem` W.pathSeparators ) == ( LW.pathSeparator `elem` LW.pathSeparators )) ,("( P.isPathSeparator a == (a `elem` P.pathSeparators) ) == ( LP.isPathSeparator a == (a `elem` LP.pathSeparators) )", property $ \a -> ( P.isPathSeparator a == (a `elem` P.pathSeparators) ) == ( LP.isPathSeparator a == (a `elem` LP.pathSeparators) )) ,("( W.isPathSeparator a == (a `elem` W.pathSeparators) ) == ( LW.isPathSeparator a == (a `elem` LW.pathSeparators) )", property $ \a -> ( W.isPathSeparator a == (a `elem` W.pathSeparators) ) == ( LW.isPathSeparator a == (a `elem` LW.pathSeparators) )) ,("( W.searchPathSeparator == ';' ) == ( LW.searchPathSeparator == ';' )", property $ ( W.searchPathSeparator == ';' ) == ( LW.searchPathSeparator == ';' )) ,("( P.searchPathSeparator == ':' ) == ( LP.searchPathSeparator == ':' )", property $ ( P.searchPathSeparator == ':' ) == ( LP.searchPathSeparator == ':' )) ,("( P.isSearchPathSeparator a == (a == P.searchPathSeparator) ) == ( LP.isSearchPathSeparator a == (a == LP.searchPathSeparator) )", property $ \a -> ( P.isSearchPathSeparator a == (a == P.searchPathSeparator) ) == ( LP.isSearchPathSeparator a == (a == LP.searchPathSeparator) )) ,("( W.isSearchPathSeparator a == (a == W.searchPathSeparator) ) == ( LW.isSearchPathSeparator a == (a == LW.searchPathSeparator) )", property $ \a -> ( W.isSearchPathSeparator a == (a == W.searchPathSeparator) ) == ( LW.isSearchPathSeparator a == (a == LW.searchPathSeparator) )) ,("( P.extSeparator == '.' ) == ( LP.extSeparator == '.' )", property $ ( P.extSeparator == '.' ) == ( LP.extSeparator == '.' )) ,("( W.extSeparator == '.' ) == ( LW.extSeparator == '.' )", property $ ( W.extSeparator == '.' ) == ( LW.extSeparator == '.' )) ,("( P.isExtSeparator a == (a == P.extSeparator) ) == ( LP.isExtSeparator a == (a == LP.extSeparator) )", property $ \a -> ( P.isExtSeparator a == (a == P.extSeparator) ) == ( LP.isExtSeparator a == (a == LP.extSeparator) )) ,("( W.isExtSeparator a == (a == W.extSeparator) ) == ( LW.isExtSeparator a == (a == LW.extSeparator) )", property $ \a -> ( W.isExtSeparator a == (a == W.extSeparator) ) == ( LW.isExtSeparator a == (a == LW.extSeparator) )) ,("( P.splitSearchPath \"File1:File2:File3\" == [\"File1\", \"File2\", \"File3\"] ) == ( LP.splitSearchPath \"File1:File2:File3\" == [\"File1\", \"File2\", \"File3\"] )", property $ ( P.splitSearchPath "File1:File2:File3" == ["File1", "File2", "File3"] ) == ( LP.splitSearchPath "File1:File2:File3" == ["File1", "File2", "File3"] )) ,("( P.splitSearchPath \"File1::File2:File3\" == [\"File1\", \".\", \"File2\", \"File3\"] ) == ( LP.splitSearchPath \"File1::File2:File3\" == [\"File1\", \".\", \"File2\", \"File3\"] )", property $ ( P.splitSearchPath "File1::File2:File3" == ["File1", ".", "File2", "File3"] ) == ( LP.splitSearchPath "File1::File2:File3" == ["File1", ".", "File2", "File3"] )) ,("( W.splitSearchPath \"File1;File2;File3\" == [\"File1\", \"File2\", \"File3\"] ) == ( LW.splitSearchPath \"File1;File2;File3\" == [\"File1\", \"File2\", \"File3\"] )", property $ ( W.splitSearchPath "File1;File2;File3" == ["File1", "File2", "File3"] ) == ( LW.splitSearchPath "File1;File2;File3" == ["File1", "File2", "File3"] )) ,("( W.splitSearchPath \"File1;;File2;File3\" == [\"File1\", \"File2\", \"File3\"] ) == ( LW.splitSearchPath \"File1;;File2;File3\" == [\"File1\", \"File2\", \"File3\"] )", property $ ( W.splitSearchPath "File1;;File2;File3" == ["File1", "File2", "File3"] ) == ( LW.splitSearchPath "File1;;File2;File3" == ["File1", "File2", "File3"] )) ,("( W.splitSearchPath \"File1;\\\"File2\\\";File3\" == [\"File1\", \"File2\", \"File3\"] ) == ( LW.splitSearchPath \"File1;\\\"File2\\\";File3\" == [\"File1\", \"File2\", \"File3\"] )", property $ ( W.splitSearchPath "File1;\"File2\";File3" == ["File1", "File2", "File3"] ) == ( LW.splitSearchPath "File1;\"File2\";File3" == ["File1", "File2", "File3"] )) ,("( P.splitExtension \"/directory/path.ext\" == (\"/directory/path\", \".ext\") ) == ( LP.splitExtension \"/directory/path.ext\" == (\"/directory/path\", \".ext\") )", property $ ( P.splitExtension "/directory/path.ext" == ("/directory/path", ".ext") ) == ( LP.splitExtension "/directory/path.ext" == ("/directory/path", ".ext") )) ,("( W.splitExtension \"/directory/path.ext\" == (\"/directory/path\", \".ext\") ) == ( LW.splitExtension \"/directory/path.ext\" == (\"/directory/path\", \".ext\") )", property $ ( W.splitExtension "/directory/path.ext" == ("/directory/path", ".ext") ) == ( LW.splitExtension "/directory/path.ext" == ("/directory/path", ".ext") )) ,("( uncurry (<>) (P.splitExtension x) == x ) == ( uncurry (<>) (LP.splitExtension x) == x )", property $ \(QFilePath x) -> ( uncurry (<>) (P.splitExtension x) == x ) == ( uncurry (<>) (LP.splitExtension x) == x )) ,("( uncurry (<>) (W.splitExtension x) == x ) == ( uncurry (<>) (LW.splitExtension x) == x )", property $ \(QFilePath x) -> ( uncurry (<>) (W.splitExtension x) == x ) == ( uncurry (<>) (LW.splitExtension x) == x )) ,("( uncurry P.addExtension (P.splitExtension x) == x ) == ( uncurry LP.addExtension (LP.splitExtension x) == x )", property $ \(QFilePathValidP x) -> ( uncurry P.addExtension (P.splitExtension x) == x ) == ( uncurry LP.addExtension (LP.splitExtension x) == x )) ,("( uncurry W.addExtension (W.splitExtension x) == x ) == ( uncurry LW.addExtension (LW.splitExtension x) == x )", property $ \(QFilePathValidW x) -> ( uncurry W.addExtension (W.splitExtension x) == x ) == ( uncurry LW.addExtension (LW.splitExtension x) == x )) ,("( P.splitExtension \"file.txt\" == (\"file\", \".txt\") ) == ( LP.splitExtension \"file.txt\" == (\"file\", \".txt\") )", property $ ( P.splitExtension "file.txt" == ("file", ".txt") ) == ( LP.splitExtension "file.txt" == ("file", ".txt") )) ,("( W.splitExtension \"file.txt\" == (\"file\", \".txt\") ) == ( LW.splitExtension \"file.txt\" == (\"file\", \".txt\") )", property $ ( W.splitExtension "file.txt" == ("file", ".txt") ) == ( LW.splitExtension "file.txt" == ("file", ".txt") )) ,("( P.splitExtension \"file\" == (\"file\", \"\") ) == ( LP.splitExtension \"file\" == (\"file\", \"\") )", property $ ( P.splitExtension "file" == ("file", "") ) == ( LP.splitExtension "file" == ("file", "") )) ,("( W.splitExtension \"file\" == (\"file\", \"\") ) == ( LW.splitExtension \"file\" == (\"file\", \"\") )", property $ ( W.splitExtension "file" == ("file", "") ) == ( LW.splitExtension "file" == ("file", "") )) ,("( P.splitExtension \"file/file.txt\" == (\"file/file\", \".txt\") ) == ( LP.splitExtension \"file/file.txt\" == (\"file/file\", \".txt\") )", property $ ( P.splitExtension "file/file.txt" == ("file/file", ".txt") ) == ( LP.splitExtension "file/file.txt" == ("file/file", ".txt") )) ,("( W.splitExtension \"file/file.txt\" == (\"file/file\", \".txt\") ) == ( LW.splitExtension \"file/file.txt\" == (\"file/file\", \".txt\") )", property $ ( W.splitExtension "file/file.txt" == ("file/file", ".txt") ) == ( LW.splitExtension "file/file.txt" == ("file/file", ".txt") )) ,("( P.splitExtension \"file.txt/boris\" == (\"file.txt/boris\", \"\") ) == ( LP.splitExtension \"file.txt/boris\" == (\"file.txt/boris\", \"\") )", property $ ( P.splitExtension "file.txt/boris" == ("file.txt/boris", "") ) == ( LP.splitExtension "file.txt/boris" == ("file.txt/boris", "") )) ,("( W.splitExtension \"file.txt/boris\" == (\"file.txt/boris\", \"\") ) == ( LW.splitExtension \"file.txt/boris\" == (\"file.txt/boris\", \"\") )", property $ ( W.splitExtension "file.txt/boris" == ("file.txt/boris", "") ) == ( LW.splitExtension "file.txt/boris" == ("file.txt/boris", "") )) ,("( P.splitExtension \"file.txt/boris.ext\" == (\"file.txt/boris\", \".ext\") ) == ( LP.splitExtension \"file.txt/boris.ext\" == (\"file.txt/boris\", \".ext\") )", property $ ( P.splitExtension "file.txt/boris.ext" == ("file.txt/boris", ".ext") ) == ( LP.splitExtension "file.txt/boris.ext" == ("file.txt/boris", ".ext") )) ,("( W.splitExtension \"file.txt/boris.ext\" == (\"file.txt/boris\", \".ext\") ) == ( LW.splitExtension \"file.txt/boris.ext\" == (\"file.txt/boris\", \".ext\") )", property $ ( W.splitExtension "file.txt/boris.ext" == ("file.txt/boris", ".ext") ) == ( LW.splitExtension "file.txt/boris.ext" == ("file.txt/boris", ".ext") )) ,("( P.splitExtension \"file/path.txt.bob.fred\" == (\"file/path.txt.bob\", \".fred\") ) == ( LP.splitExtension \"file/path.txt.bob.fred\" == (\"file/path.txt.bob\", \".fred\") )", property $ ( P.splitExtension "file/path.txt.bob.fred" == ("file/path.txt.bob", ".fred") ) == ( LP.splitExtension "file/path.txt.bob.fred" == ("file/path.txt.bob", ".fred") )) ,("( W.splitExtension \"file/path.txt.bob.fred\" == (\"file/path.txt.bob\", \".fred\") ) == ( LW.splitExtension \"file/path.txt.bob.fred\" == (\"file/path.txt.bob\", \".fred\") )", property $ ( W.splitExtension "file/path.txt.bob.fred" == ("file/path.txt.bob", ".fred") ) == ( LW.splitExtension "file/path.txt.bob.fred" == ("file/path.txt.bob", ".fred") )) ,("( P.splitExtension \"file/path.txt/\" == (\"file/path.txt/\", \"\") ) == ( LP.splitExtension \"file/path.txt/\" == (\"file/path.txt/\", \"\") )", property $ ( P.splitExtension "file/path.txt/" == ("file/path.txt/", "") ) == ( LP.splitExtension "file/path.txt/" == ("file/path.txt/", "") )) ,("( W.splitExtension \"file/path.txt/\" == (\"file/path.txt/\", \"\") ) == ( LW.splitExtension \"file/path.txt/\" == (\"file/path.txt/\", \"\") )", property $ ( W.splitExtension "file/path.txt/" == ("file/path.txt/", "") ) == ( LW.splitExtension "file/path.txt/" == ("file/path.txt/", "") )) ,("( P.takeExtension \"/directory/path.ext\" == \".ext\" ) == ( LP.takeExtension \"/directory/path.ext\" == \".ext\" )", property $ ( P.takeExtension "/directory/path.ext" == ".ext" ) == ( LP.takeExtension "/directory/path.ext" == ".ext" )) ,("( W.takeExtension \"/directory/path.ext\" == \".ext\" ) == ( LW.takeExtension \"/directory/path.ext\" == \".ext\" )", property $ ( W.takeExtension "/directory/path.ext" == ".ext" ) == ( LW.takeExtension "/directory/path.ext" == ".ext" )) ,("( P.takeExtension x == snd (P.splitExtension x) ) == ( LP.takeExtension x == snd (LP.splitExtension x) )", property $ \(QFilePath x) -> ( P.takeExtension x == snd (P.splitExtension x) ) == ( LP.takeExtension x == snd (LP.splitExtension x) )) ,("( W.takeExtension x == snd (W.splitExtension x) ) == ( LW.takeExtension x == snd (LW.splitExtension x) )", property $ \(QFilePath x) -> ( W.takeExtension x == snd (W.splitExtension x) ) == ( LW.takeExtension x == snd (LW.splitExtension x) )) ,("( P.takeExtension (P.addExtension x \"ext\") == \".ext\" ) == ( LP.takeExtension (LP.addExtension x \"ext\") == \".ext\" )", property $ \(QFilePathValidP x) -> ( P.takeExtension (P.addExtension x "ext") == ".ext" ) == ( LP.takeExtension (LP.addExtension x "ext") == ".ext" )) ,("( W.takeExtension (W.addExtension x \"ext\") == \".ext\" ) == ( LW.takeExtension (LW.addExtension x \"ext\") == \".ext\" )", property $ \(QFilePathValidW x) -> ( W.takeExtension (W.addExtension x "ext") == ".ext" ) == ( LW.takeExtension (LW.addExtension x "ext") == ".ext" )) ,("( P.takeExtension (P.replaceExtension x \"ext\") == \".ext\" ) == ( LP.takeExtension (LP.replaceExtension x \"ext\") == \".ext\" )", property $ \(QFilePathValidP x) -> ( P.takeExtension (P.replaceExtension x "ext") == ".ext" ) == ( LP.takeExtension (LP.replaceExtension x "ext") == ".ext" )) ,("( W.takeExtension (W.replaceExtension x \"ext\") == \".ext\" ) == ( LW.takeExtension (LW.replaceExtension x \"ext\") == \".ext\" )", property $ \(QFilePathValidW x) -> ( W.takeExtension (W.replaceExtension x "ext") == ".ext" ) == ( LW.takeExtension (LW.replaceExtension x "ext") == ".ext" )) ,("( \"/directory/path.txt\" P.-<.> \"ext\" == \"/directory/path.ext\" ) == ( \"/directory/path.txt\" LP.-<.> \"ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path.txt" P.-<.> "ext" == "/directory/path.ext" ) == ( "/directory/path.txt" LP.-<.> "ext" == "/directory/path.ext" )) ,("( \"/directory/path.txt\" W.-<.> \"ext\" == \"/directory/path.ext\" ) == ( \"/directory/path.txt\" LW.-<.> \"ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path.txt" W.-<.> "ext" == "/directory/path.ext" ) == ( "/directory/path.txt" LW.-<.> "ext" == "/directory/path.ext" )) ,("( \"/directory/path.txt\" P.-<.> \".ext\" == \"/directory/path.ext\" ) == ( \"/directory/path.txt\" LP.-<.> \".ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path.txt" P.-<.> ".ext" == "/directory/path.ext" ) == ( "/directory/path.txt" LP.-<.> ".ext" == "/directory/path.ext" )) ,("( \"/directory/path.txt\" W.-<.> \".ext\" == \"/directory/path.ext\" ) == ( \"/directory/path.txt\" LW.-<.> \".ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path.txt" W.-<.> ".ext" == "/directory/path.ext" ) == ( "/directory/path.txt" LW.-<.> ".ext" == "/directory/path.ext" )) ,("( \"foo.o\" P.-<.> \"c\" == \"foo.c\" ) == ( \"foo.o\" LP.-<.> \"c\" == \"foo.c\" )", property $ ( "foo.o" P.-<.> "c" == "foo.c" ) == ( "foo.o" LP.-<.> "c" == "foo.c" )) ,("( \"foo.o\" W.-<.> \"c\" == \"foo.c\" ) == ( \"foo.o\" LW.-<.> \"c\" == \"foo.c\" )", property $ ( "foo.o" W.-<.> "c" == "foo.c" ) == ( "foo.o" LW.-<.> "c" == "foo.c" )) ,("( P.replaceExtension \"/directory/path.txt\" \"ext\" == \"/directory/path.ext\" ) == ( LP.replaceExtension \"/directory/path.txt\" \"ext\" == \"/directory/path.ext\" )", property $ ( P.replaceExtension "/directory/path.txt" "ext" == "/directory/path.ext" ) == ( LP.replaceExtension "/directory/path.txt" "ext" == "/directory/path.ext" )) ,("( W.replaceExtension \"/directory/path.txt\" \"ext\" == \"/directory/path.ext\" ) == ( LW.replaceExtension \"/directory/path.txt\" \"ext\" == \"/directory/path.ext\" )", property $ ( W.replaceExtension "/directory/path.txt" "ext" == "/directory/path.ext" ) == ( LW.replaceExtension "/directory/path.txt" "ext" == "/directory/path.ext" )) ,("( P.replaceExtension \"/directory/path.txt\" \".ext\" == \"/directory/path.ext\" ) == ( LP.replaceExtension \"/directory/path.txt\" \".ext\" == \"/directory/path.ext\" )", property $ ( P.replaceExtension "/directory/path.txt" ".ext" == "/directory/path.ext" ) == ( LP.replaceExtension "/directory/path.txt" ".ext" == "/directory/path.ext" )) ,("( W.replaceExtension \"/directory/path.txt\" \".ext\" == \"/directory/path.ext\" ) == ( LW.replaceExtension \"/directory/path.txt\" \".ext\" == \"/directory/path.ext\" )", property $ ( W.replaceExtension "/directory/path.txt" ".ext" == "/directory/path.ext" ) == ( LW.replaceExtension "/directory/path.txt" ".ext" == "/directory/path.ext" )) ,("( P.replaceExtension \"file.txt\" \".bob\" == \"file.bob\" ) == ( LP.replaceExtension \"file.txt\" \".bob\" == \"file.bob\" )", property $ ( P.replaceExtension "file.txt" ".bob" == "file.bob" ) == ( LP.replaceExtension "file.txt" ".bob" == "file.bob" )) ,("( W.replaceExtension \"file.txt\" \".bob\" == \"file.bob\" ) == ( LW.replaceExtension \"file.txt\" \".bob\" == \"file.bob\" )", property $ ( W.replaceExtension "file.txt" ".bob" == "file.bob" ) == ( LW.replaceExtension "file.txt" ".bob" == "file.bob" )) ,("( P.replaceExtension \"file.txt\" \"bob\" == \"file.bob\" ) == ( LP.replaceExtension \"file.txt\" \"bob\" == \"file.bob\" )", property $ ( P.replaceExtension "file.txt" "bob" == "file.bob" ) == ( LP.replaceExtension "file.txt" "bob" == "file.bob" )) ,("( W.replaceExtension \"file.txt\" \"bob\" == \"file.bob\" ) == ( LW.replaceExtension \"file.txt\" \"bob\" == \"file.bob\" )", property $ ( W.replaceExtension "file.txt" "bob" == "file.bob" ) == ( LW.replaceExtension "file.txt" "bob" == "file.bob" )) ,("( P.replaceExtension \"file\" \".bob\" == \"file.bob\" ) == ( LP.replaceExtension \"file\" \".bob\" == \"file.bob\" )", property $ ( P.replaceExtension "file" ".bob" == "file.bob" ) == ( LP.replaceExtension "file" ".bob" == "file.bob" )) ,("( W.replaceExtension \"file\" \".bob\" == \"file.bob\" ) == ( LW.replaceExtension \"file\" \".bob\" == \"file.bob\" )", property $ ( W.replaceExtension "file" ".bob" == "file.bob" ) == ( LW.replaceExtension "file" ".bob" == "file.bob" )) ,("( P.replaceExtension \"file.txt\" \"\" == \"file\" ) == ( LP.replaceExtension \"file.txt\" \"\" == \"file\" )", property $ ( P.replaceExtension "file.txt" "" == "file" ) == ( LP.replaceExtension "file.txt" "" == "file" )) ,("( W.replaceExtension \"file.txt\" \"\" == \"file\" ) == ( LW.replaceExtension \"file.txt\" \"\" == \"file\" )", property $ ( W.replaceExtension "file.txt" "" == "file" ) == ( LW.replaceExtension "file.txt" "" == "file" )) ,("( P.replaceExtension \"file.fred.bob\" \"txt\" == \"file.fred.txt\" ) == ( LP.replaceExtension \"file.fred.bob\" \"txt\" == \"file.fred.txt\" )", property $ ( P.replaceExtension "file.fred.bob" "txt" == "file.fred.txt" ) == ( LP.replaceExtension "file.fred.bob" "txt" == "file.fred.txt" )) ,("( W.replaceExtension \"file.fred.bob\" \"txt\" == \"file.fred.txt\" ) == ( LW.replaceExtension \"file.fred.bob\" \"txt\" == \"file.fred.txt\" )", property $ ( W.replaceExtension "file.fred.bob" "txt" == "file.fred.txt" ) == ( LW.replaceExtension "file.fred.bob" "txt" == "file.fred.txt" )) ,("( P.replaceExtension x y == P.addExtension (P.dropExtension x) y ) == ( LP.replaceExtension x y == LP.addExtension (LP.dropExtension x) y )", property $ \(QFilePath x) (QFilePath y) -> ( P.replaceExtension x y == P.addExtension (P.dropExtension x) y ) == ( LP.replaceExtension x y == LP.addExtension (LP.dropExtension x) y )) ,("( W.replaceExtension x y == W.addExtension (W.dropExtension x) y ) == ( LW.replaceExtension x y == LW.addExtension (LW.dropExtension x) y )", property $ \(QFilePath x) (QFilePath y) -> ( W.replaceExtension x y == W.addExtension (W.dropExtension x) y ) == ( LW.replaceExtension x y == LW.addExtension (LW.dropExtension x) y )) ,("( \"/directory/path\" P.<.> \"ext\" == \"/directory/path.ext\" ) == ( \"/directory/path\" LP.<.> \"ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path" P.<.> "ext" == "/directory/path.ext" ) == ( "/directory/path" LP.<.> "ext" == "/directory/path.ext" )) ,("( \"/directory/path\" W.<.> \"ext\" == \"/directory/path.ext\" ) == ( \"/directory/path\" LW.<.> \"ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path" W.<.> "ext" == "/directory/path.ext" ) == ( "/directory/path" LW.<.> "ext" == "/directory/path.ext" )) ,("( \"/directory/path\" P.<.> \".ext\" == \"/directory/path.ext\" ) == ( \"/directory/path\" LP.<.> \".ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path" P.<.> ".ext" == "/directory/path.ext" ) == ( "/directory/path" LP.<.> ".ext" == "/directory/path.ext" )) ,("( \"/directory/path\" W.<.> \".ext\" == \"/directory/path.ext\" ) == ( \"/directory/path\" LW.<.> \".ext\" == \"/directory/path.ext\" )", property $ ( "/directory/path" W.<.> ".ext" == "/directory/path.ext" ) == ( "/directory/path" LW.<.> ".ext" == "/directory/path.ext" )) ,("( P.dropExtension \"/directory/path.ext\" == \"/directory/path\" ) == ( LP.dropExtension \"/directory/path.ext\" == \"/directory/path\" )", property $ ( P.dropExtension "/directory/path.ext" == "/directory/path" ) == ( LP.dropExtension "/directory/path.ext" == "/directory/path" )) ,("( W.dropExtension \"/directory/path.ext\" == \"/directory/path\" ) == ( LW.dropExtension \"/directory/path.ext\" == \"/directory/path\" )", property $ ( W.dropExtension "/directory/path.ext" == "/directory/path" ) == ( LW.dropExtension "/directory/path.ext" == "/directory/path" )) ,("( P.dropExtension x == fst (P.splitExtension x) ) == ( LP.dropExtension x == fst (LP.splitExtension x) )", property $ \(QFilePath x) -> ( P.dropExtension x == fst (P.splitExtension x) ) == ( LP.dropExtension x == fst (LP.splitExtension x) )) ,("( W.dropExtension x == fst (W.splitExtension x) ) == ( LW.dropExtension x == fst (LW.splitExtension x) )", property $ \(QFilePath x) -> ( W.dropExtension x == fst (W.splitExtension x) ) == ( LW.dropExtension x == fst (LW.splitExtension x) )) ,("( P.addExtension \"/directory/path\" \"ext\" == \"/directory/path.ext\" ) == ( LP.addExtension \"/directory/path\" \"ext\" == \"/directory/path.ext\" )", property $ ( P.addExtension "/directory/path" "ext" == "/directory/path.ext" ) == ( LP.addExtension "/directory/path" "ext" == "/directory/path.ext" )) ,("( W.addExtension \"/directory/path\" \"ext\" == \"/directory/path.ext\" ) == ( LW.addExtension \"/directory/path\" \"ext\" == \"/directory/path.ext\" )", property $ ( W.addExtension "/directory/path" "ext" == "/directory/path.ext" ) == ( LW.addExtension "/directory/path" "ext" == "/directory/path.ext" )) ,("( P.addExtension \"file.txt\" \"bib\" == \"file.txt.bib\" ) == ( LP.addExtension \"file.txt\" \"bib\" == \"file.txt.bib\" )", property $ ( P.addExtension "file.txt" "bib" == "file.txt.bib" ) == ( LP.addExtension "file.txt" "bib" == "file.txt.bib" )) ,("( W.addExtension \"file.txt\" \"bib\" == \"file.txt.bib\" ) == ( LW.addExtension \"file.txt\" \"bib\" == \"file.txt.bib\" )", property $ ( W.addExtension "file.txt" "bib" == "file.txt.bib" ) == ( LW.addExtension "file.txt" "bib" == "file.txt.bib" )) ,("( P.addExtension \"file.\" \".bib\" == \"file..bib\" ) == ( LP.addExtension \"file.\" \".bib\" == \"file..bib\" )", property $ ( P.addExtension "file." ".bib" == "file..bib" ) == ( LP.addExtension "file." ".bib" == "file..bib" )) ,("( W.addExtension \"file.\" \".bib\" == \"file..bib\" ) == ( LW.addExtension \"file.\" \".bib\" == \"file..bib\" )", property $ ( W.addExtension "file." ".bib" == "file..bib" ) == ( LW.addExtension "file." ".bib" == "file..bib" )) ,("( P.addExtension \"file\" \".bib\" == \"file.bib\" ) == ( LP.addExtension \"file\" \".bib\" == \"file.bib\" )", property $ ( P.addExtension "file" ".bib" == "file.bib" ) == ( LP.addExtension "file" ".bib" == "file.bib" )) ,("( W.addExtension \"file\" \".bib\" == \"file.bib\" ) == ( LW.addExtension \"file\" \".bib\" == \"file.bib\" )", property $ ( W.addExtension "file" ".bib" == "file.bib" ) == ( LW.addExtension "file" ".bib" == "file.bib" )) ,("( P.addExtension \"/\" \"x\" == \"/.x\" ) == ( LP.addExtension \"/\" \"x\" == \"/.x\" )", property $ ( P.addExtension "/" "x" == "/.x" ) == ( LP.addExtension "/" "x" == "/.x" )) ,("( W.addExtension \"/\" \"x\" == \"/.x\" ) == ( LW.addExtension \"/\" \"x\" == \"/.x\" )", property $ ( W.addExtension "/" "x" == "/.x" ) == ( LW.addExtension "/" "x" == "/.x" )) ,("( P.addExtension x \"\" == x ) == ( LP.addExtension x \"\" == x )", property $ \(QFilePath x) -> ( P.addExtension x "" == x ) == ( LP.addExtension x "" == x )) ,("( W.addExtension x \"\" == x ) == ( LW.addExtension x \"\" == x )", property $ \(QFilePath x) -> ( W.addExtension x "" == x ) == ( LW.addExtension x "" == x )) ,("( P.takeFileName (P.addExtension (P.addTrailingPathSeparator x) \"ext\") == \".ext\" ) == ( LP.takeFileName (LP.addExtension (LP.addTrailingPathSeparator x) \"ext\") == \".ext\" )", property $ \(QFilePathValidP x) -> ( P.takeFileName (P.addExtension (P.addTrailingPathSeparator x) "ext") == ".ext" ) == ( LP.takeFileName (LP.addExtension (LP.addTrailingPathSeparator x) "ext") == ".ext" )) ,("( W.takeFileName (W.addExtension (W.addTrailingPathSeparator x) \"ext\") == \".ext\" ) == ( LW.takeFileName (LW.addExtension (LW.addTrailingPathSeparator x) \"ext\") == \".ext\" )", property $ \(QFilePathValidW x) -> ( W.takeFileName (W.addExtension (W.addTrailingPathSeparator x) "ext") == ".ext" ) == ( LW.takeFileName (LW.addExtension (LW.addTrailingPathSeparator x) "ext") == ".ext" )) ,("( W.addExtension \"\\\\\\\\share\" \".txt\" == \"\\\\\\\\share\\\\.txt\" ) == ( LW.addExtension \"\\\\\\\\share\" \".txt\" == \"\\\\\\\\share\\\\.txt\" )", property $ ( W.addExtension "\\\\share" ".txt" == "\\\\share\\.txt" ) == ( LW.addExtension "\\\\share" ".txt" == "\\\\share\\.txt" )) ,("( P.hasExtension \"/directory/path.ext\" == True ) == ( LP.hasExtension \"/directory/path.ext\" == True )", property $ ( P.hasExtension "/directory/path.ext" == True ) == ( LP.hasExtension "/directory/path.ext" == True )) ,("( W.hasExtension \"/directory/path.ext\" == True ) == ( LW.hasExtension \"/directory/path.ext\" == True )", property $ ( W.hasExtension "/directory/path.ext" == True ) == ( LW.hasExtension "/directory/path.ext" == True )) ,("( P.hasExtension \"/directory/path\" == False ) == ( LP.hasExtension \"/directory/path\" == False )", property $ ( P.hasExtension "/directory/path" == False ) == ( LP.hasExtension "/directory/path" == False )) ,("( W.hasExtension \"/directory/path\" == False ) == ( LW.hasExtension \"/directory/path\" == False )", property $ ( W.hasExtension "/directory/path" == False ) == ( LW.hasExtension "/directory/path" == False )) ,("( null (P.takeExtension x) == not (P.hasExtension x) ) == ( null (LP.takeExtension x) == not (LP.hasExtension x) )", property $ \(QFilePath x) -> ( null (P.takeExtension x) == not (P.hasExtension x) ) == ( null (LP.takeExtension x) == not (LP.hasExtension x) )) ,("( null (W.takeExtension x) == not (W.hasExtension x) ) == ( null (LW.takeExtension x) == not (LW.hasExtension x) )", property $ \(QFilePath x) -> ( null (W.takeExtension x) == not (W.hasExtension x) ) == ( null (LW.takeExtension x) == not (LW.hasExtension x) )) ,("( \"png\" `P.isExtensionOf` \"/directory/file.png\" == True ) == ( \"png\" `LP.isExtensionOf` \"/directory/file.png\" == True )", property $ ( "png" `P.isExtensionOf` "/directory/file.png" == True ) == ( "png" `LP.isExtensionOf` "/directory/file.png" == True )) ,("( \"png\" `W.isExtensionOf` \"/directory/file.png\" == True ) == ( \"png\" `LW.isExtensionOf` \"/directory/file.png\" == True )", property $ ( "png" `W.isExtensionOf` "/directory/file.png" == True ) == ( "png" `LW.isExtensionOf` "/directory/file.png" == True )) ,("( \".png\" `P.isExtensionOf` \"/directory/file.png\" == True ) == ( \".png\" `LP.isExtensionOf` \"/directory/file.png\" == True )", property $ ( ".png" `P.isExtensionOf` "/directory/file.png" == True ) == ( ".png" `LP.isExtensionOf` "/directory/file.png" == True )) ,("( \".png\" `W.isExtensionOf` \"/directory/file.png\" == True ) == ( \".png\" `LW.isExtensionOf` \"/directory/file.png\" == True )", property $ ( ".png" `W.isExtensionOf` "/directory/file.png" == True ) == ( ".png" `LW.isExtensionOf` "/directory/file.png" == True )) ,("( \".tar.gz\" `P.isExtensionOf` \"bar/foo.tar.gz\" == True ) == ( \".tar.gz\" `LP.isExtensionOf` \"bar/foo.tar.gz\" == True )", property $ ( ".tar.gz" `P.isExtensionOf` "bar/foo.tar.gz" == True ) == ( ".tar.gz" `LP.isExtensionOf` "bar/foo.tar.gz" == True )) ,("( \".tar.gz\" `W.isExtensionOf` \"bar/foo.tar.gz\" == True ) == ( \".tar.gz\" `LW.isExtensionOf` \"bar/foo.tar.gz\" == True )", property $ ( ".tar.gz" `W.isExtensionOf` "bar/foo.tar.gz" == True ) == ( ".tar.gz" `LW.isExtensionOf` "bar/foo.tar.gz" == True )) ,("( \"ar.gz\" `P.isExtensionOf` \"bar/foo.tar.gz\" == False ) == ( \"ar.gz\" `LP.isExtensionOf` \"bar/foo.tar.gz\" == False )", property $ ( "ar.gz" `P.isExtensionOf` "bar/foo.tar.gz" == False ) == ( "ar.gz" `LP.isExtensionOf` "bar/foo.tar.gz" == False )) ,("( \"ar.gz\" `W.isExtensionOf` \"bar/foo.tar.gz\" == False ) == ( \"ar.gz\" `LW.isExtensionOf` \"bar/foo.tar.gz\" == False )", property $ ( "ar.gz" `W.isExtensionOf` "bar/foo.tar.gz" == False ) == ( "ar.gz" `LW.isExtensionOf` "bar/foo.tar.gz" == False )) ,("( \"png\" `P.isExtensionOf` \"/directory/file.png.jpg\" == False ) == ( \"png\" `LP.isExtensionOf` \"/directory/file.png.jpg\" == False )", property $ ( "png" `P.isExtensionOf` "/directory/file.png.jpg" == False ) == ( "png" `LP.isExtensionOf` "/directory/file.png.jpg" == False )) ,("( \"png\" `W.isExtensionOf` \"/directory/file.png.jpg\" == False ) == ( \"png\" `LW.isExtensionOf` \"/directory/file.png.jpg\" == False )", property $ ( "png" `W.isExtensionOf` "/directory/file.png.jpg" == False ) == ( "png" `LW.isExtensionOf` "/directory/file.png.jpg" == False )) ,("( \"csv/table.csv\" `P.isExtensionOf` \"/data/csv/table.csv\" == False ) == ( \"csv/table.csv\" `LP.isExtensionOf` \"/data/csv/table.csv\" == False )", property $ ( "csv/table.csv" `P.isExtensionOf` "/data/csv/table.csv" == False ) == ( "csv/table.csv" `LP.isExtensionOf` "/data/csv/table.csv" == False )) ,("( \"csv/table.csv\" `W.isExtensionOf` \"/data/csv/table.csv\" == False ) == ( \"csv/table.csv\" `LW.isExtensionOf` \"/data/csv/table.csv\" == False )", property $ ( "csv/table.csv" `W.isExtensionOf` "/data/csv/table.csv" == False ) == ( "csv/table.csv" `LW.isExtensionOf` "/data/csv/table.csv" == False )) ,("( P.stripExtension \"hs.o\" \"foo.x.hs.o\" == Just \"foo.x\" ) == ( LP.stripExtension \"hs.o\" \"foo.x.hs.o\" == Just \"foo.x\" )", property $ ( P.stripExtension "hs.o" "foo.x.hs.o" == Just "foo.x" ) == ( LP.stripExtension "hs.o" "foo.x.hs.o" == Just "foo.x" )) ,("( W.stripExtension \"hs.o\" \"foo.x.hs.o\" == Just \"foo.x\" ) == ( LW.stripExtension \"hs.o\" \"foo.x.hs.o\" == Just \"foo.x\" )", property $ ( W.stripExtension "hs.o" "foo.x.hs.o" == Just "foo.x" ) == ( LW.stripExtension "hs.o" "foo.x.hs.o" == Just "foo.x" )) ,("( P.stripExtension \"hi.o\" \"foo.x.hs.o\" == Nothing ) == ( LP.stripExtension \"hi.o\" \"foo.x.hs.o\" == Nothing )", property $ ( P.stripExtension "hi.o" "foo.x.hs.o" == Nothing ) == ( LP.stripExtension "hi.o" "foo.x.hs.o" == Nothing )) ,("( W.stripExtension \"hi.o\" \"foo.x.hs.o\" == Nothing ) == ( LW.stripExtension \"hi.o\" \"foo.x.hs.o\" == Nothing )", property $ ( W.stripExtension "hi.o" "foo.x.hs.o" == Nothing ) == ( LW.stripExtension "hi.o" "foo.x.hs.o" == Nothing )) ,("( P.dropExtension x == fromJust (P.stripExtension (P.takeExtension x) x) ) == ( LP.dropExtension x == fromJust (LP.stripExtension (LP.takeExtension x) x) )", property $ \(QFilePath x) -> ( P.dropExtension x == fromJust (P.stripExtension (P.takeExtension x) x) ) == ( LP.dropExtension x == fromJust (LP.stripExtension (LP.takeExtension x) x) )) ,("( W.dropExtension x == fromJust (W.stripExtension (W.takeExtension x) x) ) == ( LW.dropExtension x == fromJust (LW.stripExtension (LW.takeExtension x) x) )", property $ \(QFilePath x) -> ( W.dropExtension x == fromJust (W.stripExtension (W.takeExtension x) x) ) == ( LW.dropExtension x == fromJust (LW.stripExtension (LW.takeExtension x) x) )) ,("( P.dropExtensions x == fromJust (P.stripExtension (P.takeExtensions x) x) ) == ( LP.dropExtensions x == fromJust (LP.stripExtension (LP.takeExtensions x) x) )", property $ \(QFilePath x) -> ( P.dropExtensions x == fromJust (P.stripExtension (P.takeExtensions x) x) ) == ( LP.dropExtensions x == fromJust (LP.stripExtension (LP.takeExtensions x) x) )) ,("( W.dropExtensions x == fromJust (W.stripExtension (W.takeExtensions x) x) ) == ( LW.dropExtensions x == fromJust (LW.stripExtension (LW.takeExtensions x) x) )", property $ \(QFilePath x) -> ( W.dropExtensions x == fromJust (W.stripExtension (W.takeExtensions x) x) ) == ( LW.dropExtensions x == fromJust (LW.stripExtension (LW.takeExtensions x) x) )) ,("( P.stripExtension \".c.d\" \"a.b.c.d\" == Just \"a.b\" ) == ( LP.stripExtension \".c.d\" \"a.b.c.d\" == Just \"a.b\" )", property $ ( P.stripExtension ".c.d" "a.b.c.d" == Just "a.b" ) == ( LP.stripExtension ".c.d" "a.b.c.d" == Just "a.b" )) ,("( W.stripExtension \".c.d\" \"a.b.c.d\" == Just \"a.b\" ) == ( LW.stripExtension \".c.d\" \"a.b.c.d\" == Just \"a.b\" )", property $ ( W.stripExtension ".c.d" "a.b.c.d" == Just "a.b" ) == ( LW.stripExtension ".c.d" "a.b.c.d" == Just "a.b" )) ,("( P.stripExtension \".c.d\" \"a.b..c.d\" == Just \"a.b.\" ) == ( LP.stripExtension \".c.d\" \"a.b..c.d\" == Just \"a.b.\" )", property $ ( P.stripExtension ".c.d" "a.b..c.d" == Just "a.b." ) == ( LP.stripExtension ".c.d" "a.b..c.d" == Just "a.b." )) ,("( W.stripExtension \".c.d\" \"a.b..c.d\" == Just \"a.b.\" ) == ( LW.stripExtension \".c.d\" \"a.b..c.d\" == Just \"a.b.\" )", property $ ( W.stripExtension ".c.d" "a.b..c.d" == Just "a.b." ) == ( LW.stripExtension ".c.d" "a.b..c.d" == Just "a.b." )) ,("( P.stripExtension \"baz\" \"foo.bar\" == Nothing ) == ( LP.stripExtension \"baz\" \"foo.bar\" == Nothing )", property $ ( P.stripExtension "baz" "foo.bar" == Nothing ) == ( LP.stripExtension "baz" "foo.bar" == Nothing )) ,("( W.stripExtension \"baz\" \"foo.bar\" == Nothing ) == ( LW.stripExtension \"baz\" \"foo.bar\" == Nothing )", property $ ( W.stripExtension "baz" "foo.bar" == Nothing ) == ( LW.stripExtension "baz" "foo.bar" == Nothing )) ,("( P.stripExtension \"bar\" \"foobar\" == Nothing ) == ( LP.stripExtension \"bar\" \"foobar\" == Nothing )", property $ ( P.stripExtension "bar" "foobar" == Nothing ) == ( LP.stripExtension "bar" "foobar" == Nothing )) ,("( W.stripExtension \"bar\" \"foobar\" == Nothing ) == ( LW.stripExtension \"bar\" \"foobar\" == Nothing )", property $ ( W.stripExtension "bar" "foobar" == Nothing ) == ( LW.stripExtension "bar" "foobar" == Nothing )) ,("( P.stripExtension \"\" x == Just x ) == ( LP.stripExtension \"\" x == Just x )", property $ \(QFilePath x) -> ( P.stripExtension "" x == Just x ) == ( LP.stripExtension "" x == Just x )) ,("( W.stripExtension \"\" x == Just x ) == ( LW.stripExtension \"\" x == Just x )", property $ \(QFilePath x) -> ( W.stripExtension "" x == Just x ) == ( LW.stripExtension "" x == Just x )) ,("( P.splitExtensions \"/directory/path.ext\" == (\"/directory/path\", \".ext\") ) == ( LP.splitExtensions \"/directory/path.ext\" == (\"/directory/path\", \".ext\") )", property $ ( P.splitExtensions "/directory/path.ext" == ("/directory/path", ".ext") ) == ( LP.splitExtensions "/directory/path.ext" == ("/directory/path", ".ext") )) ,("( W.splitExtensions \"/directory/path.ext\" == (\"/directory/path\", \".ext\") ) == ( LW.splitExtensions \"/directory/path.ext\" == (\"/directory/path\", \".ext\") )", property $ ( W.splitExtensions "/directory/path.ext" == ("/directory/path", ".ext") ) == ( LW.splitExtensions "/directory/path.ext" == ("/directory/path", ".ext") )) ,("( P.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") ) == ( LP.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") )", property $ ( P.splitExtensions "file.tar.gz" == ("file", ".tar.gz") ) == ( LP.splitExtensions "file.tar.gz" == ("file", ".tar.gz") )) ,("( W.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") ) == ( LW.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") )", property $ ( W.splitExtensions "file.tar.gz" == ("file", ".tar.gz") ) == ( LW.splitExtensions "file.tar.gz" == ("file", ".tar.gz") )) ,("( uncurry (<>) (P.splitExtensions x) == x ) == ( uncurry (<>) (LP.splitExtensions x) == x )", property $ \(QFilePath x) -> ( uncurry (<>) (P.splitExtensions x) == x ) == ( uncurry (<>) (LP.splitExtensions x) == x )) ,("( uncurry (<>) (W.splitExtensions x) == x ) == ( uncurry (<>) (LW.splitExtensions x) == x )", property $ \(QFilePath x) -> ( uncurry (<>) (W.splitExtensions x) == x ) == ( uncurry (<>) (LW.splitExtensions x) == x )) ,("( uncurry P.addExtension (P.splitExtensions x) == x ) == ( uncurry LP.addExtension (LP.splitExtensions x) == x )", property $ \(QFilePathValidP x) -> ( uncurry P.addExtension (P.splitExtensions x) == x ) == ( uncurry LP.addExtension (LP.splitExtensions x) == x )) ,("( uncurry W.addExtension (W.splitExtensions x) == x ) == ( uncurry LW.addExtension (LW.splitExtensions x) == x )", property $ \(QFilePathValidW x) -> ( uncurry W.addExtension (W.splitExtensions x) == x ) == ( uncurry LW.addExtension (LW.splitExtensions x) == x )) ,("( P.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") ) == ( LP.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") )", property $ ( P.splitExtensions "file.tar.gz" == ("file", ".tar.gz") ) == ( LP.splitExtensions "file.tar.gz" == ("file", ".tar.gz") )) ,("( W.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") ) == ( LW.splitExtensions \"file.tar.gz\" == (\"file\", \".tar.gz\") )", property $ ( W.splitExtensions "file.tar.gz" == ("file", ".tar.gz") ) == ( LW.splitExtensions "file.tar.gz" == ("file", ".tar.gz") )) ,("( P.dropExtensions \"/directory/path.ext\" == \"/directory/path\" ) == ( LP.dropExtensions \"/directory/path.ext\" == \"/directory/path\" )", property $ ( P.dropExtensions "/directory/path.ext" == "/directory/path" ) == ( LP.dropExtensions "/directory/path.ext" == "/directory/path" )) ,("( W.dropExtensions \"/directory/path.ext\" == \"/directory/path\" ) == ( LW.dropExtensions \"/directory/path.ext\" == \"/directory/path\" )", property $ ( W.dropExtensions "/directory/path.ext" == "/directory/path" ) == ( LW.dropExtensions "/directory/path.ext" == "/directory/path" )) ,("( P.dropExtensions \"file.tar.gz\" == \"file\" ) == ( LP.dropExtensions \"file.tar.gz\" == \"file\" )", property $ ( P.dropExtensions "file.tar.gz" == "file" ) == ( LP.dropExtensions "file.tar.gz" == "file" )) ,("( W.dropExtensions \"file.tar.gz\" == \"file\" ) == ( LW.dropExtensions \"file.tar.gz\" == \"file\" )", property $ ( W.dropExtensions "file.tar.gz" == "file" ) == ( LW.dropExtensions "file.tar.gz" == "file" )) ,("( not $ P.hasExtension $ P.dropExtensions x ) == ( not $ LP.hasExtension $ LP.dropExtensions x )", property $ \(QFilePath x) -> ( not $ P.hasExtension $ P.dropExtensions x ) == ( not $ LP.hasExtension $ LP.dropExtensions x )) ,("( not $ W.hasExtension $ W.dropExtensions x ) == ( not $ LW.hasExtension $ LW.dropExtensions x )", property $ \(QFilePath x) -> ( not $ W.hasExtension $ W.dropExtensions x ) == ( not $ LW.hasExtension $ LW.dropExtensions x )) ,("( not $ any P.isExtSeparator $ P.takeFileName $ P.dropExtensions x ) == ( not $ any LP.isExtSeparator $ LP.takeFileName $ LP.dropExtensions x )", property $ \(QFilePath x) -> ( not $ any P.isExtSeparator $ P.takeFileName $ P.dropExtensions x ) == ( not $ any LP.isExtSeparator $ LP.takeFileName $ LP.dropExtensions x )) ,("( not $ any W.isExtSeparator $ W.takeFileName $ W.dropExtensions x ) == ( not $ any LW.isExtSeparator $ LW.takeFileName $ LW.dropExtensions x )", property $ \(QFilePath x) -> ( not $ any W.isExtSeparator $ W.takeFileName $ W.dropExtensions x ) == ( not $ any LW.isExtSeparator $ LW.takeFileName $ LW.dropExtensions x )) ,("( P.takeExtensions \"/directory/path.ext\" == \".ext\" ) == ( LP.takeExtensions \"/directory/path.ext\" == \".ext\" )", property $ ( P.takeExtensions "/directory/path.ext" == ".ext" ) == ( LP.takeExtensions "/directory/path.ext" == ".ext" )) ,("( W.takeExtensions \"/directory/path.ext\" == \".ext\" ) == ( LW.takeExtensions \"/directory/path.ext\" == \".ext\" )", property $ ( W.takeExtensions "/directory/path.ext" == ".ext" ) == ( LW.takeExtensions "/directory/path.ext" == ".ext" )) ,("( P.takeExtensions \"file.tar.gz\" == \".tar.gz\" ) == ( LP.takeExtensions \"file.tar.gz\" == \".tar.gz\" )", property $ ( P.takeExtensions "file.tar.gz" == ".tar.gz" ) == ( LP.takeExtensions "file.tar.gz" == ".tar.gz" )) ,("( W.takeExtensions \"file.tar.gz\" == \".tar.gz\" ) == ( LW.takeExtensions \"file.tar.gz\" == \".tar.gz\" )", property $ ( W.takeExtensions "file.tar.gz" == ".tar.gz" ) == ( LW.takeExtensions "file.tar.gz" == ".tar.gz" )) ,("( P.replaceExtensions \"file.fred.bob\" \"txt\" == \"file.txt\" ) == ( LP.replaceExtensions \"file.fred.bob\" \"txt\" == \"file.txt\" )", property $ ( P.replaceExtensions "file.fred.bob" "txt" == "file.txt" ) == ( LP.replaceExtensions "file.fred.bob" "txt" == "file.txt" )) ,("( W.replaceExtensions \"file.fred.bob\" \"txt\" == \"file.txt\" ) == ( LW.replaceExtensions \"file.fred.bob\" \"txt\" == \"file.txt\" )", property $ ( W.replaceExtensions "file.fred.bob" "txt" == "file.txt" ) == ( LW.replaceExtensions "file.fred.bob" "txt" == "file.txt" )) ,("( P.replaceExtensions \"file.fred.bob\" \"tar.gz\" == \"file.tar.gz\" ) == ( LP.replaceExtensions \"file.fred.bob\" \"tar.gz\" == \"file.tar.gz\" )", property $ ( P.replaceExtensions "file.fred.bob" "tar.gz" == "file.tar.gz" ) == ( LP.replaceExtensions "file.fred.bob" "tar.gz" == "file.tar.gz" )) ,("( W.replaceExtensions \"file.fred.bob\" \"tar.gz\" == \"file.tar.gz\" ) == ( LW.replaceExtensions \"file.fred.bob\" \"tar.gz\" == \"file.tar.gz\" )", property $ ( W.replaceExtensions "file.fred.bob" "tar.gz" == "file.tar.gz" ) == ( LW.replaceExtensions "file.fred.bob" "tar.gz" == "file.tar.gz" )) ,("( uncurry (<>) (P.splitDrive x) == x ) == ( uncurry (<>) (LP.splitDrive x) == x )", property $ \(QFilePath x) -> ( uncurry (<>) (P.splitDrive x) == x ) == ( uncurry (<>) (LP.splitDrive x) == x )) ,("( uncurry (<>) (W.splitDrive x) == x ) == ( uncurry (<>) (LW.splitDrive x) == x )", property $ \(QFilePath x) -> ( uncurry (<>) (W.splitDrive x) == x ) == ( uncurry (<>) (LW.splitDrive x) == x )) ,("( W.splitDrive \"file\" == (\"\", \"file\") ) == ( LW.splitDrive \"file\" == (\"\", \"file\") )", property $ ( W.splitDrive "file" == ("", "file") ) == ( LW.splitDrive "file" == ("", "file") )) ,("( W.splitDrive \"c:/file\" == (\"c:/\", \"file\") ) == ( LW.splitDrive \"c:/file\" == (\"c:/\", \"file\") )", property $ ( W.splitDrive "c:/file" == ("c:/", "file") ) == ( LW.splitDrive "c:/file" == ("c:/", "file") )) ,("( W.splitDrive \"c:\\\\file\" == (\"c:\\\\\", \"file\") ) == ( LW.splitDrive \"c:\\\\file\" == (\"c:\\\\\", \"file\") )", property $ ( W.splitDrive "c:\\file" == ("c:\\", "file") ) == ( LW.splitDrive "c:\\file" == ("c:\\", "file") )) ,("( W.splitDrive \"\\\\\\\\shared\\\\test\" == (\"\\\\\\\\shared\\\\\", \"test\") ) == ( LW.splitDrive \"\\\\\\\\shared\\\\test\" == (\"\\\\\\\\shared\\\\\", \"test\") )", property $ ( W.splitDrive "\\\\shared\\test" == ("\\\\shared\\", "test") ) == ( LW.splitDrive "\\\\shared\\test" == ("\\\\shared\\", "test") )) ,("( W.splitDrive \"\\\\\\\\shared\" == (\"\\\\\\\\shared\", \"\") ) == ( LW.splitDrive \"\\\\\\\\shared\" == (\"\\\\\\\\shared\", \"\") )", property $ ( W.splitDrive "\\\\shared" == ("\\\\shared", "") ) == ( LW.splitDrive "\\\\shared" == ("\\\\shared", "") )) ,("( W.splitDrive \"\\\\\\\\?\\\\UNC\\\\shared\\\\file\" == (\"\\\\\\\\?\\\\UNC\\\\shared\\\\\", \"file\") ) == ( LW.splitDrive \"\\\\\\\\?\\\\UNC\\\\shared\\\\file\" == (\"\\\\\\\\?\\\\UNC\\\\shared\\\\\", \"file\") )", property $ ( W.splitDrive "\\\\?\\UNC\\shared\\file" == ("\\\\?\\UNC\\shared\\", "file") ) == ( LW.splitDrive "\\\\?\\UNC\\shared\\file" == ("\\\\?\\UNC\\shared\\", "file") )) ,("( W.splitDrive \"\\\\\\\\?\\\\UNCshared\\\\file\" == (\"\\\\\\\\?\\\\\", \"UNCshared\\\\file\") ) == ( LW.splitDrive \"\\\\\\\\?\\\\UNCshared\\\\file\" == (\"\\\\\\\\?\\\\\", \"UNCshared\\\\file\") )", property $ ( W.splitDrive "\\\\?\\UNCshared\\file" == ("\\\\?\\", "UNCshared\\file") ) == ( LW.splitDrive "\\\\?\\UNCshared\\file" == ("\\\\?\\", "UNCshared\\file") )) ,("( W.splitDrive \"\\\\\\\\?\\\\d:\\\\file\" == (\"\\\\\\\\?\\\\d:\\\\\", \"file\") ) == ( LW.splitDrive \"\\\\\\\\?\\\\d:\\\\file\" == (\"\\\\\\\\?\\\\d:\\\\\", \"file\") )", property $ ( W.splitDrive "\\\\?\\d:\\file" == ("\\\\?\\d:\\", "file") ) == ( LW.splitDrive "\\\\?\\d:\\file" == ("\\\\?\\d:\\", "file") )) ,("( W.splitDrive \"/d\" == (\"\", \"/d\") ) == ( LW.splitDrive \"/d\" == (\"\", \"/d\") )", property $ ( W.splitDrive "/d" == ("", "/d") ) == ( LW.splitDrive "/d" == ("", "/d") )) ,("( P.splitDrive \"/test\" == (\"/\", \"test\") ) == ( LP.splitDrive \"/test\" == (\"/\", \"test\") )", property $ ( P.splitDrive "/test" == ("/", "test") ) == ( LP.splitDrive "/test" == ("/", "test") )) ,("( P.splitDrive \"//test\" == (\"//\", \"test\") ) == ( LP.splitDrive \"//test\" == (\"//\", \"test\") )", property $ ( P.splitDrive "//test" == ("//", "test") ) == ( LP.splitDrive "//test" == ("//", "test") )) ,("( P.splitDrive \"test/file\" == (\"\", \"test/file\") ) == ( LP.splitDrive \"test/file\" == (\"\", \"test/file\") )", property $ ( P.splitDrive "test/file" == ("", "test/file") ) == ( LP.splitDrive "test/file" == ("", "test/file") )) ,("( P.splitDrive \"file\" == (\"\", \"file\") ) == ( LP.splitDrive \"file\" == (\"\", \"file\") )", property $ ( P.splitDrive "file" == ("", "file") ) == ( LP.splitDrive "file" == ("", "file") )) ,("( uncurry P.joinDrive (P.splitDrive x) == x ) == ( uncurry LP.joinDrive (LP.splitDrive x) == x )", property $ \(QFilePathValidP x) -> ( uncurry P.joinDrive (P.splitDrive x) == x ) == ( uncurry LP.joinDrive (LP.splitDrive x) == x )) ,("( uncurry W.joinDrive (W.splitDrive x) == x ) == ( uncurry LW.joinDrive (LW.splitDrive x) == x )", property $ \(QFilePathValidW x) -> ( uncurry W.joinDrive (W.splitDrive x) == x ) == ( uncurry LW.joinDrive (LW.splitDrive x) == x )) ,("( W.joinDrive \"C:\" \"foo\" == \"C:foo\" ) == ( LW.joinDrive \"C:\" \"foo\" == \"C:foo\" )", property $ ( W.joinDrive "C:" "foo" == "C:foo" ) == ( LW.joinDrive "C:" "foo" == "C:foo" )) ,("( W.joinDrive \"C:\\\\\" \"bar\" == \"C:\\\\bar\" ) == ( LW.joinDrive \"C:\\\\\" \"bar\" == \"C:\\\\bar\" )", property $ ( W.joinDrive "C:\\" "bar" == "C:\\bar" ) == ( LW.joinDrive "C:\\" "bar" == "C:\\bar" )) ,("( W.joinDrive \"\\\\\\\\share\" \"foo\" == \"\\\\\\\\share\\\\foo\" ) == ( LW.joinDrive \"\\\\\\\\share\" \"foo\" == \"\\\\\\\\share\\\\foo\" )", property $ ( W.joinDrive "\\\\share" "foo" == "\\\\share\\foo" ) == ( LW.joinDrive "\\\\share" "foo" == "\\\\share\\foo" )) ,("( W.joinDrive \"/:\" \"foo\" == \"/:\\\\foo\" ) == ( LW.joinDrive \"/:\" \"foo\" == \"/:\\\\foo\" )", property $ ( W.joinDrive "/:" "foo" == "/:\\foo" ) == ( LW.joinDrive "/:" "foo" == "/:\\foo" )) ,("( P.takeDrive x == fst (P.splitDrive x) ) == ( LP.takeDrive x == fst (LP.splitDrive x) )", property $ \(QFilePath x) -> ( P.takeDrive x == fst (P.splitDrive x) ) == ( LP.takeDrive x == fst (LP.splitDrive x) )) ,("( W.takeDrive x == fst (W.splitDrive x) ) == ( LW.takeDrive x == fst (LW.splitDrive x) )", property $ \(QFilePath x) -> ( W.takeDrive x == fst (W.splitDrive x) ) == ( LW.takeDrive x == fst (LW.splitDrive x) )) ,("( P.dropDrive x == snd (P.splitDrive x) ) == ( LP.dropDrive x == snd (LP.splitDrive x) )", property $ \(QFilePath x) -> ( P.dropDrive x == snd (P.splitDrive x) ) == ( LP.dropDrive x == snd (LP.splitDrive x) )) ,("( W.dropDrive x == snd (W.splitDrive x) ) == ( LW.dropDrive x == snd (LW.splitDrive x) )", property $ \(QFilePath x) -> ( W.dropDrive x == snd (W.splitDrive x) ) == ( LW.dropDrive x == snd (LW.splitDrive x) )) ,("( not (P.hasDrive x) == null (P.takeDrive x) ) == ( not (LP.hasDrive x) == null (LP.takeDrive x) )", property $ \(QFilePath x) -> ( not (P.hasDrive x) == null (P.takeDrive x) ) == ( not (LP.hasDrive x) == null (LP.takeDrive x) )) ,("( not (W.hasDrive x) == null (W.takeDrive x) ) == ( not (LW.hasDrive x) == null (LW.takeDrive x) )", property $ \(QFilePath x) -> ( not (W.hasDrive x) == null (W.takeDrive x) ) == ( not (LW.hasDrive x) == null (LW.takeDrive x) )) ,("( P.hasDrive \"/foo\" == True ) == ( LP.hasDrive \"/foo\" == True )", property $ ( P.hasDrive "/foo" == True ) == ( LP.hasDrive "/foo" == True )) ,("( W.hasDrive \"C:\\\\foo\" == True ) == ( LW.hasDrive \"C:\\\\foo\" == True )", property $ ( W.hasDrive "C:\\foo" == True ) == ( LW.hasDrive "C:\\foo" == True )) ,("( W.hasDrive \"C:foo\" == True ) == ( LW.hasDrive \"C:foo\" == True )", property $ ( W.hasDrive "C:foo" == True ) == ( LW.hasDrive "C:foo" == True )) ,("( P.hasDrive \"foo\" == False ) == ( LP.hasDrive \"foo\" == False )", property $ ( P.hasDrive "foo" == False ) == ( LP.hasDrive "foo" == False )) ,("( W.hasDrive \"foo\" == False ) == ( LW.hasDrive \"foo\" == False )", property $ ( W.hasDrive "foo" == False ) == ( LW.hasDrive "foo" == False )) ,("( P.hasDrive \"\" == False ) == ( LP.hasDrive \"\" == False )", property $ ( P.hasDrive "" == False ) == ( LP.hasDrive "" == False )) ,("( W.hasDrive \"\" == False ) == ( LW.hasDrive \"\" == False )", property $ ( W.hasDrive "" == False ) == ( LW.hasDrive "" == False )) ,("( P.isDrive \"/\" == True ) == ( LP.isDrive \"/\" == True )", property $ ( P.isDrive "/" == True ) == ( LP.isDrive "/" == True )) ,("( P.isDrive \"/foo\" == False ) == ( LP.isDrive \"/foo\" == False )", property $ ( P.isDrive "/foo" == False ) == ( LP.isDrive "/foo" == False )) ,("( W.isDrive \"C:\\\\\" == True ) == ( LW.isDrive \"C:\\\\\" == True )", property $ ( W.isDrive "C:\\" == True ) == ( LW.isDrive "C:\\" == True )) ,("( W.isDrive \"C:\\\\foo\" == False ) == ( LW.isDrive \"C:\\\\foo\" == False )", property $ ( W.isDrive "C:\\foo" == False ) == ( LW.isDrive "C:\\foo" == False )) ,("( P.isDrive \"\" == False ) == ( LP.isDrive \"\" == False )", property $ ( P.isDrive "" == False ) == ( LP.isDrive "" == False )) ,("( W.isDrive \"\" == False ) == ( LW.isDrive \"\" == False )", property $ ( W.isDrive "" == False ) == ( LW.isDrive "" == False )) ,("( P.splitFileName \"/directory/file.ext\" == (\"/directory/\", \"file.ext\") ) == ( LP.splitFileName \"/directory/file.ext\" == (\"/directory/\", \"file.ext\") )", property $ ( P.splitFileName "/directory/file.ext" == ("/directory/", "file.ext") ) == ( LP.splitFileName "/directory/file.ext" == ("/directory/", "file.ext") )) ,("( W.splitFileName \"/directory/file.ext\" == (\"/directory/\", \"file.ext\") ) == ( LW.splitFileName \"/directory/file.ext\" == (\"/directory/\", \"file.ext\") )", property $ ( W.splitFileName "/directory/file.ext" == ("/directory/", "file.ext") ) == ( LW.splitFileName "/directory/file.ext" == ("/directory/", "file.ext") )) ,("( uncurry (P.) (P.splitFileName x) == x || fst (P.splitFileName x) == \"./\" ) == ( uncurry (LP.) (LP.splitFileName x) == x || fst (LP.splitFileName x) == \"./\" )", property $ \(QFilePathValidP x) -> ( uncurry (P.) (P.splitFileName x) == x || fst (P.splitFileName x) == "./" ) == ( uncurry (LP.) (LP.splitFileName x) == x || fst (LP.splitFileName x) == "./" )) ,("( uncurry (W.) (W.splitFileName x) == x || fst (W.splitFileName x) == \"./\" ) == ( uncurry (LW.) (LW.splitFileName x) == x || fst (LW.splitFileName x) == \"./\" )", property $ \(QFilePathValidW x) -> ( uncurry (W.) (W.splitFileName x) == x || fst (W.splitFileName x) == "./" ) == ( uncurry (LW.) (LW.splitFileName x) == x || fst (LW.splitFileName x) == "./" )) ,("( P.isValid (fst (P.splitFileName x)) ) == ( LP.isValid (fst (LP.splitFileName x)) )", property $ \(QFilePathValidP x) -> ( P.isValid (fst (P.splitFileName x)) ) == ( LP.isValid (fst (LP.splitFileName x)) )) ,("( W.isValid (fst (W.splitFileName x)) ) == ( LW.isValid (fst (LW.splitFileName x)) )", property $ \(QFilePathValidW x) -> ( W.isValid (fst (W.splitFileName x)) ) == ( LW.isValid (fst (LW.splitFileName x)) )) ,("( P.splitFileName \"file/bob.txt\" == (\"file/\", \"bob.txt\") ) == ( LP.splitFileName \"file/bob.txt\" == (\"file/\", \"bob.txt\") )", property $ ( P.splitFileName "file/bob.txt" == ("file/", "bob.txt") ) == ( LP.splitFileName "file/bob.txt" == ("file/", "bob.txt") )) ,("( W.splitFileName \"file/bob.txt\" == (\"file/\", \"bob.txt\") ) == ( LW.splitFileName \"file/bob.txt\" == (\"file/\", \"bob.txt\") )", property $ ( W.splitFileName "file/bob.txt" == ("file/", "bob.txt") ) == ( LW.splitFileName "file/bob.txt" == ("file/", "bob.txt") )) ,("( P.splitFileName \"file/\" == (\"file/\", \"\") ) == ( LP.splitFileName \"file/\" == (\"file/\", \"\") )", property $ ( P.splitFileName "file/" == ("file/", "") ) == ( LP.splitFileName "file/" == ("file/", "") )) ,("( W.splitFileName \"file/\" == (\"file/\", \"\") ) == ( LW.splitFileName \"file/\" == (\"file/\", \"\") )", property $ ( W.splitFileName "file/" == ("file/", "") ) == ( LW.splitFileName "file/" == ("file/", "") )) ,("( P.splitFileName \"bob\" == (\"./\", \"bob\") ) == ( LP.splitFileName \"bob\" == (\"./\", \"bob\") )", property $ ( P.splitFileName "bob" == ("./", "bob") ) == ( LP.splitFileName "bob" == ("./", "bob") )) ,("( W.splitFileName \"bob\" == (\"./\", \"bob\") ) == ( LW.splitFileName \"bob\" == (\"./\", \"bob\") )", property $ ( W.splitFileName "bob" == ("./", "bob") ) == ( LW.splitFileName "bob" == ("./", "bob") )) ,("( P.splitFileName \"/\" == (\"/\", \"\") ) == ( LP.splitFileName \"/\" == (\"/\", \"\") )", property $ ( P.splitFileName "/" == ("/", "") ) == ( LP.splitFileName "/" == ("/", "") )) ,("( W.splitFileName \"c:\" == (\"c:\", \"\") ) == ( LW.splitFileName \"c:\" == (\"c:\", \"\") )", property $ ( W.splitFileName "c:" == ("c:", "") ) == ( LW.splitFileName "c:" == ("c:", "") )) ,("( P.replaceFileName \"/directory/other.txt\" \"file.ext\" == \"/directory/file.ext\" ) == ( LP.replaceFileName \"/directory/other.txt\" \"file.ext\" == \"/directory/file.ext\" )", property $ ( P.replaceFileName "/directory/other.txt" "file.ext" == "/directory/file.ext" ) == ( LP.replaceFileName "/directory/other.txt" "file.ext" == "/directory/file.ext" )) ,("( W.replaceFileName \"/directory/other.txt\" \"file.ext\" == \"/directory/file.ext\" ) == ( LW.replaceFileName \"/directory/other.txt\" \"file.ext\" == \"/directory/file.ext\" )", property $ ( W.replaceFileName "/directory/other.txt" "file.ext" == "/directory/file.ext" ) == ( LW.replaceFileName "/directory/other.txt" "file.ext" == "/directory/file.ext" )) ,("( P.replaceFileName x (P.takeFileName x) == x ) == ( LP.replaceFileName x (LP.takeFileName x) == x )", property $ \(QFilePathValidP x) -> ( P.replaceFileName x (P.takeFileName x) == x ) == ( LP.replaceFileName x (LP.takeFileName x) == x )) ,("( W.replaceFileName x (W.takeFileName x) == x ) == ( LW.replaceFileName x (LW.takeFileName x) == x )", property $ \(QFilePathValidW x) -> ( W.replaceFileName x (W.takeFileName x) == x ) == ( LW.replaceFileName x (LW.takeFileName x) == x )) ,("( P.dropFileName \"/directory/file.ext\" == \"/directory/\" ) == ( LP.dropFileName \"/directory/file.ext\" == \"/directory/\" )", property $ ( P.dropFileName "/directory/file.ext" == "/directory/" ) == ( LP.dropFileName "/directory/file.ext" == "/directory/" )) ,("( W.dropFileName \"/directory/file.ext\" == \"/directory/\" ) == ( LW.dropFileName \"/directory/file.ext\" == \"/directory/\" )", property $ ( W.dropFileName "/directory/file.ext" == "/directory/" ) == ( LW.dropFileName "/directory/file.ext" == "/directory/" )) ,("( P.dropFileName x == fst (P.splitFileName x) ) == ( LP.dropFileName x == fst (LP.splitFileName x) )", property $ \(QFilePath x) -> ( P.dropFileName x == fst (P.splitFileName x) ) == ( LP.dropFileName x == fst (LP.splitFileName x) )) ,("( W.dropFileName x == fst (W.splitFileName x) ) == ( LW.dropFileName x == fst (LW.splitFileName x) )", property $ \(QFilePath x) -> ( W.dropFileName x == fst (W.splitFileName x) ) == ( LW.dropFileName x == fst (LW.splitFileName x) )) ,("( P.takeFileName \"/directory/file.ext\" == \"file.ext\" ) == ( LP.takeFileName \"/directory/file.ext\" == \"file.ext\" )", property $ ( P.takeFileName "/directory/file.ext" == "file.ext" ) == ( LP.takeFileName "/directory/file.ext" == "file.ext" )) ,("( W.takeFileName \"/directory/file.ext\" == \"file.ext\" ) == ( LW.takeFileName \"/directory/file.ext\" == \"file.ext\" )", property $ ( W.takeFileName "/directory/file.ext" == "file.ext" ) == ( LW.takeFileName "/directory/file.ext" == "file.ext" )) ,("( P.takeFileName \"test/\" == \"\" ) == ( LP.takeFileName \"test/\" == \"\" )", property $ ( P.takeFileName "test/" == "" ) == ( LP.takeFileName "test/" == "" )) ,("( W.takeFileName \"test/\" == \"\" ) == ( LW.takeFileName \"test/\" == \"\" )", property $ ( W.takeFileName "test/" == "" ) == ( LW.takeFileName "test/" == "" )) ,("( isSuffixOf (P.takeFileName x) x ) == ( isSuffixOf (LP.takeFileName x) x )", property $ \(QFilePath x) -> ( isSuffixOf (P.takeFileName x) x ) == ( isSuffixOf (LP.takeFileName x) x )) ,("( isSuffixOf (W.takeFileName x) x ) == ( isSuffixOf (LW.takeFileName x) x )", property $ \(QFilePath x) -> ( isSuffixOf (W.takeFileName x) x ) == ( isSuffixOf (LW.takeFileName x) x )) ,("( P.takeFileName x == snd (P.splitFileName x) ) == ( LP.takeFileName x == snd (LP.splitFileName x) )", property $ \(QFilePath x) -> ( P.takeFileName x == snd (P.splitFileName x) ) == ( LP.takeFileName x == snd (LP.splitFileName x) )) ,("( W.takeFileName x == snd (W.splitFileName x) ) == ( LW.takeFileName x == snd (LW.splitFileName x) )", property $ \(QFilePath x) -> ( W.takeFileName x == snd (W.splitFileName x) ) == ( LW.takeFileName x == snd (LW.splitFileName x) )) ,("( P.takeFileName (P.replaceFileName x \"fred\") == \"fred\" ) == ( LP.takeFileName (LP.replaceFileName x \"fred\") == \"fred\" )", property $ \(QFilePathValidP x) -> ( P.takeFileName (P.replaceFileName x "fred") == "fred" ) == ( LP.takeFileName (LP.replaceFileName x "fred") == "fred" )) ,("( W.takeFileName (W.replaceFileName x \"fred\") == \"fred\" ) == ( LW.takeFileName (LW.replaceFileName x \"fred\") == \"fred\" )", property $ \(QFilePathValidW x) -> ( W.takeFileName (W.replaceFileName x "fred") == "fred" ) == ( LW.takeFileName (LW.replaceFileName x "fred") == "fred" )) ,("( P.takeFileName (x P. \"fred\") == \"fred\" ) == ( LP.takeFileName (x LP. \"fred\") == \"fred\" )", property $ \(QFilePathValidP x) -> ( P.takeFileName (x P. "fred") == "fred" ) == ( LP.takeFileName (x LP. "fred") == "fred" )) ,("( W.takeFileName (x W. \"fred\") == \"fred\" ) == ( LW.takeFileName (x LW. \"fred\") == \"fred\" )", property $ \(QFilePathValidW x) -> ( W.takeFileName (x W. "fred") == "fred" ) == ( LW.takeFileName (x LW. "fred") == "fred" )) ,("( P.isRelative (P.takeFileName x) ) == ( LP.isRelative (LP.takeFileName x) )", property $ \(QFilePathValidP x) -> ( P.isRelative (P.takeFileName x) ) == ( LP.isRelative (LP.takeFileName x) )) ,("( W.isRelative (W.takeFileName x) ) == ( LW.isRelative (LW.takeFileName x) )", property $ \(QFilePathValidW x) -> ( W.isRelative (W.takeFileName x) ) == ( LW.isRelative (LW.takeFileName x) )) ,("( P.takeBaseName \"/directory/file.ext\" == \"file\" ) == ( LP.takeBaseName \"/directory/file.ext\" == \"file\" )", property $ ( P.takeBaseName "/directory/file.ext" == "file" ) == ( LP.takeBaseName "/directory/file.ext" == "file" )) ,("( W.takeBaseName \"/directory/file.ext\" == \"file\" ) == ( LW.takeBaseName \"/directory/file.ext\" == \"file\" )", property $ ( W.takeBaseName "/directory/file.ext" == "file" ) == ( LW.takeBaseName "/directory/file.ext" == "file" )) ,("( P.takeBaseName \"file/test.txt\" == \"test\" ) == ( LP.takeBaseName \"file/test.txt\" == \"test\" )", property $ ( P.takeBaseName "file/test.txt" == "test" ) == ( LP.takeBaseName "file/test.txt" == "test" )) ,("( W.takeBaseName \"file/test.txt\" == \"test\" ) == ( LW.takeBaseName \"file/test.txt\" == \"test\" )", property $ ( W.takeBaseName "file/test.txt" == "test" ) == ( LW.takeBaseName "file/test.txt" == "test" )) ,("( P.takeBaseName \"dave.ext\" == \"dave\" ) == ( LP.takeBaseName \"dave.ext\" == \"dave\" )", property $ ( P.takeBaseName "dave.ext" == "dave" ) == ( LP.takeBaseName "dave.ext" == "dave" )) ,("( W.takeBaseName \"dave.ext\" == \"dave\" ) == ( LW.takeBaseName \"dave.ext\" == \"dave\" )", property $ ( W.takeBaseName "dave.ext" == "dave" ) == ( LW.takeBaseName "dave.ext" == "dave" )) ,("( P.takeBaseName \"\" == \"\" ) == ( LP.takeBaseName \"\" == \"\" )", property $ ( P.takeBaseName "" == "" ) == ( LP.takeBaseName "" == "" )) ,("( W.takeBaseName \"\" == \"\" ) == ( LW.takeBaseName \"\" == \"\" )", property $ ( W.takeBaseName "" == "" ) == ( LW.takeBaseName "" == "" )) ,("( P.takeBaseName \"test\" == \"test\" ) == ( LP.takeBaseName \"test\" == \"test\" )", property $ ( P.takeBaseName "test" == "test" ) == ( LP.takeBaseName "test" == "test" )) ,("( W.takeBaseName \"test\" == \"test\" ) == ( LW.takeBaseName \"test\" == \"test\" )", property $ ( W.takeBaseName "test" == "test" ) == ( LW.takeBaseName "test" == "test" )) ,("( P.takeBaseName (P.addTrailingPathSeparator x) == \"\" ) == ( LP.takeBaseName (LP.addTrailingPathSeparator x) == \"\" )", property $ \(QFilePath x) -> ( P.takeBaseName (P.addTrailingPathSeparator x) == "" ) == ( LP.takeBaseName (LP.addTrailingPathSeparator x) == "" )) ,("( W.takeBaseName (W.addTrailingPathSeparator x) == \"\" ) == ( LW.takeBaseName (LW.addTrailingPathSeparator x) == \"\" )", property $ \(QFilePath x) -> ( W.takeBaseName (W.addTrailingPathSeparator x) == "" ) == ( LW.takeBaseName (LW.addTrailingPathSeparator x) == "" )) ,("( P.takeBaseName \"file/file.tar.gz\" == \"file.tar\" ) == ( LP.takeBaseName \"file/file.tar.gz\" == \"file.tar\" )", property $ ( P.takeBaseName "file/file.tar.gz" == "file.tar" ) == ( LP.takeBaseName "file/file.tar.gz" == "file.tar" )) ,("( W.takeBaseName \"file/file.tar.gz\" == \"file.tar\" ) == ( LW.takeBaseName \"file/file.tar.gz\" == \"file.tar\" )", property $ ( W.takeBaseName "file/file.tar.gz" == "file.tar" ) == ( LW.takeBaseName "file/file.tar.gz" == "file.tar" )) ,("( P.replaceBaseName \"/directory/other.ext\" \"file\" == \"/directory/file.ext\" ) == ( LP.replaceBaseName \"/directory/other.ext\" \"file\" == \"/directory/file.ext\" )", property $ ( P.replaceBaseName "/directory/other.ext" "file" == "/directory/file.ext" ) == ( LP.replaceBaseName "/directory/other.ext" "file" == "/directory/file.ext" )) ,("( W.replaceBaseName \"/directory/other.ext\" \"file\" == \"/directory/file.ext\" ) == ( LW.replaceBaseName \"/directory/other.ext\" \"file\" == \"/directory/file.ext\" )", property $ ( W.replaceBaseName "/directory/other.ext" "file" == "/directory/file.ext" ) == ( LW.replaceBaseName "/directory/other.ext" "file" == "/directory/file.ext" )) ,("( P.replaceBaseName \"file/test.txt\" \"bob\" == \"file/bob.txt\" ) == ( LP.replaceBaseName \"file/test.txt\" \"bob\" == \"file/bob.txt\" )", property $ ( P.replaceBaseName "file/test.txt" "bob" == "file/bob.txt" ) == ( LP.replaceBaseName "file/test.txt" "bob" == "file/bob.txt" )) ,("( W.replaceBaseName \"file/test.txt\" \"bob\" == \"file/bob.txt\" ) == ( LW.replaceBaseName \"file/test.txt\" \"bob\" == \"file/bob.txt\" )", property $ ( W.replaceBaseName "file/test.txt" "bob" == "file/bob.txt" ) == ( LW.replaceBaseName "file/test.txt" "bob" == "file/bob.txt" )) ,("( P.replaceBaseName \"fred\" \"bill\" == \"bill\" ) == ( LP.replaceBaseName \"fred\" \"bill\" == \"bill\" )", property $ ( P.replaceBaseName "fred" "bill" == "bill" ) == ( LP.replaceBaseName "fred" "bill" == "bill" )) ,("( W.replaceBaseName \"fred\" \"bill\" == \"bill\" ) == ( LW.replaceBaseName \"fred\" \"bill\" == \"bill\" )", property $ ( W.replaceBaseName "fred" "bill" == "bill" ) == ( LW.replaceBaseName "fred" "bill" == "bill" )) ,("( P.replaceBaseName \"/dave/fred/bob.gz.tar\" \"new\" == \"/dave/fred/new.tar\" ) == ( LP.replaceBaseName \"/dave/fred/bob.gz.tar\" \"new\" == \"/dave/fred/new.tar\" )", property $ ( P.replaceBaseName "/dave/fred/bob.gz.tar" "new" == "/dave/fred/new.tar" ) == ( LP.replaceBaseName "/dave/fred/bob.gz.tar" "new" == "/dave/fred/new.tar" )) ,("( W.replaceBaseName \"/dave/fred/bob.gz.tar\" \"new\" == \"/dave/fred/new.tar\" ) == ( LW.replaceBaseName \"/dave/fred/bob.gz.tar\" \"new\" == \"/dave/fred/new.tar\" )", property $ ( W.replaceBaseName "/dave/fred/bob.gz.tar" "new" == "/dave/fred/new.tar" ) == ( LW.replaceBaseName "/dave/fred/bob.gz.tar" "new" == "/dave/fred/new.tar" )) ,("( P.replaceBaseName x (P.takeBaseName x) == x ) == ( LP.replaceBaseName x (LP.takeBaseName x) == x )", property $ \(QFilePathValidP x) -> ( P.replaceBaseName x (P.takeBaseName x) == x ) == ( LP.replaceBaseName x (LP.takeBaseName x) == x )) ,("( W.replaceBaseName x (W.takeBaseName x) == x ) == ( LW.replaceBaseName x (LW.takeBaseName x) == x )", property $ \(QFilePathValidW x) -> ( W.replaceBaseName x (W.takeBaseName x) == x ) == ( LW.replaceBaseName x (LW.takeBaseName x) == x )) ,("( P.hasTrailingPathSeparator \"test\" == False ) == ( LP.hasTrailingPathSeparator \"test\" == False )", property $ ( P.hasTrailingPathSeparator "test" == False ) == ( LP.hasTrailingPathSeparator "test" == False )) ,("( W.hasTrailingPathSeparator \"test\" == False ) == ( LW.hasTrailingPathSeparator \"test\" == False )", property $ ( W.hasTrailingPathSeparator "test" == False ) == ( LW.hasTrailingPathSeparator "test" == False )) ,("( P.hasTrailingPathSeparator \"test/\" == True ) == ( LP.hasTrailingPathSeparator \"test/\" == True )", property $ ( P.hasTrailingPathSeparator "test/" == True ) == ( LP.hasTrailingPathSeparator "test/" == True )) ,("( W.hasTrailingPathSeparator \"test/\" == True ) == ( LW.hasTrailingPathSeparator \"test/\" == True )", property $ ( W.hasTrailingPathSeparator "test/" == True ) == ( LW.hasTrailingPathSeparator "test/" == True )) ,("( P.hasTrailingPathSeparator (P.addTrailingPathSeparator x) ) == ( LP.hasTrailingPathSeparator (LP.addTrailingPathSeparator x) )", property $ \(QFilePath x) -> ( P.hasTrailingPathSeparator (P.addTrailingPathSeparator x) ) == ( LP.hasTrailingPathSeparator (LP.addTrailingPathSeparator x) )) ,("( W.hasTrailingPathSeparator (W.addTrailingPathSeparator x) ) == ( LW.hasTrailingPathSeparator (LW.addTrailingPathSeparator x) )", property $ \(QFilePath x) -> ( W.hasTrailingPathSeparator (W.addTrailingPathSeparator x) ) == ( LW.hasTrailingPathSeparator (LW.addTrailingPathSeparator x) )) ,("( P.hasTrailingPathSeparator x ==> P.addTrailingPathSeparator x == x ) == ( LP.hasTrailingPathSeparator x ==> LP.addTrailingPathSeparator x == x )", property $ \(QFilePath x) -> ( P.hasTrailingPathSeparator x ==> P.addTrailingPathSeparator x == x ) == ( LP.hasTrailingPathSeparator x ==> LP.addTrailingPathSeparator x == x )) ,("( W.hasTrailingPathSeparator x ==> W.addTrailingPathSeparator x == x ) == ( LW.hasTrailingPathSeparator x ==> LW.addTrailingPathSeparator x == x )", property $ \(QFilePath x) -> ( W.hasTrailingPathSeparator x ==> W.addTrailingPathSeparator x == x ) == ( LW.hasTrailingPathSeparator x ==> LW.addTrailingPathSeparator x == x )) ,("( P.addTrailingPathSeparator \"test/rest\" == \"test/rest/\" ) == ( LP.addTrailingPathSeparator \"test/rest\" == \"test/rest/\" )", property $ ( P.addTrailingPathSeparator "test/rest" == "test/rest/" ) == ( LP.addTrailingPathSeparator "test/rest" == "test/rest/" )) ,("( P.dropTrailingPathSeparator \"file/test/\" == \"file/test\" ) == ( LP.dropTrailingPathSeparator \"file/test/\" == \"file/test\" )", property $ ( P.dropTrailingPathSeparator "file/test/" == "file/test" ) == ( LP.dropTrailingPathSeparator "file/test/" == "file/test" )) ,("( W.dropTrailingPathSeparator \"file/test/\" == \"file/test\" ) == ( LW.dropTrailingPathSeparator \"file/test/\" == \"file/test\" )", property $ ( W.dropTrailingPathSeparator "file/test/" == "file/test" ) == ( LW.dropTrailingPathSeparator "file/test/" == "file/test" )) ,("( P.dropTrailingPathSeparator \"/\" == \"/\" ) == ( LP.dropTrailingPathSeparator \"/\" == \"/\" )", property $ ( P.dropTrailingPathSeparator "/" == "/" ) == ( LP.dropTrailingPathSeparator "/" == "/" )) ,("( W.dropTrailingPathSeparator \"/\" == \"/\" ) == ( LW.dropTrailingPathSeparator \"/\" == \"/\" )", property $ ( W.dropTrailingPathSeparator "/" == "/" ) == ( LW.dropTrailingPathSeparator "/" == "/" )) ,("( W.dropTrailingPathSeparator \"\\\\\" == \"\\\\\" ) == ( LW.dropTrailingPathSeparator \"\\\\\" == \"\\\\\" )", property $ ( W.dropTrailingPathSeparator "\\" == "\\" ) == ( LW.dropTrailingPathSeparator "\\" == "\\" )) ,("( not (P.hasTrailingPathSeparator (P.dropTrailingPathSeparator x)) || P.isDrive x ) == ( not (LP.hasTrailingPathSeparator (LP.dropTrailingPathSeparator x)) || LP.isDrive x )", property $ \(QFilePath x) -> ( not (P.hasTrailingPathSeparator (P.dropTrailingPathSeparator x)) || P.isDrive x ) == ( not (LP.hasTrailingPathSeparator (LP.dropTrailingPathSeparator x)) || LP.isDrive x )) ,("( P.takeDirectory \"/directory/other.ext\" == \"/directory\" ) == ( LP.takeDirectory \"/directory/other.ext\" == \"/directory\" )", property $ ( P.takeDirectory "/directory/other.ext" == "/directory" ) == ( LP.takeDirectory "/directory/other.ext" == "/directory" )) ,("( W.takeDirectory \"/directory/other.ext\" == \"/directory\" ) == ( LW.takeDirectory \"/directory/other.ext\" == \"/directory\" )", property $ ( W.takeDirectory "/directory/other.ext" == "/directory" ) == ( LW.takeDirectory "/directory/other.ext" == "/directory" )) ,("( isPrefixOf (P.takeDirectory x) x || P.takeDirectory x == \".\" ) == ( isPrefixOf (LP.takeDirectory x) x || LP.takeDirectory x == \".\" )", property $ \(QFilePath x) -> ( isPrefixOf (P.takeDirectory x) x || P.takeDirectory x == "." ) == ( isPrefixOf (LP.takeDirectory x) x || LP.takeDirectory x == "." )) ,("( isPrefixOf (W.takeDirectory x) x || W.takeDirectory x == \".\" ) == ( isPrefixOf (LW.takeDirectory x) x || LW.takeDirectory x == \".\" )", property $ \(QFilePath x) -> ( isPrefixOf (W.takeDirectory x) x || W.takeDirectory x == "." ) == ( isPrefixOf (LW.takeDirectory x) x || LW.takeDirectory x == "." )) ,("( P.takeDirectory \"foo\" == \".\" ) == ( LP.takeDirectory \"foo\" == \".\" )", property $ ( P.takeDirectory "foo" == "." ) == ( LP.takeDirectory "foo" == "." )) ,("( W.takeDirectory \"foo\" == \".\" ) == ( LW.takeDirectory \"foo\" == \".\" )", property $ ( W.takeDirectory "foo" == "." ) == ( LW.takeDirectory "foo" == "." )) ,("( P.takeDirectory \"/\" == \"/\" ) == ( LP.takeDirectory \"/\" == \"/\" )", property $ ( P.takeDirectory "/" == "/" ) == ( LP.takeDirectory "/" == "/" )) ,("( W.takeDirectory \"/\" == \"/\" ) == ( LW.takeDirectory \"/\" == \"/\" )", property $ ( W.takeDirectory "/" == "/" ) == ( LW.takeDirectory "/" == "/" )) ,("( P.takeDirectory \"/foo\" == \"/\" ) == ( LP.takeDirectory \"/foo\" == \"/\" )", property $ ( P.takeDirectory "/foo" == "/" ) == ( LP.takeDirectory "/foo" == "/" )) ,("( W.takeDirectory \"/foo\" == \"/\" ) == ( LW.takeDirectory \"/foo\" == \"/\" )", property $ ( W.takeDirectory "/foo" == "/" ) == ( LW.takeDirectory "/foo" == "/" )) ,("( P.takeDirectory \"/foo/bar/baz\" == \"/foo/bar\" ) == ( LP.takeDirectory \"/foo/bar/baz\" == \"/foo/bar\" )", property $ ( P.takeDirectory "/foo/bar/baz" == "/foo/bar" ) == ( LP.takeDirectory "/foo/bar/baz" == "/foo/bar" )) ,("( W.takeDirectory \"/foo/bar/baz\" == \"/foo/bar\" ) == ( LW.takeDirectory \"/foo/bar/baz\" == \"/foo/bar\" )", property $ ( W.takeDirectory "/foo/bar/baz" == "/foo/bar" ) == ( LW.takeDirectory "/foo/bar/baz" == "/foo/bar" )) ,("( P.takeDirectory \"/foo/bar/baz/\" == \"/foo/bar/baz\" ) == ( LP.takeDirectory \"/foo/bar/baz/\" == \"/foo/bar/baz\" )", property $ ( P.takeDirectory "/foo/bar/baz/" == "/foo/bar/baz" ) == ( LP.takeDirectory "/foo/bar/baz/" == "/foo/bar/baz" )) ,("( W.takeDirectory \"/foo/bar/baz/\" == \"/foo/bar/baz\" ) == ( LW.takeDirectory \"/foo/bar/baz/\" == \"/foo/bar/baz\" )", property $ ( W.takeDirectory "/foo/bar/baz/" == "/foo/bar/baz" ) == ( LW.takeDirectory "/foo/bar/baz/" == "/foo/bar/baz" )) ,("( P.takeDirectory \"foo/bar/baz\" == \"foo/bar\" ) == ( LP.takeDirectory \"foo/bar/baz\" == \"foo/bar\" )", property $ ( P.takeDirectory "foo/bar/baz" == "foo/bar" ) == ( LP.takeDirectory "foo/bar/baz" == "foo/bar" )) ,("( W.takeDirectory \"foo/bar/baz\" == \"foo/bar\" ) == ( LW.takeDirectory \"foo/bar/baz\" == \"foo/bar\" )", property $ ( W.takeDirectory "foo/bar/baz" == "foo/bar" ) == ( LW.takeDirectory "foo/bar/baz" == "foo/bar" )) ,("( W.takeDirectory \"foo\\\\bar\" == \"foo\" ) == ( LW.takeDirectory \"foo\\\\bar\" == \"foo\" )", property $ ( W.takeDirectory "foo\\bar" == "foo" ) == ( LW.takeDirectory "foo\\bar" == "foo" )) ,("( W.takeDirectory \"foo\\\\bar\\\\\\\\\" == \"foo\\\\bar\" ) == ( LW.takeDirectory \"foo\\\\bar\\\\\\\\\" == \"foo\\\\bar\" )", property $ ( W.takeDirectory "foo\\bar\\\\" == "foo\\bar" ) == ( LW.takeDirectory "foo\\bar\\\\" == "foo\\bar" )) ,("( W.takeDirectory \"C:\\\\\" == \"C:\\\\\" ) == ( LW.takeDirectory \"C:\\\\\" == \"C:\\\\\" )", property $ ( W.takeDirectory "C:\\" == "C:\\" ) == ( LW.takeDirectory "C:\\" == "C:\\" )) ,("( P.replaceDirectory \"root/file.ext\" \"/directory/\" == \"/directory/file.ext\" ) == ( LP.replaceDirectory \"root/file.ext\" \"/directory/\" == \"/directory/file.ext\" )", property $ ( P.replaceDirectory "root/file.ext" "/directory/" == "/directory/file.ext" ) == ( LP.replaceDirectory "root/file.ext" "/directory/" == "/directory/file.ext" )) ,("( W.replaceDirectory \"root/file.ext\" \"/directory/\" == \"/directory/file.ext\" ) == ( LW.replaceDirectory \"root/file.ext\" \"/directory/\" == \"/directory/file.ext\" )", property $ ( W.replaceDirectory "root/file.ext" "/directory/" == "/directory/file.ext" ) == ( LW.replaceDirectory "root/file.ext" "/directory/" == "/directory/file.ext" )) ,("( P.replaceDirectory x (P.takeDirectory x) `P.equalFilePath` x ) == ( LP.replaceDirectory x (LP.takeDirectory x) `LP.equalFilePath` x )", property $ \(QFilePathValidP x) -> ( P.replaceDirectory x (P.takeDirectory x) `P.equalFilePath` x ) == ( LP.replaceDirectory x (LP.takeDirectory x) `LP.equalFilePath` x )) ,("( W.replaceDirectory x (W.takeDirectory x) `W.equalFilePath` x ) == ( LW.replaceDirectory x (LW.takeDirectory x) `LW.equalFilePath` x )", property $ \(QFilePathValidW x) -> ( W.replaceDirectory x (W.takeDirectory x) `W.equalFilePath` x ) == ( LW.replaceDirectory x (LW.takeDirectory x) `LW.equalFilePath` x )) ,("( \"/directory\" P. \"file.ext\" == \"/directory/file.ext\" ) == ( \"/directory\" LP. \"file.ext\" == \"/directory/file.ext\" )", property $ ( "/directory" P. "file.ext" == "/directory/file.ext" ) == ( "/directory" LP. "file.ext" == "/directory/file.ext" )) ,("( \"/directory\" W. \"file.ext\" == \"/directory\\\\file.ext\" ) == ( \"/directory\" LW. \"file.ext\" == \"/directory\\\\file.ext\" )", property $ ( "/directory" W. "file.ext" == "/directory\\file.ext" ) == ( "/directory" LW. "file.ext" == "/directory\\file.ext" )) ,("( \"directory\" P. \"/file.ext\" == \"/file.ext\" ) == ( \"directory\" LP. \"/file.ext\" == \"/file.ext\" )", property $ ( "directory" P. "/file.ext" == "/file.ext" ) == ( "directory" LP. "/file.ext" == "/file.ext" )) ,("( \"directory\" W. \"/file.ext\" == \"/file.ext\" ) == ( \"directory\" LW. \"/file.ext\" == \"/file.ext\" )", property $ ( "directory" W. "/file.ext" == "/file.ext" ) == ( "directory" LW. "/file.ext" == "/file.ext" )) ,("( (P.takeDirectory x P. P.takeFileName x) `P.equalFilePath` x ) == ( (LP.takeDirectory x LP. LP.takeFileName x) `LP.equalFilePath` x )", property $ \(QFilePathValidP x) -> ( (P.takeDirectory x P. P.takeFileName x) `P.equalFilePath` x ) == ( (LP.takeDirectory x LP. LP.takeFileName x) `LP.equalFilePath` x )) ,("( (W.takeDirectory x W. W.takeFileName x) `W.equalFilePath` x ) == ( (LW.takeDirectory x LW. LW.takeFileName x) `LW.equalFilePath` x )", property $ \(QFilePathValidW x) -> ( (W.takeDirectory x W. W.takeFileName x) `W.equalFilePath` x ) == ( (LW.takeDirectory x LW. LW.takeFileName x) `LW.equalFilePath` x )) ,("( \"/\" P. \"test\" == \"/test\" ) == ( \"/\" LP. \"test\" == \"/test\" )", property $ ( "/" P. "test" == "/test" ) == ( "/" LP. "test" == "/test" )) ,("( \"home\" P. \"bob\" == \"home/bob\" ) == ( \"home\" LP. \"bob\" == \"home/bob\" )", property $ ( "home" P. "bob" == "home/bob" ) == ( "home" LP. "bob" == "home/bob" )) ,("( \"x:\" P. \"foo\" == \"x:/foo\" ) == ( \"x:\" LP. \"foo\" == \"x:/foo\" )", property $ ( "x:" P. "foo" == "x:/foo" ) == ( "x:" LP. "foo" == "x:/foo" )) ,("( \"C:\\\\foo\" W. \"bar\" == \"C:\\\\foo\\\\bar\" ) == ( \"C:\\\\foo\" LW. \"bar\" == \"C:\\\\foo\\\\bar\" )", property $ ( "C:\\foo" W. "bar" == "C:\\foo\\bar" ) == ( "C:\\foo" LW. "bar" == "C:\\foo\\bar" )) ,("( \"home\" W. \"bob\" == \"home\\\\bob\" ) == ( \"home\" LW. \"bob\" == \"home\\\\bob\" )", property $ ( "home" W. "bob" == "home\\bob" ) == ( "home" LW. "bob" == "home\\bob" )) ,("( \"home\" P. \"/bob\" == \"/bob\" ) == ( \"home\" LP. \"/bob\" == \"/bob\" )", property $ ( "home" P. "/bob" == "/bob" ) == ( "home" LP. "/bob" == "/bob" )) ,("( \"home\" W. \"C:\\\\bob\" == \"C:\\\\bob\" ) == ( \"home\" LW. \"C:\\\\bob\" == \"C:\\\\bob\" )", property $ ( "home" W. "C:\\bob" == "C:\\bob" ) == ( "home" LW. "C:\\bob" == "C:\\bob" )) ,("( \"home\" W. \"/bob\" == \"/bob\" ) == ( \"home\" LW. \"/bob\" == \"/bob\" )", property $ ( "home" W. "/bob" == "/bob" ) == ( "home" LW. "/bob" == "/bob" )) ,("( \"home\" W. \"\\\\bob\" == \"\\\\bob\" ) == ( \"home\" LW. \"\\\\bob\" == \"\\\\bob\" )", property $ ( "home" W. "\\bob" == "\\bob" ) == ( "home" LW. "\\bob" == "\\bob" )) ,("( \"C:\\\\home\" W. \"\\\\bob\" == \"\\\\bob\" ) == ( \"C:\\\\home\" LW. \"\\\\bob\" == \"\\\\bob\" )", property $ ( "C:\\home" W. "\\bob" == "\\bob" ) == ( "C:\\home" LW. "\\bob" == "\\bob" )) ,("( \"D:\\\\foo\" W. \"C:bar\" == \"C:bar\" ) == ( \"D:\\\\foo\" LW. \"C:bar\" == \"C:bar\" )", property $ ( "D:\\foo" W. "C:bar" == "C:bar" ) == ( "D:\\foo" LW. "C:bar" == "C:bar" )) ,("( \"C:\\\\foo\" W. \"C:bar\" == \"C:bar\" ) == ( \"C:\\\\foo\" LW. \"C:bar\" == \"C:bar\" )", property $ ( "C:\\foo" W. "C:bar" == "C:bar" ) == ( "C:\\foo" LW. "C:bar" == "C:bar" )) ,("( P.splitPath \"/directory/file.ext\" == [\"/\", \"directory/\", \"file.ext\"] ) == ( LP.splitPath \"/directory/file.ext\" == [\"/\", \"directory/\", \"file.ext\"] )", property $ ( P.splitPath "/directory/file.ext" == ["/", "directory/", "file.ext"] ) == ( LP.splitPath "/directory/file.ext" == ["/", "directory/", "file.ext"] )) ,("( W.splitPath \"/directory/file.ext\" == [\"/\", \"directory/\", \"file.ext\"] ) == ( LW.splitPath \"/directory/file.ext\" == [\"/\", \"directory/\", \"file.ext\"] )", property $ ( W.splitPath "/directory/file.ext" == ["/", "directory/", "file.ext"] ) == ( LW.splitPath "/directory/file.ext" == ["/", "directory/", "file.ext"] )) ,("( concat (P.splitPath x) == x ) == ( concat (LP.splitPath x) == x )", property $ \(QFilePath x) -> ( concat (P.splitPath x) == x ) == ( concat (LP.splitPath x) == x )) ,("( concat (W.splitPath x) == x ) == ( concat (LW.splitPath x) == x )", property $ \(QFilePath x) -> ( concat (W.splitPath x) == x ) == ( concat (LW.splitPath x) == x )) ,("( P.splitPath \"test//item/\" == [\"test//\", \"item/\"] ) == ( LP.splitPath \"test//item/\" == [\"test//\", \"item/\"] )", property $ ( P.splitPath "test//item/" == ["test//", "item/"] ) == ( LP.splitPath "test//item/" == ["test//", "item/"] )) ,("( W.splitPath \"test//item/\" == [\"test//\", \"item/\"] ) == ( LW.splitPath \"test//item/\" == [\"test//\", \"item/\"] )", property $ ( W.splitPath "test//item/" == ["test//", "item/"] ) == ( LW.splitPath "test//item/" == ["test//", "item/"] )) ,("( P.splitPath \"test/item/file\" == [\"test/\", \"item/\", \"file\"] ) == ( LP.splitPath \"test/item/file\" == [\"test/\", \"item/\", \"file\"] )", property $ ( P.splitPath "test/item/file" == ["test/", "item/", "file"] ) == ( LP.splitPath "test/item/file" == ["test/", "item/", "file"] )) ,("( W.splitPath \"test/item/file\" == [\"test/\", \"item/\", \"file\"] ) == ( LW.splitPath \"test/item/file\" == [\"test/\", \"item/\", \"file\"] )", property $ ( W.splitPath "test/item/file" == ["test/", "item/", "file"] ) == ( LW.splitPath "test/item/file" == ["test/", "item/", "file"] )) ,("( P.splitPath \"\" == [] ) == ( LP.splitPath \"\" == [] )", property $ ( P.splitPath "" == [] ) == ( LP.splitPath "" == [] )) ,("( W.splitPath \"\" == [] ) == ( LW.splitPath \"\" == [] )", property $ ( W.splitPath "" == [] ) == ( LW.splitPath "" == [] )) ,("( W.splitPath \"c:\\\\test\\\\path\" == [\"c:\\\\\", \"test\\\\\", \"path\"] ) == ( LW.splitPath \"c:\\\\test\\\\path\" == [\"c:\\\\\", \"test\\\\\", \"path\"] )", property $ ( W.splitPath "c:\\test\\path" == ["c:\\", "test\\", "path"] ) == ( LW.splitPath "c:\\test\\path" == ["c:\\", "test\\", "path"] )) ,("( P.splitPath \"/file/test\" == [\"/\", \"file/\", \"test\"] ) == ( LP.splitPath \"/file/test\" == [\"/\", \"file/\", \"test\"] )", property $ ( P.splitPath "/file/test" == ["/", "file/", "test"] ) == ( LP.splitPath "/file/test" == ["/", "file/", "test"] )) ,("( P.splitDirectories \"/directory/file.ext\" == [\"/\", \"directory\", \"file.ext\"] ) == ( LP.splitDirectories \"/directory/file.ext\" == [\"/\", \"directory\", \"file.ext\"] )", property $ ( P.splitDirectories "/directory/file.ext" == ["/", "directory", "file.ext"] ) == ( LP.splitDirectories "/directory/file.ext" == ["/", "directory", "file.ext"] )) ,("( W.splitDirectories \"/directory/file.ext\" == [\"/\", \"directory\", \"file.ext\"] ) == ( LW.splitDirectories \"/directory/file.ext\" == [\"/\", \"directory\", \"file.ext\"] )", property $ ( W.splitDirectories "/directory/file.ext" == ["/", "directory", "file.ext"] ) == ( LW.splitDirectories "/directory/file.ext" == ["/", "directory", "file.ext"] )) ,("( P.splitDirectories \"test/file\" == [\"test\", \"file\"] ) == ( LP.splitDirectories \"test/file\" == [\"test\", \"file\"] )", property $ ( P.splitDirectories "test/file" == ["test", "file"] ) == ( LP.splitDirectories "test/file" == ["test", "file"] )) ,("( W.splitDirectories \"test/file\" == [\"test\", \"file\"] ) == ( LW.splitDirectories \"test/file\" == [\"test\", \"file\"] )", property $ ( W.splitDirectories "test/file" == ["test", "file"] ) == ( LW.splitDirectories "test/file" == ["test", "file"] )) ,("( P.splitDirectories \"/test/file\" == [\"/\", \"test\", \"file\"] ) == ( LP.splitDirectories \"/test/file\" == [\"/\", \"test\", \"file\"] )", property $ ( P.splitDirectories "/test/file" == ["/", "test", "file"] ) == ( LP.splitDirectories "/test/file" == ["/", "test", "file"] )) ,("( W.splitDirectories \"/test/file\" == [\"/\", \"test\", \"file\"] ) == ( LW.splitDirectories \"/test/file\" == [\"/\", \"test\", \"file\"] )", property $ ( W.splitDirectories "/test/file" == ["/", "test", "file"] ) == ( LW.splitDirectories "/test/file" == ["/", "test", "file"] )) ,("( W.splitDirectories \"C:\\\\test\\\\file\" == [\"C:\\\\\", \"test\", \"file\"] ) == ( LW.splitDirectories \"C:\\\\test\\\\file\" == [\"C:\\\\\", \"test\", \"file\"] )", property $ ( W.splitDirectories "C:\\test\\file" == ["C:\\", "test", "file"] ) == ( LW.splitDirectories "C:\\test\\file" == ["C:\\", "test", "file"] )) ,("( P.joinPath (P.splitDirectories x) `P.equalFilePath` x ) == ( LP.joinPath (LP.splitDirectories x) `LP.equalFilePath` x )", property $ \(QFilePathValidP x) -> ( P.joinPath (P.splitDirectories x) `P.equalFilePath` x ) == ( LP.joinPath (LP.splitDirectories x) `LP.equalFilePath` x )) ,("( W.joinPath (W.splitDirectories x) `W.equalFilePath` x ) == ( LW.joinPath (LW.splitDirectories x) `LW.equalFilePath` x )", property $ \(QFilePathValidW x) -> ( W.joinPath (W.splitDirectories x) `W.equalFilePath` x ) == ( LW.joinPath (LW.splitDirectories x) `LW.equalFilePath` x )) ,("( P.splitDirectories \"\" == [] ) == ( LP.splitDirectories \"\" == [] )", property $ ( P.splitDirectories "" == [] ) == ( LP.splitDirectories "" == [] )) ,("( W.splitDirectories \"\" == [] ) == ( LW.splitDirectories \"\" == [] )", property $ ( W.splitDirectories "" == [] ) == ( LW.splitDirectories "" == [] )) ,("( W.splitDirectories \"C:\\\\test\\\\\\\\\\\\file\" == [\"C:\\\\\", \"test\", \"file\"] ) == ( LW.splitDirectories \"C:\\\\test\\\\\\\\\\\\file\" == [\"C:\\\\\", \"test\", \"file\"] )", property $ ( W.splitDirectories "C:\\test\\\\\\file" == ["C:\\", "test", "file"] ) == ( LW.splitDirectories "C:\\test\\\\\\file" == ["C:\\", "test", "file"] )) ,("( P.splitDirectories \"/test///file\" == [\"/\", \"test\", \"file\"] ) == ( LP.splitDirectories \"/test///file\" == [\"/\", \"test\", \"file\"] )", property $ ( P.splitDirectories "/test///file" == ["/", "test", "file"] ) == ( LP.splitDirectories "/test///file" == ["/", "test", "file"] )) ,("( W.splitDirectories \"/test///file\" == [\"/\", \"test\", \"file\"] ) == ( LW.splitDirectories \"/test///file\" == [\"/\", \"test\", \"file\"] )", property $ ( W.splitDirectories "/test///file" == ["/", "test", "file"] ) == ( LW.splitDirectories "/test///file" == ["/", "test", "file"] )) ,("( P.joinPath z == foldr (P.) \"\" z ) == ( LP.joinPath z == foldr (LP.) \"\" z )", property $ \z -> ( P.joinPath z == foldr (P.) "" z ) == ( LP.joinPath z == foldr (LP.) "" z )) ,("( W.joinPath z == foldr (W.) \"\" z ) == ( LW.joinPath z == foldr (LW.) \"\" z )", property $ \z -> ( W.joinPath z == foldr (W.) "" z ) == ( LW.joinPath z == foldr (LW.) "" z )) ,("( P.joinPath [\"/\", \"directory/\", \"file.ext\"] == \"/directory/file.ext\" ) == ( LP.joinPath [\"/\", \"directory/\", \"file.ext\"] == \"/directory/file.ext\" )", property $ ( P.joinPath ["/", "directory/", "file.ext"] == "/directory/file.ext" ) == ( LP.joinPath ["/", "directory/", "file.ext"] == "/directory/file.ext" )) ,("( W.joinPath [\"/\", \"directory/\", \"file.ext\"] == \"/directory/file.ext\" ) == ( LW.joinPath [\"/\", \"directory/\", \"file.ext\"] == \"/directory/file.ext\" )", property $ ( W.joinPath ["/", "directory/", "file.ext"] == "/directory/file.ext" ) == ( LW.joinPath ["/", "directory/", "file.ext"] == "/directory/file.ext" )) ,("( P.joinPath (P.splitPath x) == x ) == ( LP.joinPath (LP.splitPath x) == x )", property $ \(QFilePathValidP x) -> ( P.joinPath (P.splitPath x) == x ) == ( LP.joinPath (LP.splitPath x) == x )) ,("( W.joinPath (W.splitPath x) == x ) == ( LW.joinPath (LW.splitPath x) == x )", property $ \(QFilePathValidW x) -> ( W.joinPath (W.splitPath x) == x ) == ( LW.joinPath (LW.splitPath x) == x )) ,("( P.joinPath [] == \"\" ) == ( LP.joinPath [] == \"\" )", property $ ( P.joinPath [] == "" ) == ( LP.joinPath [] == "" )) ,("( W.joinPath [] == \"\" ) == ( LW.joinPath [] == \"\" )", property $ ( W.joinPath [] == "" ) == ( LW.joinPath [] == "" )) ,("( P.joinPath [\"test\", \"file\", \"path\"] == \"test/file/path\" ) == ( LP.joinPath [\"test\", \"file\", \"path\"] == \"test/file/path\" )", property $ ( P.joinPath ["test", "file", "path"] == "test/file/path" ) == ( LP.joinPath ["test", "file", "path"] == "test/file/path" )) ,("( x == y ==> P.equalFilePath x y ) == ( x == y ==> LP.equalFilePath x y )", property $ \(QFilePath x) (QFilePath y) -> ( x == y ==> P.equalFilePath x y ) == ( x == y ==> LP.equalFilePath x y )) ,("( x == y ==> W.equalFilePath x y ) == ( x == y ==> LW.equalFilePath x y )", property $ \(QFilePath x) (QFilePath y) -> ( x == y ==> W.equalFilePath x y ) == ( x == y ==> LW.equalFilePath x y )) ,("( P.normalise x == P.normalise y ==> P.equalFilePath x y ) == ( LP.normalise x == LP.normalise y ==> LP.equalFilePath x y )", property $ \(QFilePath x) (QFilePath y) -> ( P.normalise x == P.normalise y ==> P.equalFilePath x y ) == ( LP.normalise x == LP.normalise y ==> LP.equalFilePath x y )) ,("( W.normalise x == W.normalise y ==> W.equalFilePath x y ) == ( LW.normalise x == LW.normalise y ==> LW.equalFilePath x y )", property $ \(QFilePath x) (QFilePath y) -> ( W.normalise x == W.normalise y ==> W.equalFilePath x y ) == ( LW.normalise x == LW.normalise y ==> LW.equalFilePath x y )) ,("( P.equalFilePath \"foo\" \"foo/\" ) == ( LP.equalFilePath \"foo\" \"foo/\" )", property $ ( P.equalFilePath "foo" "foo/" ) == ( LP.equalFilePath "foo" "foo/" )) ,("( W.equalFilePath \"foo\" \"foo/\" ) == ( LW.equalFilePath \"foo\" \"foo/\" )", property $ ( W.equalFilePath "foo" "foo/" ) == ( LW.equalFilePath "foo" "foo/" )) ,("( not (P.equalFilePath \"/a/../c\" \"/c\") ) == ( not (LP.equalFilePath \"/a/../c\" \"/c\") )", property $ ( not (P.equalFilePath "/a/../c" "/c") ) == ( not (LP.equalFilePath "/a/../c" "/c") )) ,("( not (W.equalFilePath \"/a/../c\" \"/c\") ) == ( not (LW.equalFilePath \"/a/../c\" \"/c\") )", property $ ( not (W.equalFilePath "/a/../c" "/c") ) == ( not (LW.equalFilePath "/a/../c" "/c") )) ,("( not (P.equalFilePath \"foo\" \"/foo\") ) == ( not (LP.equalFilePath \"foo\" \"/foo\") )", property $ ( not (P.equalFilePath "foo" "/foo") ) == ( not (LP.equalFilePath "foo" "/foo") )) ,("( not (W.equalFilePath \"foo\" \"/foo\") ) == ( not (LW.equalFilePath \"foo\" \"/foo\") )", property $ ( not (W.equalFilePath "foo" "/foo") ) == ( not (LW.equalFilePath "foo" "/foo") )) ,("( not (P.equalFilePath \"foo\" \"FOO\") ) == ( not (LP.equalFilePath \"foo\" \"FOO\") )", property $ ( not (P.equalFilePath "foo" "FOO") ) == ( not (LP.equalFilePath "foo" "FOO") )) ,("( W.equalFilePath \"foo\" \"FOO\" ) == ( LW.equalFilePath \"foo\" \"FOO\" )", property $ ( W.equalFilePath "foo" "FOO" ) == ( LW.equalFilePath "foo" "FOO" )) ,("( not (W.equalFilePath \"C:\" \"C:/\") ) == ( not (LW.equalFilePath \"C:\" \"C:/\") )", property $ ( not (W.equalFilePath "C:" "C:/") ) == ( not (LW.equalFilePath "C:" "C:/") )) ,("( P.makeRelative \"/directory\" \"/directory/file.ext\" == \"file.ext\" ) == ( LP.makeRelative \"/directory\" \"/directory/file.ext\" == \"file.ext\" )", property $ ( P.makeRelative "/directory" "/directory/file.ext" == "file.ext" ) == ( LP.makeRelative "/directory" "/directory/file.ext" == "file.ext" )) ,("( W.makeRelative \"/directory\" \"/directory/file.ext\" == \"file.ext\" ) == ( LW.makeRelative \"/directory\" \"/directory/file.ext\" == \"file.ext\" )", property $ ( W.makeRelative "/directory" "/directory/file.ext" == "file.ext" ) == ( LW.makeRelative "/directory" "/directory/file.ext" == "file.ext" )) ,("( P.makeRelative (P.takeDirectory x) x `P.equalFilePath` P.takeFileName x ) == ( LP.makeRelative (LP.takeDirectory x) x `LP.equalFilePath` LP.takeFileName x )", property $ \(QFilePathValidP x) -> ( P.makeRelative (P.takeDirectory x) x `P.equalFilePath` P.takeFileName x ) == ( LP.makeRelative (LP.takeDirectory x) x `LP.equalFilePath` LP.takeFileName x )) ,("( W.makeRelative (W.takeDirectory x) x `W.equalFilePath` W.takeFileName x ) == ( LW.makeRelative (LW.takeDirectory x) x `LW.equalFilePath` LW.takeFileName x )", property $ \(QFilePathValidW x) -> ( W.makeRelative (W.takeDirectory x) x `W.equalFilePath` W.takeFileName x ) == ( LW.makeRelative (LW.takeDirectory x) x `LW.equalFilePath` LW.takeFileName x )) ,("( P.makeRelative x x == \".\" ) == ( LP.makeRelative x x == \".\" )", property $ \(QFilePath x) -> ( P.makeRelative x x == "." ) == ( LP.makeRelative x x == "." )) ,("( W.makeRelative x x == \".\" ) == ( LW.makeRelative x x == \".\" )", property $ \(QFilePath x) -> ( W.makeRelative x x == "." ) == ( LW.makeRelative x x == "." )) ,("( P.equalFilePath x y || (P.isRelative x && P.makeRelative y x == x) || P.equalFilePath (y P. P.makeRelative y x) x ) == ( LP.equalFilePath x y || (LP.isRelative x && LP.makeRelative y x == x) || LP.equalFilePath (y LP. LP.makeRelative y x) x )", property $ \(QFilePathValidP x) (QFilePathValidP y) -> ( P.equalFilePath x y || (P.isRelative x && P.makeRelative y x == x) || P.equalFilePath (y P. P.makeRelative y x) x ) == ( LP.equalFilePath x y || (LP.isRelative x && LP.makeRelative y x == x) || LP.equalFilePath (y LP. LP.makeRelative y x) x )) ,("( W.equalFilePath x y || (W.isRelative x && W.makeRelative y x == x) || W.equalFilePath (y W. W.makeRelative y x) x ) == ( LW.equalFilePath x y || (LW.isRelative x && LW.makeRelative y x == x) || LW.equalFilePath (y LW. LW.makeRelative y x) x )", property $ \(QFilePathValidW x) (QFilePathValidW y) -> ( W.equalFilePath x y || (W.isRelative x && W.makeRelative y x == x) || W.equalFilePath (y W. W.makeRelative y x) x ) == ( LW.equalFilePath x y || (LW.isRelative x && LW.makeRelative y x == x) || LW.equalFilePath (y LW. LW.makeRelative y x) x )) ,("( W.makeRelative \"C:\\\\Home\" \"c:\\\\home\\\\bob\" == \"bob\" ) == ( LW.makeRelative \"C:\\\\Home\" \"c:\\\\home\\\\bob\" == \"bob\" )", property $ ( W.makeRelative "C:\\Home" "c:\\home\\bob" == "bob" ) == ( LW.makeRelative "C:\\Home" "c:\\home\\bob" == "bob" )) ,("( W.makeRelative \"C:\\\\Home\" \"c:/home/bob\" == \"bob\" ) == ( LW.makeRelative \"C:\\\\Home\" \"c:/home/bob\" == \"bob\" )", property $ ( W.makeRelative "C:\\Home" "c:/home/bob" == "bob" ) == ( LW.makeRelative "C:\\Home" "c:/home/bob" == "bob" )) ,("( W.makeRelative \"C:\\\\Home\" \"D:\\\\Home\\\\Bob\" == \"D:\\\\Home\\\\Bob\" ) == ( LW.makeRelative \"C:\\\\Home\" \"D:\\\\Home\\\\Bob\" == \"D:\\\\Home\\\\Bob\" )", property $ ( W.makeRelative "C:\\Home" "D:\\Home\\Bob" == "D:\\Home\\Bob" ) == ( LW.makeRelative "C:\\Home" "D:\\Home\\Bob" == "D:\\Home\\Bob" )) ,("( W.makeRelative \"C:\\\\Home\" \"C:Home\\\\Bob\" == \"C:Home\\\\Bob\" ) == ( LW.makeRelative \"C:\\\\Home\" \"C:Home\\\\Bob\" == \"C:Home\\\\Bob\" )", property $ ( W.makeRelative "C:\\Home" "C:Home\\Bob" == "C:Home\\Bob" ) == ( LW.makeRelative "C:\\Home" "C:Home\\Bob" == "C:Home\\Bob" )) ,("( W.makeRelative \"/Home\" \"/home/bob\" == \"bob\" ) == ( LW.makeRelative \"/Home\" \"/home/bob\" == \"bob\" )", property $ ( W.makeRelative "/Home" "/home/bob" == "bob" ) == ( LW.makeRelative "/Home" "/home/bob" == "bob" )) ,("( W.makeRelative \"/\" \"//\" == \"//\" ) == ( LW.makeRelative \"/\" \"//\" == \"//\" )", property $ ( W.makeRelative "/" "//" == "//" ) == ( LW.makeRelative "/" "//" == "//" )) ,("( P.makeRelative \"/Home\" \"/home/bob\" == \"/home/bob\" ) == ( LP.makeRelative \"/Home\" \"/home/bob\" == \"/home/bob\" )", property $ ( P.makeRelative "/Home" "/home/bob" == "/home/bob" ) == ( LP.makeRelative "/Home" "/home/bob" == "/home/bob" )) ,("( P.makeRelative \"/home/\" \"/home/bob/foo/bar\" == \"bob/foo/bar\" ) == ( LP.makeRelative \"/home/\" \"/home/bob/foo/bar\" == \"bob/foo/bar\" )", property $ ( P.makeRelative "/home/" "/home/bob/foo/bar" == "bob/foo/bar" ) == ( LP.makeRelative "/home/" "/home/bob/foo/bar" == "bob/foo/bar" )) ,("( P.makeRelative \"/fred\" \"bob\" == \"bob\" ) == ( LP.makeRelative \"/fred\" \"bob\" == \"bob\" )", property $ ( P.makeRelative "/fred" "bob" == "bob" ) == ( LP.makeRelative "/fred" "bob" == "bob" )) ,("( P.makeRelative \"/file/test\" \"/file/test/fred\" == \"fred\" ) == ( LP.makeRelative \"/file/test\" \"/file/test/fred\" == \"fred\" )", property $ ( P.makeRelative "/file/test" "/file/test/fred" == "fred" ) == ( LP.makeRelative "/file/test" "/file/test/fred" == "fred" )) ,("( P.makeRelative \"/file/test\" \"/file/test/fred/\" == \"fred/\" ) == ( LP.makeRelative \"/file/test\" \"/file/test/fred/\" == \"fred/\" )", property $ ( P.makeRelative "/file/test" "/file/test/fred/" == "fred/" ) == ( LP.makeRelative "/file/test" "/file/test/fred/" == "fred/" )) ,("( P.makeRelative \"some/path\" \"some/path/a/b/c\" == \"a/b/c\" ) == ( LP.makeRelative \"some/path\" \"some/path/a/b/c\" == \"a/b/c\" )", property $ ( P.makeRelative "some/path" "some/path/a/b/c" == "a/b/c" ) == ( LP.makeRelative "some/path" "some/path/a/b/c" == "a/b/c" )) ,("( P.normalise \"/file/\\\\test////\" == \"/file/\\\\test/\" ) == ( LP.normalise \"/file/\\\\test////\" == \"/file/\\\\test/\" )", property $ ( P.normalise "/file/\\test////" == "/file/\\test/" ) == ( LP.normalise "/file/\\test////" == "/file/\\test/" )) ,("( P.normalise \"/file/./test\" == \"/file/test\" ) == ( LP.normalise \"/file/./test\" == \"/file/test\" )", property $ ( P.normalise "/file/./test" == "/file/test" ) == ( LP.normalise "/file/./test" == "/file/test" )) ,("( P.normalise \"/test/file/../bob/fred/\" == \"/test/file/../bob/fred/\" ) == ( LP.normalise \"/test/file/../bob/fred/\" == \"/test/file/../bob/fred/\" )", property $ ( P.normalise "/test/file/../bob/fred/" == "/test/file/../bob/fred/" ) == ( LP.normalise "/test/file/../bob/fred/" == "/test/file/../bob/fred/" )) ,("( P.normalise \"../bob/fred/\" == \"../bob/fred/\" ) == ( LP.normalise \"../bob/fred/\" == \"../bob/fred/\" )", property $ ( P.normalise "../bob/fred/" == "../bob/fred/" ) == ( LP.normalise "../bob/fred/" == "../bob/fred/" )) ,("( P.normalise \"/a/../c\" == \"/a/../c\" ) == ( LP.normalise \"/a/../c\" == \"/a/../c\" )", property $ ( P.normalise "/a/../c" == "/a/../c" ) == ( LP.normalise "/a/../c" == "/a/../c" )) ,("( P.normalise \"./bob/fred/\" == \"bob/fred/\" ) == ( LP.normalise \"./bob/fred/\" == \"bob/fred/\" )", property $ ( P.normalise "./bob/fred/" == "bob/fred/" ) == ( LP.normalise "./bob/fred/" == "bob/fred/" )) ,("( W.normalise \"c:\\\\file/bob\\\\\" == \"C:\\\\file\\\\bob\\\\\" ) == ( LW.normalise \"c:\\\\file/bob\\\\\" == \"C:\\\\file\\\\bob\\\\\" )", property $ ( W.normalise "c:\\file/bob\\" == "C:\\file\\bob\\" ) == ( LW.normalise "c:\\file/bob\\" == "C:\\file\\bob\\" )) ,("( W.normalise \"c:\\\\\" == \"C:\\\\\" ) == ( LW.normalise \"c:\\\\\" == \"C:\\\\\" )", property $ ( W.normalise "c:\\" == "C:\\" ) == ( LW.normalise "c:\\" == "C:\\" )) ,("( W.normalise \"C:.\\\\\" == \"C:\" ) == ( LW.normalise \"C:.\\\\\" == \"C:\" )", property $ ( W.normalise "C:.\\" == "C:" ) == ( LW.normalise "C:.\\" == "C:" )) ,("( W.normalise \"\\\\\\\\server\\\\test\" == \"\\\\\\\\server\\\\test\" ) == ( LW.normalise \"\\\\\\\\server\\\\test\" == \"\\\\\\\\server\\\\test\" )", property $ ( W.normalise "\\\\server\\test" == "\\\\server\\test" ) == ( LW.normalise "\\\\server\\test" == "\\\\server\\test" )) ,("( W.normalise \"//server/test\" == \"\\\\\\\\server\\\\test\" ) == ( LW.normalise \"//server/test\" == \"\\\\\\\\server\\\\test\" )", property $ ( W.normalise "//server/test" == "\\\\server\\test" ) == ( LW.normalise "//server/test" == "\\\\server\\test" )) ,("( W.normalise \"c:/file\" == \"C:\\\\file\" ) == ( LW.normalise \"c:/file\" == \"C:\\\\file\" )", property $ ( W.normalise "c:/file" == "C:\\file" ) == ( LW.normalise "c:/file" == "C:\\file" )) ,("( W.normalise \"/file\" == \"\\\\file\" ) == ( LW.normalise \"/file\" == \"\\\\file\" )", property $ ( W.normalise "/file" == "\\file" ) == ( LW.normalise "/file" == "\\file" )) ,("( W.normalise \"\\\\\" == \"\\\\\" ) == ( LW.normalise \"\\\\\" == \"\\\\\" )", property $ ( W.normalise "\\" == "\\" ) == ( LW.normalise "\\" == "\\" )) ,("( W.normalise \"/./\" == \"\\\\\" ) == ( LW.normalise \"/./\" == \"\\\\\" )", property $ ( W.normalise "/./" == "\\" ) == ( LW.normalise "/./" == "\\" )) ,("( P.normalise \".\" == \".\" ) == ( LP.normalise \".\" == \".\" )", property $ ( P.normalise "." == "." ) == ( LP.normalise "." == "." )) ,("( W.normalise \".\" == \".\" ) == ( LW.normalise \".\" == \".\" )", property $ ( W.normalise "." == "." ) == ( LW.normalise "." == "." )) ,("( P.normalise \"./\" == \"./\" ) == ( LP.normalise \"./\" == \"./\" )", property $ ( P.normalise "./" == "./" ) == ( LP.normalise "./" == "./" )) ,("( P.normalise \"./.\" == \"./\" ) == ( LP.normalise \"./.\" == \"./\" )", property $ ( P.normalise "./." == "./" ) == ( LP.normalise "./." == "./" )) ,("( P.normalise \"/./\" == \"/\" ) == ( LP.normalise \"/./\" == \"/\" )", property $ ( P.normalise "/./" == "/" ) == ( LP.normalise "/./" == "/" )) ,("( P.normalise \"/\" == \"/\" ) == ( LP.normalise \"/\" == \"/\" )", property $ ( P.normalise "/" == "/" ) == ( LP.normalise "/" == "/" )) ,("( P.normalise \"bob/fred/.\" == \"bob/fred/\" ) == ( LP.normalise \"bob/fred/.\" == \"bob/fred/\" )", property $ ( P.normalise "bob/fred/." == "bob/fred/" ) == ( LP.normalise "bob/fred/." == "bob/fred/" )) ,("( P.normalise \"//home\" == \"/home\" ) == ( LP.normalise \"//home\" == \"/home\" )", property $ ( P.normalise "//home" == "/home" ) == ( LP.normalise "//home" == "/home" )) ,("( P.isValid \"\" == False ) == ( LP.isValid \"\" == False )", property $ ( P.isValid "" == False ) == ( LP.isValid "" == False )) ,("( W.isValid \"\" == False ) == ( LW.isValid \"\" == False )", property $ ( W.isValid "" == False ) == ( LW.isValid "" == False )) ,("( P.isValid \"\\0\" == False ) == ( LP.isValid \"\\0\" == False )", property $ ( P.isValid "\0" == False ) == ( LP.isValid "\0" == False )) ,("( W.isValid \"\\0\" == False ) == ( LW.isValid \"\\0\" == False )", property $ ( W.isValid "\0" == False ) == ( LW.isValid "\0" == False )) ,("( P.isValid \"/random_ path:*\" == True ) == ( LP.isValid \"/random_ path:*\" == True )", property $ ( P.isValid "/random_ path:*" == True ) == ( LP.isValid "/random_ path:*" == True )) ,("( P.isValid x == not (null x) ) == ( LP.isValid x == not (null x) )", property $ \(QFilePath x) -> ( P.isValid x == not (null x) ) == ( LP.isValid x == not (null x) )) ,("( W.isValid \"c:\\\\test\" == True ) == ( LW.isValid \"c:\\\\test\" == True )", property $ ( W.isValid "c:\\test" == True ) == ( LW.isValid "c:\\test" == True )) ,("( W.isValid \"c:\\\\test:of_test\" == False ) == ( LW.isValid \"c:\\\\test:of_test\" == False )", property $ ( W.isValid "c:\\test:of_test" == False ) == ( LW.isValid "c:\\test:of_test" == False )) ,("( W.isValid \"test*\" == False ) == ( LW.isValid \"test*\" == False )", property $ ( W.isValid "test*" == False ) == ( LW.isValid "test*" == False )) ,("( W.isValid \"c:\\\\test\\\\nul\" == False ) == ( LW.isValid \"c:\\\\test\\\\nul\" == False )", property $ ( W.isValid "c:\\test\\nul" == False ) == ( LW.isValid "c:\\test\\nul" == False )) ,("( W.isValid \"c:\\\\test\\\\prn.txt\" == False ) == ( LW.isValid \"c:\\\\test\\\\prn.txt\" == False )", property $ ( W.isValid "c:\\test\\prn.txt" == False ) == ( LW.isValid "c:\\test\\prn.txt" == False )) ,("( W.isValid \"c:\\\\nul\\\\file\" == False ) == ( LW.isValid \"c:\\\\nul\\\\file\" == False )", property $ ( W.isValid "c:\\nul\\file" == False ) == ( LW.isValid "c:\\nul\\file" == False )) ,("( W.isValid \"\\\\\\\\\" == False ) == ( LW.isValid \"\\\\\\\\\" == False )", property $ ( W.isValid "\\\\" == False ) == ( LW.isValid "\\\\" == False )) ,("( W.isValid \"\\\\\\\\\\\\foo\" == False ) == ( LW.isValid \"\\\\\\\\\\\\foo\" == False )", property $ ( W.isValid "\\\\\\foo" == False ) == ( LW.isValid "\\\\\\foo" == False )) ,("( W.isValid \"\\\\\\\\?\\\\D:file\" == False ) == ( LW.isValid \"\\\\\\\\?\\\\D:file\" == False )", property $ ( W.isValid "\\\\?\\D:file" == False ) == ( LW.isValid "\\\\?\\D:file" == False )) ,("( W.isValid \"foo\\tbar\" == False ) == ( LW.isValid \"foo\\tbar\" == False )", property $ ( W.isValid "foo\tbar" == False ) == ( LW.isValid "foo\tbar" == False )) ,("( W.isValid \"nul .txt\" == False ) == ( LW.isValid \"nul .txt\" == False )", property $ ( W.isValid "nul .txt" == False ) == ( LW.isValid "nul .txt" == False )) ,("( W.isValid \" nul.txt\" == True ) == ( LW.isValid \" nul.txt\" == True )", property $ ( W.isValid " nul.txt" == True ) == ( LW.isValid " nul.txt" == True )) ,("( P.isValid (P.makeValid x) ) == ( LP.isValid (LP.makeValid x) )", property $ \(QFilePath x) -> ( P.isValid (P.makeValid x) ) == ( LP.isValid (LP.makeValid x) )) ,("( W.isValid (W.makeValid x) ) == ( LW.isValid (LW.makeValid x) )", property $ \(QFilePath x) -> ( W.isValid (W.makeValid x) ) == ( LW.isValid (LW.makeValid x) )) ,("( P.isValid x ==> P.makeValid x == x ) == ( LP.isValid x ==> LP.makeValid x == x )", property $ \(QFilePath x) -> ( P.isValid x ==> P.makeValid x == x ) == ( LP.isValid x ==> LP.makeValid x == x )) ,("( W.isValid x ==> W.makeValid x == x ) == ( LW.isValid x ==> LW.makeValid x == x )", property $ \(QFilePath x) -> ( W.isValid x ==> W.makeValid x == x ) == ( LW.isValid x ==> LW.makeValid x == x )) ,("( P.makeValid \"\" == \"_\" ) == ( LP.makeValid \"\" == \"_\" )", property $ ( P.makeValid "" == "_" ) == ( LP.makeValid "" == "_" )) ,("( W.makeValid \"\" == \"_\" ) == ( LW.makeValid \"\" == \"_\" )", property $ ( W.makeValid "" == "_" ) == ( LW.makeValid "" == "_" )) ,("( P.makeValid \"file\\0name\" == \"file_name\" ) == ( LP.makeValid \"file\\0name\" == \"file_name\" )", property $ ( P.makeValid "file\0name" == "file_name" ) == ( LP.makeValid "file\0name" == "file_name" )) ,("( W.makeValid \"file\\0name\" == \"file_name\" ) == ( LW.makeValid \"file\\0name\" == \"file_name\" )", property $ ( W.makeValid "file\0name" == "file_name" ) == ( LW.makeValid "file\0name" == "file_name" )) ,("( W.makeValid \"c:\\\\already\\\\/valid\" == \"c:\\\\already\\\\/valid\" ) == ( LW.makeValid \"c:\\\\already\\\\/valid\" == \"c:\\\\already\\\\/valid\" )", property $ ( W.makeValid "c:\\already\\/valid" == "c:\\already\\/valid" ) == ( LW.makeValid "c:\\already\\/valid" == "c:\\already\\/valid" )) ,("( W.makeValid \"c:\\\\test:of_test\" == \"c:\\\\test_of_test\" ) == ( LW.makeValid \"c:\\\\test:of_test\" == \"c:\\\\test_of_test\" )", property $ ( W.makeValid "c:\\test:of_test" == "c:\\test_of_test" ) == ( LW.makeValid "c:\\test:of_test" == "c:\\test_of_test" )) ,("( W.makeValid \"test*\" == \"test_\" ) == ( LW.makeValid \"test*\" == \"test_\" )", property $ ( W.makeValid "test*" == "test_" ) == ( LW.makeValid "test*" == "test_" )) ,("( W.makeValid \"c:\\\\test\\\\nul\" == \"c:\\\\test\\\\nul_\" ) == ( LW.makeValid \"c:\\\\test\\\\nul\" == \"c:\\\\test\\\\nul_\" )", property $ ( W.makeValid "c:\\test\\nul" == "c:\\test\\nul_" ) == ( LW.makeValid "c:\\test\\nul" == "c:\\test\\nul_" )) ,("( W.makeValid \"c:\\\\test\\\\prn.txt\" == \"c:\\\\test\\\\prn_.txt\" ) == ( LW.makeValid \"c:\\\\test\\\\prn.txt\" == \"c:\\\\test\\\\prn_.txt\" )", property $ ( W.makeValid "c:\\test\\prn.txt" == "c:\\test\\prn_.txt" ) == ( LW.makeValid "c:\\test\\prn.txt" == "c:\\test\\prn_.txt" )) ,("( W.makeValid \"c:\\\\test/prn.txt\" == \"c:\\\\test/prn_.txt\" ) == ( LW.makeValid \"c:\\\\test/prn.txt\" == \"c:\\\\test/prn_.txt\" )", property $ ( W.makeValid "c:\\test/prn.txt" == "c:\\test/prn_.txt" ) == ( LW.makeValid "c:\\test/prn.txt" == "c:\\test/prn_.txt" )) ,("( W.makeValid \"c:\\\\nul\\\\file\" == \"c:\\\\nul_\\\\file\" ) == ( LW.makeValid \"c:\\\\nul\\\\file\" == \"c:\\\\nul_\\\\file\" )", property $ ( W.makeValid "c:\\nul\\file" == "c:\\nul_\\file" ) == ( LW.makeValid "c:\\nul\\file" == "c:\\nul_\\file" )) ,("( W.makeValid \"\\\\\\\\\\\\foo\" == \"\\\\\\\\drive\" ) == ( LW.makeValid \"\\\\\\\\\\\\foo\" == \"\\\\\\\\drive\" )", property $ ( W.makeValid "\\\\\\foo" == "\\\\drive" ) == ( LW.makeValid "\\\\\\foo" == "\\\\drive" )) ,("( W.makeValid \"\\\\\\\\?\\\\D:file\" == \"\\\\\\\\?\\\\D:\\\\file\" ) == ( LW.makeValid \"\\\\\\\\?\\\\D:file\" == \"\\\\\\\\?\\\\D:\\\\file\" )", property $ ( W.makeValid "\\\\?\\D:file" == "\\\\?\\D:\\file" ) == ( LW.makeValid "\\\\?\\D:file" == "\\\\?\\D:\\file" )) ,("( W.makeValid \"nul .txt\" == \"nul _.txt\" ) == ( LW.makeValid \"nul .txt\" == \"nul _.txt\" )", property $ ( W.makeValid "nul .txt" == "nul _.txt" ) == ( LW.makeValid "nul .txt" == "nul _.txt" )) ,("( W.isRelative \"path\\\\test\" == True ) == ( LW.isRelative \"path\\\\test\" == True )", property $ ( W.isRelative "path\\test" == True ) == ( LW.isRelative "path\\test" == True )) ,("( W.isRelative \"c:\\\\test\" == False ) == ( LW.isRelative \"c:\\\\test\" == False )", property $ ( W.isRelative "c:\\test" == False ) == ( LW.isRelative "c:\\test" == False )) ,("( W.isRelative \"c:test\" == True ) == ( LW.isRelative \"c:test\" == True )", property $ ( W.isRelative "c:test" == True ) == ( LW.isRelative "c:test" == True )) ,("( W.isRelative \"c:\\\\\" == False ) == ( LW.isRelative \"c:\\\\\" == False )", property $ ( W.isRelative "c:\\" == False ) == ( LW.isRelative "c:\\" == False )) ,("( W.isRelative \"c:/\" == False ) == ( LW.isRelative \"c:/\" == False )", property $ ( W.isRelative "c:/" == False ) == ( LW.isRelative "c:/" == False )) ,("( W.isRelative \"c:\" == True ) == ( LW.isRelative \"c:\" == True )", property $ ( W.isRelative "c:" == True ) == ( LW.isRelative "c:" == True )) ,("( W.isRelative \"\\\\\\\\foo\" == False ) == ( LW.isRelative \"\\\\\\\\foo\" == False )", property $ ( W.isRelative "\\\\foo" == False ) == ( LW.isRelative "\\\\foo" == False )) ,("( W.isRelative \"\\\\\\\\?\\\\foo\" == False ) == ( LW.isRelative \"\\\\\\\\?\\\\foo\" == False )", property $ ( W.isRelative "\\\\?\\foo" == False ) == ( LW.isRelative "\\\\?\\foo" == False )) ,("( W.isRelative \"\\\\\\\\?\\\\UNC\\\\foo\" == False ) == ( LW.isRelative \"\\\\\\\\?\\\\UNC\\\\foo\" == False )", property $ ( W.isRelative "\\\\?\\UNC\\foo" == False ) == ( LW.isRelative "\\\\?\\UNC\\foo" == False )) ,("( W.isRelative \"/foo\" == True ) == ( LW.isRelative \"/foo\" == True )", property $ ( W.isRelative "/foo" == True ) == ( LW.isRelative "/foo" == True )) ,("( W.isRelative \"\\\\foo\" == True ) == ( LW.isRelative \"\\\\foo\" == True )", property $ ( W.isRelative "\\foo" == True ) == ( LW.isRelative "\\foo" == True )) ,("( P.isRelative \"test/path\" == True ) == ( LP.isRelative \"test/path\" == True )", property $ ( P.isRelative "test/path" == True ) == ( LP.isRelative "test/path" == True )) ,("( P.isRelative \"/test\" == False ) == ( LP.isRelative \"/test\" == False )", property $ ( P.isRelative "/test" == False ) == ( LP.isRelative "/test" == False )) ,("( P.isRelative \"/\" == False ) == ( LP.isRelative \"/\" == False )", property $ ( P.isRelative "/" == False ) == ( LP.isRelative "/" == False )) ,("( P.isAbsolute x == not (P.isRelative x) ) == ( LP.isAbsolute x == not (LP.isRelative x) )", property $ \(QFilePath x) -> ( P.isAbsolute x == not (P.isRelative x) ) == ( LP.isAbsolute x == not (LP.isRelative x) )) ,("( W.isAbsolute x == not (W.isRelative x) ) == ( LW.isAbsolute x == not (LW.isRelative x) )", property $ \(QFilePath x) -> ( W.isAbsolute x == not (W.isRelative x) ) == ( LW.isAbsolute x == not (LW.isRelative x) )) ]