sig
  type ('a, 'b) sequenceable = {
    to_seq : '-> 'Sequence.t;
    of_seq : 'Sequence.t -> 'b;
  }
  type ('a, 'b) addable = { empty : 'b; add : '-> '-> 'b; }
  type 'a monoid = ('a, 'a) Sequence.TypeClass.addable
  type ('a, 'b) iterable = { iter : ('-> unit) -> '-> unit; }
  val sequenceable : ('a, 'Sequence.t) Sequence.TypeClass.sequenceable
  val iterable : ('a, 'Sequence.t) Sequence.TypeClass.iterable
  val monoid : 'Sequence.t Sequence.TypeClass.monoid
  val of_iterable :
    ('a, 'b) Sequence.TypeClass.iterable -> '-> 'Sequence.t
  val to_addable : ('a, 'b) Sequence.TypeClass.addable -> 'Sequence.t -> 'b
end