6.9.4. Fractional looking integer literals¶
-
NumDecimals
¶ Since: 7.8.1 Allow the use of scientific notation style borrowed from floating-point literal syntax for integral types.
Haskell 2010 and Haskell 98 define floating literals with the syntax
1.2e6
, resembling scientific notation. These literals have the type Fractional a => a
.
The language extension NumDecimals
allows you to also use the
scientific notation and floating point literal syntax for instances of
Num
, and have values like 1.2e6 :: Num a => a
and 5e10 :: Num a => a
. This applies only to literals that really turn out to have integral
values. For example 1.23e1 :: Fractional a => a
since 1.23e1 == 12.3
,
however 1.23e2 :: Num a => a
as 1.23e2 == 123
.
Integral literals written using scientific notation will be desugared using
fromInteger
, whereas any literals which aren’t integral will be desugared
using fromRational
as usual.
Note that regular floating point literals (without exponents) will also be
desugared via fromInteger
and assigned type Num a => a
if they
represent an integral value. For example 1.0 :: Num a => a
, but
1.1 :: Fractional a => a
.