Hello Neil, Thanks for the pointer Neil. I will read the site. Besides, it allows me to submit a fixed version since I just found a bug!
Cheers, - Marcus P.S. 452 black box tests of my little command utility, and I still forgot about a corner case. Now there are 454 black box test cases :). Neil Mitchell wrote: > Hi Marcus, > > Thanks for your suggestions. I'm a Windows user so aren't really > qualified to comment on these suggestions - it depends what Posix > users would like. I suggest you follow the Library Submission Process > - filepath is now a core library, and as such I don't have the > freedom/power to change it as I like, and it's generally something > lots of people should think about. > > http://www.haskell.org/haskellwiki/Library_submissions > > Thanks > > Neil > > PS. I'm off for 3 weeks starting very soon, so will be unlikely to > reply to any email thread for a long time :-) > > > On Thu, Sep 17, 2009 at 10:58 AM, Marcus D. Gabriel <mar...@gabriel.name> > wrote: > >> Hello Neil >> >> I used System.FilePath.Posix quite extensively recently, and I thank >> you for the package filepath. There were however two words that I >> needed which I could not construct from those in >> System.FilePath.Posix. They are maybe of interest to you and others. >> >> I submit these two words to you for consideration for inclusion in >> System.FilePath.Posix. Please change the names as you see fit. >> >> I do not know if they make sense for System.FilePath.Windows. If >> the do not make sense, then please feel free to drop them so as to >> preserve the interface. >> >> As requested, I Cc'ed the haskell-cafe, but I am not at the moment >> following these threads, so if anyone else responds, please Cc me >> if you wish. >> >> Thanks again and cheers, >> - Marcus >> >> P.S. Here they are. Although I use ksh(1) as an example, this is a >> feature of POSIX shells. >> >> >>> -- | 'reduceFilePath' returns a pathname that is reduced to canonical >>> -- form equivalent to that of ksh(1), that is, symbolic link names are >>> -- treated literally when finding the directory name. See @cd -L@ of >>> -- ksh(1). Specifically, extraneous separators @(\"/\")@, dot >>> -- @(\".\")@, and double-dot @(\"..\")@ directories are removed. >>> >>> reduceFilePath :: FilePath -> FilePath >>> reduceFilePath = joinPath . filePathComponents >>> >> This is in turn built on filePathComponents that does all the work. >> >> >>> filePathComponents :: FilePath -> [FilePath] >>> filePathComponents "" = [] >>> filePathComponents (c:cs) = >>> reverse $ snd $ foldl accumulate >>> (if c == pathSeparator then ([],["/"]) else >>> ([c],[])) >>> (cs++[pathSeparator]) >>> where >>> accumulate :: (String,[String]) -> Char -> (String,[String]) >>> accumulate (cs, css) c = >>> if c == pathSeparator >>> then ([],(if null cs then id else cons cs) css) >>> else (cs++[c],css) >>> cons :: String -> [String] -> [String] >>> cons cs css >>> | cs == "." = css >>> | cs /= ".." || null css = cs : css >>> | otherwise = >>> let hd = head css >>> tl = tail css >>> in if hd == [pathSeparator] >>> then css >>> else if hd == ".." >>> then cs : css >>> else if null tl >>> then ["."] >>> else tl -- Marcus D. Gabriel, Ph.D. Saint Louis, FRANCE http://www.marcus.gabriel.name mailto:mar...@gabriel.name Tel: +33.3.89.69.05.06 Portable: +33.6.34.56.07.75 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe