I'm opposed to Storable instances that don't correspond directly to some specific C type. I don't like the use of Storable where it is just being used as an arbitrary way to serialize to a pointer. I don't want it to be another class like Binary, but rather to have it specifically about marshaling data and the C FFI.
As far as whether or not Ratio should be parameterized or not, I think that belongs in a different discussion and is not currently relevant. If we "fix" that type later we can fix the instance. Storable is not the place to punish people for using the "wrong" type parameter.