sig
  module Min : sig type t = int val append : t -> t -> t val zero : t end
  module Max : sig type t = int val append : t -> t -> t val zero : t end
  module Sum : sig type t = int val append : t -> t -> t val zero : t end
  module Product : sig type t = int val append : t -> t -> t val zero : t end
end