sig
  type test_args = { t_log_level : ProglangUtils.Log.level; }
  type mode = LexOnly | ParseOnly | GenOnly | Solve
  type normal_args = {
    log_file : ProglangUtils.Path.abs;
    log_level : ProglangUtils.Log.level;
    file : ProglangUtils.Path.abs option;
    mode : Args.mode;
    with_loc : bool;
  }
  type t = NormalMode of Args.normal_args | TestMode of Args.test_args
  val parse : unit -> Args.t
  val string_of : Args.t -> string
  val align :
    (Arg.key * Arg.spec * Arg.doc list) list ->
    (Arg.key * Arg.spec * Arg.doc) list
  exception Error of string
end