Adding System.FilePath

Ian Lynagh igloo at earth.li
Tue Mar 20 20:50:22 EDT 2007


On Fri, Mar 16, 2007 at 03:42:10PM +0100, Sven Panne wrote:
> On Friday 16 March 2007 15:10, Ian Lynagh wrote:
> > I'm not clear on exactly what you're proposing: would
> >
> >     getDirectoryContents "." >>= mapM_ removeFile
> >
> > remove all the files in ".", regardless of what my locale is, my OS is,
> > etc? i.e. would this solve my problem in
> >
> >     http://www.haskell.org/pipermail/libraries/2005-July/004189.html
> 
> OK, let's make this a bit more concrete and let's take Mac OS X as an example. 

I was really hoping for an answer along the lines of "yes" or "no"  :-)

> On this platform, peekCString would decode from UTF-8 to Unicode (probably 
> normalizing the Unicode string on the way),

Why normalise it? A lot of the time we'll just be converting back to a
filename later, so this sounds like wasted work.

> so no information is lost.

Right, the normalising won't lose information as the filesystem requires
fully denormalised(or whatever the right word is) filenames AIUI.

> OTOH, 
> withCString would encode the Unicode string to UTF-8 (decomposing on the way? 
> Wolfgang?).  Both functions are used by getDirectoryContents internally, so 
> this will be "Unicode-enabled" then, too. The main point here is that UTF-8 
> => Unicode => UTF-8 is lossless,

OK, so I think my answer is "Yes" for MacOS X, which makes sense as
both the filenames and strings are unicode.

> and the same holds for my proposed change 
> for *nices, too, as long as the local encoding is invertible in this sense. I 
> am not sure if there are encodings in use out there which do not have this 
> property, but even if they are: All e.g. Qt-based programs would share the 
> same problems.

I got lost somewhere along the way here. Linux filenames are (to a first
approximation) arbitrary sequences of word8s, unrelated to the "local
encoding". So I think the answer to my question is no,

    getDirectoryContents "." >>= mapM_ removeFile

might not remove everything in "." (if, say, my French friend created
them and we are using Linux/ext2)?


Thanks
Ian



More information about the Libraries mailing list