anchor.diff:          new (d,a) = {Dest = d; Ast = a}
       end
   
  -type ParserDebugFuns = {
  +type ParserDebugFuns<'TokenType> = {
       drawGSSDot : string -> unit
  +    /// If you need more then one last token
  +    lastTokens : int -> 'TokenType[]
   }
   
   type ParseResult<'TokenType> =
       | Success of Tree<'TokenType>
  -    | Error of int * 'TokenType * string * ParserDebugFuns
  +    | Error of int * 'TokenType * string * ParserDebugFuns<'TokenType>
   
   
   /// Compare vertex like a pair: (level, state)
  
positive.code:                 else
                      incr curInd
                      shift !curInd
          let debugFuns () =
              let vertices = usedStates.ToArray() |> Array.map (fun i -> stateToVertex.[i])
              {drawGSSDot = drawDot parserSource.TokenToNumber tokens parserSource.LeftSide vertices parserSource.NumToString}
          if errorIndex <> -1 then
              Error (errorIndex, !curToken, "Parse error", debugFuns ())
          else
  
negative.code:         if parserSource.AcceptEmptyInput then
              Success <| new Tree<_>(null, getEpsilon startNonTerm, null)
          else
              Error (0, Unchecked.defaultof<'TokenType>, "This grammar cannot accept empty string",
                      {
                          drawGSSDot = fun _ -> ()
                          lastTokens = fun _ -> [||]
                      })
      else
          // Currently processed token
          let curToken = ref enum.Current
  