-litOccurrence (HsChar _)
- = returnRn (unitFV charTyCon_name)
-
-litOccurrence (HsCharPrim _)
- = returnRn (unitFV (getName charPrimTyCon))
-
-litOccurrence (HsString _)
- = returnRn (unitFV listTyCon_name `plusFV` unitFV charTyCon_name)
-
-litOccurrence (HsStringPrim _)
- = returnRn (unitFV (getName addrPrimTyCon))
-
-litOccurrence (HsInt _)
- = lookupImplicitOccRn numClass_RDR `thenRn` \ num ->
- returnRn (unitFV num) -- Int and Integer are forced in by Num
-
-litOccurrence (HsFrac _)
- = lookupImplicitOccRn fractionalClass_RDR `thenRn` \ frac ->
- lookupImplicitOccRn ratioDataCon_RDR `thenRn` \ ratio ->
- returnRn (unitFV frac `plusFV` unitFV ratio)
+litFVs (HsChar c) = returnRn (unitFV charTyCon_name)
+litFVs (HsCharPrim c) = returnRn (unitFV (getName charPrimTyCon))
+litFVs (HsString s) = returnRn (mkFVs [listTyCon_name, charTyCon_name])
+litFVs (HsStringPrim s) = returnRn (unitFV (getName addrPrimTyCon))
+litFVs (HsInt i) = returnRn (unitFV (getName intTyCon))
+litFVs (HsIntPrim i) = returnRn (unitFV (getName intPrimTyCon))
+litFVs (HsFloatPrim f) = returnRn (unitFV (getName floatPrimTyCon))
+litFVs (HsDoublePrim d) = returnRn (unitFV (getName doublePrimTyCon))
+litFVs (HsLitLit l bogus_ty) = lookupOrigName cCallableClass_RDR `thenRn` \ cc ->
+ returnRn (unitFV cc)
+litFVs lit = pprPanic "RnExpr.litFVs" (ppr lit) -- HsInteger and HsRat only appear
+ -- in post-typechecker translations
+
+rnOverLit (HsIntegral i)
+ | inIntRange i
+ = returnRn (HsIntegral i, unitFV fromIntegerName)
+ | otherwise
+ = lookupOrigNames [fromInteger_RDR, plusInteger_RDR, timesInteger_RDR] `thenRn` \ ns ->
+ -- Big integers are built, using + and *, out of small integers
+ -- [No particular reason why we use fromIntegerName in one case can
+ -- fromInteger_RDR in the other; but plusInteger_RDR means we
+ -- can get away without plusIntegerName altogether.]
+ returnRn (HsIntegral i, ns)
+
+rnOverLit (HsFractional i)
+ = lookupOrigNames [fromRational_RDR, ratioDataCon_RDR,
+ plusInteger_RDR, timesInteger_RDR] `thenRn` \ ns ->