functor
  (L : ParseLocation.S) (T : sig type t val atom : ?loc:L.t -> int -> t end) (S : 
  sig
    type t
    val p_cnf : ?loc:L.t -> int -> int -> t
    val clause : ?loc:L.t -> T.t list -> t
  end->
  sig
    type token
    type statement = S.t
    module Lexer : sig exception Error val token : Lexing.lexbuf -> token end
    module Parser :
      sig
        exception Error
        val file :
          (Lexing.lexbuf -> token) -> Lexing.lexbuf -> statement list
        val input :
          (Lexing.lexbuf -> token) -> Lexing.lexbuf -> statement option
        module MenhirInterpreter :
          sig
            type token = token
            type env
            type production
            type 'a checkpoint = private
                InputNeeded of env
              | Shifting of env * env * bool
              | AboutToReduce of env * production
              | HandlingError of env
              | Accepted of 'a
              | Rejected
            val offer :
              'a checkpoint ->
              token * Lexing.position * Lexing.position -> 'a checkpoint
            val resume : 'a checkpoint -> 'a checkpoint
            type supplier = unit -> token * Lexing.position * Lexing.position
            val lexer_lexbuf_to_supplier :
              (Lexing.lexbuf -> token) -> Lexing.lexbuf -> supplier
            val loop : supplier -> 'a checkpoint -> 'a
            val loop_handle :
              ('-> 'answer) ->
              ('a checkpoint -> 'answer) ->
              supplier -> 'a checkpoint -> 'answer
            val loop_handle_undo :
              ('-> 'answer) ->
              ('a checkpoint -> 'a checkpoint -> 'answer) ->
              supplier -> 'a checkpoint -> 'answer
            val loop_test :
              (env -> 'accu -> 'accu) -> 'a checkpoint -> 'accu -> 'accu
            val acceptable :
              'a checkpoint -> token -> Lexing.position -> bool
            type 'a lr1state
            val number : 'a lr1state -> int
            type element =
                Element : 'a lr1state * 'a * Lexing.position *
                  Lexing.position -> element
            type stack = element MenhirLib.General.stream
            val stack : env -> stack
            val positions : env -> Lexing.position * Lexing.position
            val has_default_reduction : env -> bool
          end
        module Incremental :
          sig
            val input :
              Lexing.position ->
              statement option MenhirInterpreter.checkpoint
          end
      end
    val find : ?dir:string -> string -> string option
    val parse_file : string -> statement list
    val parse_input :
      [ `File of string | `Stdin ] -> unit -> statement option
  end