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

Reply via email to