http://compresscafe.i2p/blog/applying_the_diagnostics_pattern_in_practice.html
So, human-readable error information is usually either passed around with a Diagnostics struct, shat to stdout, or not there at all. Here's an example of a Diagnostics from std.json: /// To enable diagnostics, declare `var diagnostics = Diagnostics{};` then call `source.enableDiagnostics(&diagnostics);` /// where `source` is either a `std.json.Reader` or a `std.json.Scanner` that has just been initialized. /// At any time, notably just after an error, call `getLine()`, `getColumn()`,...