open Lexing type ('token, 'ast) historic_parser = (lexbuf -> 'token) -> lexbuf -> 'ast type ('token, 'ast) revised_parser = (unit -> 'token) -> 'ast let upgrade (p : ('token, 'ast) historic_parser) : ('token, 'ast) revised_parser = fun (next : unit -> 'token) -> let (* dummy *) lexbuf = Lexing.from_string "" and lexer lexbuf = next() in p lexer lexbuf let downgrade (p : ('token, 'ast) revised_parser) : ('token, 'ast) historic_parser = fun (lexer : lexbuf -> 'token) lexbuf -> let next () = lexer lexbuf in p next