Data.Generics.ConstrRep isn't general enough
The type ConstrRep in Data.Generics is used to represent constructors for types. The FloatConstr constructor is the one used for all kinds of floating point primitives. But FloatConstr has an argument of type Double. This limits the primitive floating point types to those that are accurately representable as a Double. In other places in Haskell where an accurate and generic floating point value is needed the type Rational is used. It should be used here too.