sig
  exception Error
  type token =
      WITH
    | VAL
    | UNKNOWN
    | UNDERSCORE
    | UIDENT of string
    | TYPE
    | TO
    | THEN
    | TERM
    | TAKING
    | TAKE
    | TAGOF
    | STAR of string
    | SEMI
    | RPAREN
    | REC
    | RBRACKET
    | RBRACE
    | PLUS of string
    | PERM
    | OWNS
    | OPPREFIX of string
    | OPINFIX4 of string
    | OPINFIX3 of string
    | OPINFIX2 of string
    | OPINFIX1 of string
    | OPINFIX0d of string
    | OPINFIX0c of string
    | OPINFIX0b of string
    | OPINFIX0a of string
    | OPEN
    | MUTABLE
    | MINUS of string
    | MATCH
    | LPAREN
    | LIDENT of string
    | LET
    | LBRACKET
    | LBRACE
    | LARROW
    | INT of int
    | IN
    | IF
    | GIVE
    | FUN
    | FROM
    | FAIL
    | FACT
    | EXPLAIN
    | EXCLUSIVE
    | EQUAL of string
    | EOF
    | END
    | EMPTY
    | ELSE
    | DYNAMIC
    | DUPLICABLE
    | DOT
    | DBLARROW
    | DATA
    | CONSUMES
    | COMMA
    | COLONEQUAL of string
    | COLONCOLON
    | COLON
    | BUILTIN
    | BEGIN
    | BAR
    | AT
    | ASSERT
    | AS
    | ARROW
    | AND
    | ADOPTS
    | ABSTRACT
  val interface :
    (Lexing.lexbuf -> Grammar.token) ->
    Lexing.lexbuf -> SurfaceSyntax.interface
  val implementation :
    (Lexing.lexbuf -> Grammar.token) ->
    Lexing.lexbuf -> SurfaceSyntax.implementation
end