System.Directory (was RE: Proposal for a new I/O library design)

Ben Rudiak-Gould benrg@dark.darkweb.com
Mon, 28 Jul 2003 15:46:24 -0700 (PDT)


On Mon, 28 Jul 2003, Wolfgang Thaller wrote:

> It's not that easy. Case sensitivity is a property of a file system, 
> not of the operating system.

Actually, it's not even that easy. The NT native API allows you to specify
case sensitivity as a flag when creating or opening a file in any
directory (at least on NTFS). You can create file entries this way which
are inaccessible from the Win32 subsystem because they're shadowed by
other names in the same directory which differ only in case.

If we ignore that complication, I think the right way to handle this is
with dIsCaseSensitive :: Directory -> IO Bool. Assuming, as always, that
there's a way to implement that. Or perhaps it should be Maybe Bool
instead of Bool.


> isCaseSensitive :: FilePath -> IO Bool

I don't think it's clear what this should mean. Assuming you have a
case-insensitive filesystem rooted at /mnt, what should
isCaseSensitive "/mnt" return? The filesystem rooted there is
case-insensitive, but the pathname passed to the function is 100%
case-sensitive.

(This also has the usual problems associated with any function which uses
pathnames. See my comments on the Libraries list.)


-- Ben