let map_tr f l =  let rec aux acc = function
  | [] -> List.rev acc
  | hd :: tl -> aux (f hd :: acc) tl
in aux [] l