struct   type t = {     file: File_type_specification.t;     provenance: Provenance_description.t;     functional: (t -> Provenance_description.t) option;   }   let with_provenance       ?functional       ?(string_arguments = []) ?(json_arguments = [])       name arguments file =     {       file;       provenance = {         Provenance_description. name; sub_tree_arguments = arguments;         string_arguments; json_arguments};       functional;     }   let get_file t = t.file   let get_provenance t = t.provenance   let get_functional_provenance t =     t.functional |> Option.value_exn ~msg:"get_functional_provenance" end