module type synt = sig type ide = Id of string type exp = Eint of int | Ebool of bool | Var of ide | Pair of exp * exp | First of exp | Snd of exp | Prod of exp * exp | Sum of exp * exp | Diff of exp * exp | Eq of exp * exp | Minus of exp | Iszero of exp | Or of exp * exp | And of exp * exp | Not of exp | Ifthenelse of exp * exp * exp | Fun of ide * exp | Appl of exp * exp | Letrec of ide * exp * exp | Let of ide * exp * exp end module Expr : synt = struct type ide = Id of string type exp = Eint of int | Ebool of bool | Var of ide | Pair of exp * exp | First of exp | Snd of exp | Prod of exp * exp | Sum of exp * exp | Diff of exp * exp | Eq of exp * exp | Minus of exp | Iszero of exp | Or of exp * exp | And of exp * exp | Not of exp | Ifthenelse of exp * exp * exp | Fun of ide * exp | Appl of exp * exp | Letrec of ide * exp * exp | Let of ide * exp * exp end