(* Lexical tokens for Mini-ML *)

type t =
  (* Symbols *)

  ARROW    (* "->" *)
| CONS     (* "::" *)
| CAT      (* "^"  *)
  (*| APPEND   (* "@"  *)*)

  (* Arithmetics *)

| MINUS    (* "-" *)
| PLUS     (* "+" *)
| SLASH    (* "/" *)
| TIMES    (* "*" *)

  (* Compounds *)

| LPAR     (* "(" *)
| RPAR     (* ")" *)
| LBRACKET (* "[" *)
| RBRACKET (* "]" *)
| LBRACE   (* "{" *)
| RBRACE   (* "}" *)

  (* Separators *)

| COMMA    (* "," *)
| SEMI     (* ";" *)
| VBAR     (* "|" *)
| COLON    (* ":" *)
| DOT      (* "." *)

  (* Wildcard *)

| WILD     (* "_" *)

  (* Comparisons *)

| EQ       (* "="  *)
| NE       (* "<>" *)
| LT       (* "<"  *)
| GT       (* ">"  *)
| LE       (* "=<" *)
| GE       (* ">=" *)

| BOOL_OR  (* "||" *)
| BOOL_AND (* "&&" *)

  (* Identifiers, labels, numbers and strings *)

| Ident  of string
| Constr of string
| Int    of (string * Z.t)
| Nat    of (string * Z.t)
| Mtz    of (string * Z.t)
| Str    of string
| Bytes  of (string * Hex.t)

  (* Keywords *)

(*| And*)
| Begin
| Else
| End
| False
| Fun
| If
| In
| Let
| List
| Map
| Match
| Mod
| Not
| Of
| Or
| Set
| Then
| True
| Type
| With

  (* Liquidity specific *)

| LetEntry
| MatchNat
(*
| Contract
| Sig
| Struct
*)

(* Virtual tokens *)

| EOF (* End of file *)

type token = t

val to_string: t -> string
