Removed IO Monad from type inferencing algorithm.
Errors are now stored in the lattice.
Meaning that every piece of labelled code has errors associated with it.
For this I created the Error datatype, with different error constructors and errors
shown using the Show class.
Also added the Undefined type, to know if at some point a variable was not yet undefined
(previously the check was on whether the ident had 'AnyType'.
Looking at the example, code with label 3 notices 'a' to be undefined.
One of its children says it is defined, the other one says it is not. What to do?