would it be possible to add distinct types? for example, to make it an error to pass a `GLuint` representing a shader as the program for `glAttachShader`.