MAIN TASK
Extend the interpreter and the typechecker to take into account:
- the additional unary and binary operators
- pairs and projections
- constructors and pattern matching
and write tests for these language features

BONUS TASKS
- check whether pattern matching is exhaustive
- allow nested patterns
- (hard) check whether pattern matching with nested patterns is exhaustive
- check that no variable is introduced twice in a pattern
- switch to type inference
- switch to type inference with parametric polymorphism
