Report
Reports are messages from a compiler mainly targeted to be shown to the user. A report may be triggered by any reason, e.g. mal-formed/invalid input, a network error, a file system error, a warning about a deprecated feature being used, and so on.
The main idea is that reports are inherited by custom violation classes, that add domain-specific data, if any.