basename p = reverse $ takeWhile (/= '/') $ reverse p dirname p = case reverse $ dropWhile (/= '/') $ reverse p of [] -> "." p' -> p'