For Storable (Ratio a), when peeking a (Ratio a) value, should the instance reduce it to lowest terms or not?
If not, then you can construct an unreduced (Ratio a) value, which AFAIK isn't otherwise possible with the Ratio API.
If so, then you need an (Integral a) constraint as well as (Storable a). Furthermore, peeking a value and poking it back may change the bytes stored at the Ptr, which is unusual behavior for a Storable instance.
Neither behavior seems generally useful to all programs, so I'm -1 on adding any instance for Storable (Ratio a).
+1 for Storable (Complex a) though.