## CS 386L Programming Assignment (HW 6)

Implement type inference for a language with
- variables, lambda functions, application
- let binding
- integers, boolean, binary integer & boolean operators
- recursive values declaration

Implement Let polymorphism, using the algorithm defined on pages 333-334.
Implement a few basic operations on data types, including
multiplication, addition, equality
Use the State monad to collect your constraints
Implement the unification algorithm
Define Show instances for your data types to output the results using a pleasant notation
Here are grammar files and abstract syntax to get you started: