Put "Valid x =>" constraint on joinDrive QuickCheck property
authorThomas Miedema <thomasmiedema@gmail.com>
Tue, 28 Oct 2014 18:57:32 +0000 (19:57 +0100)
committerThomas Miedema <thomasmiedema@gmail.com>
Tue, 28 Oct 2014 19:19:39 +0000 (20:19 +0100)
commit7420444bb461968a5da58f6a5b8707b0a7efeb4e
tree770ac2bfbbaca02656f19b604d13866ad30a8872
parentd6613d73cf6da7c93db9739a8324f8f585ffbab6
Put "Valid x =>" constraint on joinDrive QuickCheck property

Counterexample:

    $ let x = "\\\\?\\D:file"
    $ splitDrive x
    ("\\\\?\\D:","file")
    $ uncurry joinDrive (splitDrive x)
    "\\\\?\\D:\\file"

The "problem" is that the current implementation of splitDrive can sometimes
return invalid drives, such as in the above example. However, if it wouldn't
do so, it would make the implementation of isValid and makeValid more
difficult.

My guideline is currently as follows: splitDrive makes the rough cut of what
is and what isn't a drive, isValid and makeValid finish the job, all other
functions assume drives and paths are valid.

This is also the reason joinDrive (=combineAlways) should not be changed to
not insert the extra slash, solely to handle an invalid path.
System/FilePath/Internal.hs