Hi Neil,<br><br>On 7/17/06, <b class="gmail_sendername">Neil Mitchell</b> &lt;<a href="mailto:ndmitchell@gmail.com">ndmitchell@gmail.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Brian,<br><br>You sent this email just to me, and not to the list. If you indended<br>to send to the list then feel free to forward my bits on to the list.<br><br><br>&gt; I know that FilePath is defined by Haskell '98 as a String and so it cannot
<br>&gt; be changed. So, perhaps a new type or class should be created for this<br>&gt; library (hereafter &quot;GoodPath,&quot; although I am not suggesting that is the best<br>&gt; name).<br>The problem is people will have to marshal their data into this
<br>GoodPath, and marshal it out again. When people can shortcut that<br>marshalling, as the current readFile/writeFile definitions ensure they<br>can, they will. At that point you loose all safety because people will<br>
abuse it.</blockquote><div><br>I disagree. It would be trivial to create a new module that exported new definitions of file IO actions that operated on &quot;GoodPath&quot; instead of &quot;FilePath,&quot; transparently delegating to the original readFile/writeFile/etc. until they could be removed in the future. This would also support the &quot;SuperFilePath&quot; idea you mentioned. 
<br></div><br>Another thing I thought of would be a &quot;canonicalPath&quot; IO action (canonicalPath :: FilePath -&gt; IO FilePath) that returns a FilePath that implements case-preserving-case-insensitive matching. For example, if there is a file named &quot;Hello 
There.txt&quot; in C:\, then<br>(canonicalPath &quot;c:\hello there.txt &quot;) would give &quot;C:\Hello There.txt&quot;).<br><br>I think that the xxxDrive functions should only be exported from System.FilePath.Windows and no 
System.FilePath since it is unclear as to how they should be used effectively by cross-platform software.<br><br>- Brian<br></div>