When we write long numbers, we usually group the digits for easier reading: Grouping styles vary by region and language. Groups of three digits separated by commas is the American convention. For example, we would write one million as “1,000,000” rather than “1000000”.
Unfortunately, the standard Haskell language does not allow us to write numbers with any sort of visual grouping of the digits:
It may be difficult to judge at a glance whether the number we’ve written in the above example is actually one million; we have to carefully count the number of zeros.
NumericUnderscores extension GHC documentation for
NumericUnderscores provides a remedy for this problem.
With the extension enabled, Numeric underscores is one of a handful of small number-related extensions. Others are NumDecimals, BinaryLiterals, HexFloatLiterals, and NegativeLiterals. you may insert an underscore at your discretion anywhere within a numeric literal. The compiler ignores the underscores; they are only there to assist human readers.
This extension became available in GHC 8.6.1.