sig
  type 'a formatter = Format.formatter -> '-> unit
  val get : ('a, 'b) Hashtbl.t -> '-> 'b option
  module type QUEUE =
    sig
      type 'a t
      val empty : unit -> 'Common.QUEUE.t
      val singleton : '-> 'Common.QUEUE.t
      val push : 'Common.QUEUE.t -> '-> unit
      val pop : 'Common.QUEUE.t -> 'a option
      val fold : ('-> '-> 'b) -> '-> 'Common.QUEUE.t -> 'b
    end
  module IntSet : Sets.T
  type int_set = IntSet.t
  type 'a hval = 'Hashcons.hash_consed
  type 'a hset = 'Hset.t
  module Set :
    sig
      type 'a t
      val empty : 'Common.Set.t
      val singleton : '-> 'Common.Set.t
      val union : 'Common.Set.t -> 'Common.Set.t -> 'Common.Set.t
      val inter : 'Common.Set.t -> 'Common.Set.t -> 'Common.Set.t
      val diff : 'Common.Set.t -> 'Common.Set.t -> 'Common.Set.t
      val mem : '-> 'Common.Set.t -> bool
      val is_empty : 'Common.Set.t -> bool
      val subset : 'Common.Set.t -> 'Common.Set.t -> bool
      val rem : '-> 'Common.Set.t -> 'Common.Set.t
      val add : '-> 'Common.Set.t -> 'Common.Set.t
      val map : ('-> 'b) -> 'Common.Set.t -> 'Common.Set.t
      val iter : ('-> unit) -> 'Common.Set.t -> unit
      val fold : ('-> '-> 'b) -> 'Common.Set.t -> '-> 'b
      val filter : ('-> bool) -> 'Common.Set.t -> 'Common.Set.t
      val exists : ('-> bool) -> 'Common.Set.t -> bool
      val for_all : ('-> bool) -> 'Common.Set.t -> bool
      val cardinal : 'Common.Set.t -> int
      val print :
        ?sep:string ->
        'Common.formatter -> 'Common.Set.t Common.formatter
    end
  type 'a set = 'Common.Set.t
  type ('v, 'k) gstring_ = ('v * ('k * bool) list) list
  type ('v, 'k) gstring = ('k * bool) list * ('v, 'k) Common.gstring_
  val print_gstring :
    'Common.formatter ->
    'Common.formatter -> ('v, 'k) Common.gstring Common.formatter
  val paren :
    int ->
    int ->
    ('b, 'c, 'd, 'e, 'f, 'g) Pervasives.format6 ->
    ('b, 'c, 'd, 'e, 'f, 'g) Pervasives.format6
  module Span :
    sig
      type ('v, 'a) t
      val empty : '-> ('v, 'a) Common.Span.t
      val single : '-> '-> '-> ('v, 'a) Common.Span.t
      val merge :
        ('-> '-> 'a) ->
        ('v, 'a) Common.Span.t ->
        ('v, 'a) Common.Span.t -> ('v, 'a) Common.Span.t
      val map :
        ('-> 'b) -> ('v, 'a) Common.Span.t -> ('v, 'b) Common.Span.t
      val iter : ('-> '-> unit) -> ('v, 'a) Common.Span.t -> unit
      val iter2 :
        ('-> '-> '-> unit) ->
        ('v, 'a) Common.Span.t -> ('v, 'a) Common.Span.t -> unit
      val get : ('v, 'a) Common.Span.t -> '-> 'a
    end
  type ('v, 's) span = ('v, 's) Common.Span.t
  val time : ('-> 'b) -> '-> float * 'b
  val memo_rec : ?n:int -> (('-> 'b) -> '-> 'b) -> '-> 'b
  val memo_rec1 :
    (('Common.hval -> 'b) -> 'Common.hval -> 'b) -> 'Common.hval -> 'b
  val memo_rec2 :
    (('Common.hval -> 'Common.hval -> 'c) ->
     'Common.hval -> 'Common.hval -> 'c) ->
    'Common.hval -> 'Common.hval -> 'c
  val next_line : Lexing.lexbuf -> unit
  val unexpected_char : Lexing.lexbuf -> 'a
  val parse :
    ?msg:string -> ('-> Lexing.lexbuf -> 'b) -> '-> Lexing.lexbuf -> 'b
end