let add_extensions tags files =
let open Result in
let extensions = default_extensions tags in
let rec loop exts fnames acc =
match exts, fnames with
| [], _ -> return (List.rev acc, fnames)
| at_least_one :: _, [] -> fail (`tags `not_enough_filenames)
| ext :: more_exts, file :: more_files ->
loop more_exts more_files (sprintf "%s.%s" file ext :: acc)
in
loop extensions files []