
-- | Normalize the case of a file path. On Unix, this returns the path unchanged; -- on case-insensitive filesystems, it converts the path to lowercase. -- On Windows, it also converts forward slashes to backward slashes. normalizeCase :: FilePath -> FilePath
I'm afraid I don't like this function. The case-insensitive file systems used on Windows and Mac OS X by default are _case-preserving_ [well, FAT32 is almost case-preserving], so if you use normalizeCase in any other situation than normalizeCase a == normalizeCase b, then it'll probably be wrong. Also, it has been discussed before that Mac OS X, Linux, and probably even Windows support mounting both case-sensitive and case-insensitive file systems. So whether a file name should be case sensitive really depends on where a file is. So maybe we need normalizeCase :: FilePath -> IO FilePath ... where the FilePath must refer to an existing file or directory. That's definitely not a simple path utility function any more. Are there enough situations where the simple but not quite correct pure normalizeCase function would be The Right Thing (or at least Sufficiently Close To The Right Thing)? Cheers, Wolfgang