Recognize toplevel-evaluated code properly for error messages.
Bring back the `type error` ADT.

Exhaustiveness check in describe_error is useful.