val usage: string -> 'a val usage_default: int -> 'a val main: int -> (string -> unit) array -> string list -> unit type 'a monoid = {id: 'a; op: 'a -> 'a -> 'a; op_name: string; pp: Format.formatter -> 'a -> unit} val fold_list: 'a monoid -> 'a list -> 'a val mult: int monoid val add: int monoid val print_fold: ?format:bool -> 'a monoid -> 'a list -> unit val print_prod: ?format:bool -> int list -> unit val print_sum: ?format:bool -> int list -> unit