So the error type can be left out when the compiler can infer it. If it is left out, and the compiler can't infer it, Zig will fail to compile and provide an error message pointing to the missing error type information. Thanks for the clarification, this totally makes sense.
> That seems like it'd work without being problematic like Java's exceptions.
It's definitely a _huge_ improvement. I think the usecase with returning different errors is significant when you are mixing lots of 3rd party components.
I'm building a platform, which defines several interfaces that components must implement, so I believe those intefaces would "erase" the concrete error types and everything would just end up being anyerror. That said, I could still see concrete error types still being used in some lower level logic, where function calls don't cross such an interface boundary.
As for projects that don't bother with implementing 3rd party interfaces, I can totally see how that may be a blessing.