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