Errors: - Not supported - Only * is supported - Expected * in *, but got * - Divergent type in (construct), (location 1), (location 2) - Unknown field - Unbounded variable - Different variable - Different domain - * is not subclass of * - Type not equal - Incorrect number of parameters Symbol Resolution: - Find class references, load them all in TopLevelContext. - Find unbounded identifiers/functions in functions. - `inspect.getmodule(x)` every unknown `x` if not primitive/list of primitives, check their files recursively by getting their file path, cache with (normalized) path as key. TopLevelContext/InferenceContext: - Restrict visibility by user defined function.