Ratio package:ghc-internal

Rational numbers, with numerator and denominator of some Integral type. Note that Ratio's instances inherit the deficiencies from the type parameter's. For example, Ratio Natural's Num instance has similar problems to Natural's.
Arbitrary-precision rational numbers, represented as a ratio of two Integer values. A rational number may be constructed using the % operator.
1.23. See above comment on IntegerL.
Conversion from a Rational (that is Ratio Integer). A floating literal stands for an application of fromRational to a value of type Rational, so such literals have type (Fractional a) => a.
Rational equivalent of its real argument with full precision.
I/O error where the operation is not possible.
An error indicating that an IO operation failed because the operation was not possible. Any computation which returns an IO result may fail with isIllegalOperation. In some cases, an implementation will not be able to distinguish between the possible error causes. In this case it should fail with isIllegalOperation.
I/O error where the operation is not possible.
Template Haskell is capable of reifying information about types and terms defined in previous declaration groups. Top-level declaration splices break up declaration groups. For an example, consider this code block. We define a datatype X and then try to call reify on the datatype.
module Check where

data X = X
deriving Eq

$(do
info <- reify ''X
runIO $ print info
)
This code fails to compile, noting that X is not available for reification at the site of reify. We can fix this by creating a new declaration group using an empty top-level splice:
data X = X
deriving Eq

$(pure [])

$(do
info <- reify ''X
runIO $ print info
)
We provide newDeclarationGroup as a means of documenting this behavior and providing a name for the pattern. Since top level splices infer the presence of the $( ... ) brackets, we can also write:
data X = X
deriving Eq

newDeclarationGroup

$(do
info <- reify ''X
runIO $ print info
)