sig
  type 'a report_ele =
      Leaf of (unit -> string)
    | Tag of 'Rep_types.tag
    | List of 'Rep_types.liste
    | Cond of 'Rep_types.cond
    | Sub of 'Rep_types.sub
  and 'a tag = {
    mutable tag : string;
    mutable atts : (string * (unit -> string)) list;
    mutable tag_subs : 'Rep_types.report_ele list;
  }
  and 'a liste = {
    mutable list_subs : '-> 'Rep_types.report_ele list;
    mutable f : unit -> 'a list;
  }
  and 'a cond = {
    mutable cond : unit -> bool;
    mutable subs_then : 'Rep_types.report_ele list;
    mutable subs_else : 'Rep_types.report_ele list;
  }
  and 'a sub = { mutable sub_rep : unit -> 'Rep_types.report; }
  and 'a report = { mutable rep_eles : 'Rep_types.report_ele list; }
end