# Module type CamlinternalMenhirLib.IncrementalEngine.INCREMENTAL_ENGINE

    module type INCREMENTAL_ENGINE = sig .. end

    type token

    type production

    type 'a env

    type 'a checkpoint = private

`|` | `InputNeeded of `'a env``
`|` | `Shifting of `'a env * 'a env * bool``
`|` | `AboutToReduce of `'a env * production``
`|` | `HandlingError of `'a env``
`|` | `Accepted of `'a``
`|` | `Rejected`

    val offer : 'a checkpoint ->
           token *
           CamlinternalMenhirLib.IncrementalEngine.position *
           CamlinternalMenhirLib.IncrementalEngine.position ->
           'a checkpoint

    type strategy = [ `Legacy | `Simplified ]

    val resume : ?strategy:strategy ->
           'a checkpoint ->
           'a checkpoint

    type supplier = unit ->
           token *
           CamlinternalMenhirLib.IncrementalEngine.position *
           CamlinternalMenhirLib.IncrementalEngine.position

    val lexer_lexbuf_to_supplier : (Lexing.lexbuf ->
            token) ->
           Lexing.lexbuf ->
           supplier

    val loop : ?strategy:strategy ->
           supplier ->
           'a checkpoint ->
           'a

    val loop_handle : ('a -> 'answer) ->
           ('a checkpoint ->
            'answer) ->
           supplier ->
           'a checkpoint ->
           'answer

    val loop_handle_undo : ('a -> 'answer) ->
           ('a checkpoint ->
            'a checkpoint ->
            'answer) ->
           supplier ->
           'a checkpoint ->
           'answer

    val shifts : 'a checkpoint ->
           'a env option

    val acceptable : 'a checkpoint ->
           token ->
           CamlinternalMenhirLib.IncrementalEngine.position -> bool

    type 'a lr1state

    val number : 'a lr1state -> int

    val production_index : production -> int

    val find_production : int -> production

    type element =

`|` | `Element : `'a lr1state * 'a * CamlinternalMenhirLib.IncrementalEngine.position * CamlinternalMenhirLib.IncrementalEngine.position` -> `element``

    type stack = element
           CamlinternalMenhirLib.General.stream

    val stack : 'a env ->
           stack

    val top : 'a env ->
           element option

    val pop_many : int ->
           'a env ->
           'a env option

    val get : int ->
           'a env ->
           element option

    val current_state_number : 'a env -> int

    val equal : 'a env ->
           'a env -> bool

    val positions : 'a env ->
           CamlinternalMenhirLib.IncrementalEngine.position *
           CamlinternalMenhirLib.IncrementalEngine.position

    val env_has_default_reduction : 'a env -> bool

    val state_has_default_reduction : 'a lr1state ->
           bool

    val pop : 'a env ->
           'a env option

    val force_reduction : production ->
           'a env ->
           'a env

    val input_needed : 'a env ->
           'a checkpoint