In this project, you will implement a language called MiniML, in OCaml. This will allow you to work
with a larger code base, make use of many of the concepts that you have seen in class throughout
the semester, and gain a deeper understanding on key concepts such as free variables, substitution,
evaluation, type checking and type inference. MiniML is similar to OCaml itself and very similar to
the language that is discussed in the lectures and lecture notes; it is however also more powerful
than the minimal language discussed in the lecture notes. In particular, it includes n-ary tuples
(pairs written as (e1, . . . , en)), a more general let-expression, functions, function application, and
recursion.