
On Wed, Jul 19, 2006 at 03:16:48AM +0100, Neil Mitchell wrote:
I tried to export a minimal set of operations that seem to me sufficient for everything not very platform-specific (though I am interested in counterexamples):
Anything to do with file extensions? Its also important (I feel) for people to have easy access to common operations, but I guess that is a design decision.
Personally, I don't care for the idea of doing anything with file extensions. Handling file extensions is a bit tricky, in the sense that it's ambiguous what the application actually wants, and so (unlike the other parts of the FilePath library, which reflect how the OS sees a FilePath) there's no real solution. e.g. is foo.ps.gz a .ps file, or just a .gz file or a .ps.gz file? I can open it with gv (a postscript viewer), but can't open any other .gz file with gv. In general, I feel that file extensions are most often useless, and a better approach to almost any use of them would be something like libmagic to identify files, or access to mailcap, for instance. Perhaps as part of a mime-support package, which would have something like: identifyMimeType :: FilePath -> IO String -- or ADT for mime types getMimeHandler :: FilePath -> IO (IO FilePath) -- te above returns a wrapped function that calls the mime handler for -- specified file Note that the latter is actually the more portable, as it wouldn't even need to use MIME as an intermediate, but could look up the handler based on file extension on platforms where that's appropriate. -- David Roundy