 basename p = reverse $ takeWhile (/= '/') $ reverse p

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