let reduce path =
let rec reduce_aux lst =
match lst with
ParentDir :: tl ->
begin
match reduce_aux tl with
Root s :: tl ->
Root s :: tl
| ParentDir :: tl ->
ParentDir :: ParentDir :: tl
| [] ->
ParentDir :: tl
| _ :: tl ->
tl
end
| (CurrentDir _) :: tl
| Component "" :: tl ->
(reduce_aux tl)
| Component s :: tl ->
Component s :: (reduce_aux tl)
| Root s :: tl ->
Root s :: (reduce_aux tl)
| [] ->
[]
in
List.rev (reduce_aux (List.rev path))