This answer is likely incomplete at best and wrong at worst, but I'll give it a shot.
When you have this type declaration:
i :: a
It means that you are declaring the symbol i that can be slotted into any location that requires an a. It is a task for the compiler to process the overall program specification and infer that a has a particular concrete type. When the program is specified though, the value i has a generic type with no bounds, and the only way to construct such a value is to supply a value of type a from somewhere else.
The problem here is not that you can't bind 1 to i, but that you cannot construct any value of type a.
A direct analog of this would be - not the application of the id function as you called out - but that you cannot define a function with the following signature, not including bottom:
f :: a -> b
The reason is that you can't supply a value of type b.
I have some experience with Java, and it has a similar constraint that generic types cannot be instantiated.
--
RRI