let list_map : 'a list repr -> f:('a -> 'b) repr -> 'b list repr = fun l ~f ->
let ann_l = AF.get_provenance l in
(* let ann_f = AF.get_functional_provenance f in *)
match AF.get_file l with
| List l ->
let applied_annotated =
List.map ~f:(fun v ->
apply f (v |> AF.with_provenance "X" [])) l in
let prov =
("list", ann_l) ::
List.map applied_annotated ~f:(fun x -> "applied", AF.get_provenance x)
in
List (List.map applied_annotated ~f:AF.get_file)
|> AF.with_provenance "list-map" prov
| _ -> assert false