On Jul 26, 2006, at 1:47 PM, Neil Mitchell wrote:
Hi,
Perhaps instead:
directoryOf :: FilePath -> String
filenameOf :: FilePath -> String
extensionOf :: FilePath -> String
basenaneOf :: FilePath -> String
replaceFilename = joinFilePath . directoryOf
replaceDirectory = flip joinFilePath . filenameOf
Trying to design a consistent naming system, it helps if we all agree
on what the various parts of a filepath are called, this is my draft
of that:
http://www-users.cs.york.ac.uk/~ndm/temp/filepath.png
With a better name for basename, if anyone can think of one.
"stem", perhaps? You could also, maybe, distinguish the "short
stem" (everything before the "extensions") from the "long stem"
everything before the "extension".
Once we have that, how about
takeElement :: FilePath -> String
dropElement :: FilePath -> String
replaceElement :: FilePath -> String -> FilePath
addElement :: FilePath -> String -> FilePath
splitElement :: FilePath -> (String, String)
joinElement :: String -> String -> FilePath
With the restriction that not all of these are provided. Some don't
make sense (splitBaseName, dropBaseName), some are implemented via
combine (addFileName, joinFileName), some are redundant (addExtensions
== addExtension)
I'm also debating whether split/join should be exported, since they
are less likely to be used and can easily be written as a take/drop
pair. And of course, a bigger interface is harder to understand.
Opinions on this? It's easier to tweak a specification than the
actual code :)
Thanks
Neil
Rob Dockins
Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
-- TMBG
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe