Overall, the proposal seems great. However, one of the things I love about go is that the error
type is not special (other than the fact that it doesn't require importing). This proposal seems to special-case the error
type, adding extra barriers to defining ones own error types.
As an example, I was building an interpreter, and I wanted all of my parser's error messages to have a file position (line/column number) on them. By defining a new type,
type PosError interface{
error
Pos() FilePos
}
and making all of my functions return it, the compiler is able to remind me where I need to add a file position, since if I don't, typechecking will fail.