sig
  val symbols : Signature.t -> ID.t Sequence.t
  val types : Signature.t -> Type.t Sequence.t
  val to_seq : Signature.t -> (ID.t * Type.t) Sequence.t
  val of_seq : (ID.t * Type.t) Sequence.t -> Signature.t
  val add_seq : Signature.t -> (ID.t * Type.t) Sequence.t -> Signature.t
end