6.9.4. Fractional looking integer literals — Glasgow Haskell Compiler 9.10.0.20240426 User's Guide

# 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`.