Module Typeinf_syntax.Implicit

module Implicit: sig .. end

type exp = 
| Int of int (*decimal integer*)
| Bool of bool (*either true or false*)
| Arith of Typeinf_syntax.arithOp * exp
* exp
(*e1 + e2, e1 - e2, or e1 * e2*)
| Cmp of Typeinf_syntax.intCmp * exp
* exp
(*e1 < e2, e1 > e2, or e1 = e2*)
| If of exp * exp
* exp
(*if e1 then e2 else e2*)
| Id of Typeinf_syntax.id (*x, y, x1, y1, x_, y_, etc.*)
| Let of Typeinf_syntax.id * exp * exp (*let x = e1 in e2*)
| Fun of Typeinf_syntax.id * exp (*fun x -> e*)
| Fix of Typeinf_syntax.id * exp (*fix x -> e*)
| App of exp * exp (*e1 e2*)
| Empty (*empty*)
| Cons of exp * exp (*e1 :: e2*)
| Head of exp (*head e*)
| Tail of exp (*tail e*)
| IsEmpty of exp (*empty? e*)
| Pair of exp * exp (*(e1, e2)*)
| ProjL of exp (*e.1*)
| ProjR of exp (*e.2*)