sig
  type t =
      Stop
    | Type of Position.t
    | Left of Position.t
    | Right of Position.t
    | Head of Position.t
    | Arg of int * Position.t
    | Body of Position.t
  type position = Position.t
  val stop : Position.t
  val type_ : Position.t -> Position.t
  val left : Position.t -> Position.t
  val right : Position.t -> Position.t
  val head : Position.t -> Position.t
  val arg : int -> Position.t -> Position.t
  val opp : Position.t -> Position.t
  val rev : Position.t -> Position.t
  val append : Position.t -> Position.t -> Position.t
  val compare : Position.t -> Position.t -> int
  val eq : Position.t -> Position.t -> bool
  val hash : Position.t -> int
  val pp : t CCFormat.printer
  val to_string : t -> string
  module Build :
    sig
      type t
      val empty : Position.Build.t
      val to_pos : Position.Build.t -> Position.position
      val of_pos : Position.position -> Position.Build.t
      val prefix : Position.position -> Position.Build.t -> Position.Build.t
      val suffix : Position.Build.t -> Position.position -> Position.Build.t
      val type_ : Position.Build.t -> Position.Build.t
      val left : Position.Build.t -> Position.Build.t
      val right : Position.Build.t -> Position.Build.t
      val body : Position.Build.t -> Position.Build.t
      val head : Position.Build.t -> Position.Build.t
      val arg : int -> Position.Build.t -> Position.Build.t
      val pp : t CCFormat.printer
      val to_string : t -> string
    end
end