<div dir="ltr">I am strong -1 on this proposal, due to the arguments<div>of Joachim, unless we are getting the semantics right.</div><div>Are we?</div><div><br></div><div>By semantics, I mean just the lowest-level definition</div><div>of what a path is made of.</div><div><br></div><div>On POSIX, it's a raw string of bytes, with interpretation</div><div>in any human-readable way delegated to the application.</div><div><br></div><div>On Mac OS X, it's normalized Unicode. The important<br></div><div>point is *normalized* - if you create a FilePath from two</div><div>different Unicode strings that have the same normalized</div><div>form, the result FilePaths must be equal on Mac OS X.</div><div><br></div><div><div>On Windows, it's UTF-16. Basically, modulo the quirks.</div><div><br></div></div><div>Correct semantics means:</div><div><br></div><div>1. There are different FilePath types for each platform,</div><div>because the semantics of a path are vastly different for each.</div><div><br></div><div>2. By default, the FilePath for the current platform is used.</div><div>But the FilePaths for other platforms are also available,</div><div>and there is a simple API for best-effort conversion</div><div>between them.</div><div><br></div><div>Will this proposal provide that? If not, don't do this to us.</div><div>Please.</div><div><br></div><div><div class="gmail_quote"><div dir="ltr">Joachim Breitner wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">unless proven wrong, I assume that this breaks lots of code. So by<br>
default, I am doubtful towards that proposal.<br>
<br>
Also, the argument about inefficiency does not convince me. In a<br>
Prelude where "type String = [Char]", this is – as bad as it may be –<br>
consistent and expected. Just like you manually have to reach out for<br>
dedicated string types if you want efficient Haskell, you can manually<br>
reach out for dedicated FilePath libraries. I doubt that it is a good<br>
idea to fix the String problem in small, isolated chunks.<br>
<br>
However, the argument that, depending on the system, "type FilePath =<br>
String" is simply wrong (because the semantics of file paths are not<br>
unicode points), is one that I buy in. On such systems, the Prelude is,<br>
in a moral sense, wrongly typed, and the situation is comparable to a<br>
hypothetical "type String = [Word8]" – which is just wrong in a world<br>
of unicode. So for me, the faithful representation of system filepaths<br>
makes this proposal interesting. I like it when Haskell “gets it<br>
right”.<br></blockquote><div><br></div><div>The problem is that I'm not sure this proposal "gets it right".</div><div>And if not, I agree with your arguments that this proposal</div><div>would not be worth the pain.</div></div></div></div>