sig
  type ('v, 'a) t
  val empty : 'a -> ('v, 'a) Common.Span.t
  val single : 'v -> 'a -> 'a -> ('v, 'a) Common.Span.t
  val merge :
    ('a -> 'a -> 'a) ->
    ('v, 'a) Common.Span.t ->
    ('v, 'a) Common.Span.t -> ('v, 'a) Common.Span.t
  val map : ('a -> 'b) -> ('v, 'a) Common.Span.t -> ('v, 'b) Common.Span.t
  val iter : ('v -> 'a -> unit) -> ('v, 'a) Common.Span.t -> unit
  val iter2 :
    ('v -> 'a -> 'a -> unit) ->
    ('v, 'a) Common.Span.t -> ('v, 'a) Common.Span.t -> unit
  val get : ('v, 'a) Common.Span.t -> 'v -> 'a
end