let rec reduce x =
let rec self x acc =
match x with
| N -> acc
| A _ | Sh _ | P _ | Px _ | V _ -> x :: acc
| S l -> List.fold_right self l acc
| T tags -> self (!tag_handler tags) acc
| Quote s -> Quote (reduce s) :: acc in
match self x [] with
| [] -> N
| [x] -> x
| xs -> S xs