filepath should not return trailing path separators

Simon Marlow simonmarhaskell at gmail.com
Fri Jun 15 04:05:54 EDT 2007


Bryan O'Sullivan wrote:
> Hi, Neil -
> 
> I'm writing some filesystem traversal code using filepath at the moment, 
> and I am a bit disappointed to find it more error-prone and cumbersome 
> than I had hoped.
> 
> The root of my problem is that splitFileName leaves a trailing path 
> separator on the end of the first element of the tuple it returns:
> 
>   splitFileName "foo/bar" ==> ("foo/", "bar")
> 
> If I'm recursing up a file hierarchy towards the root directory (a 
> common thing to do), this trailing path separator is a pain.  Either I 
> forget that it's there and infinitely loop in the same directory over 
> and over again, due to this behaviour:
> 
>   splitFileName "foo/" ==> ("foo/", "")

FWIW I think you're right here.  But I thought I'd mention the following trick I 
cooked up recently.  It meant that I didn't run into the above problem, and 
might be relevant for what you're doing:

pathParents = scanl1 (</>) . splitDirectories
   -- > scanl1 (</>) (splitDirectories "/a/b/c")
   -- ["/","/a","/a/b","/a/b/c"]

Cheers,
	Simon


More information about the Libraries mailing list