-
NumericUnderscores -
Разрешить использование нижних подчёркиваний в числовых литералах.
GHC позволяет представлять числовые литералы в десятичном, восьмеричном, шестнадцатеричном, двоичном или формате с плавающей точкой.
Расширение языка NumericUnderscores добавляет поддержку выражения нижних подчёркиваний в числовых литералах. Например, числовой литерал 1_000_000 будет обработан как 1000000 при включенном NumericUnderscores. То есть, нижние подчёркивания в числовых литералах игнорируются, когда NumericUnderscores включено. См. также #14473.
Например:
-- decimal
million = 1_000_000
billion = 1_000_000_000
lightspeed = 299_792_458
version = 8_04_1
date = 2017_12_31
-- hexadecimal
red_mask = 0xff_00_00
size1G = 0x3fff_ffff
-- binary
bit8th = 0b01_0000_0000
packbits = 0b1_11_01_0000_0_111
bigbits = 0b1100_1011__1110_1111__0101_0011
-- float
pi = 3.141_592_653_589_793
faraday = 96_485.332_89
avogadro = 6.022_140_857e+23
-- function
isUnderMillion = (< 1_000_000)
clip64M x
| x > 0x3ff_ffff = 0x3ff_ffff
| otherwise = x
test8bit x = (0b01_0000_0000 .&. x) /= 0
О валидности:
x0 = 1_000_000 -- valid x1 = 1__000000 -- valid x2 = 1000000_ -- invalid x3 = _1000000 -- invalid e0 = 0.0001 -- valid e1 = 0.000_1 -- valid e2 = 0_.0001 -- invalid e3 = _0.0001 -- invalid e4 = 0._0001 -- invalid e5 = 0.0001_ -- invalid f0 = 1e+23 -- valid f1 = 1_e+23 -- valid f2 = 1__e+23 -- valid f3 = 1e_+23 -- invalid g0 = 1e+23 -- valid g1 = 1e+_23 -- invalid g2 = 1e+23_ -- invalid h0 = 0xffff -- valid h1 = 0xff_ff -- valid h2 = 0x_ffff -- valid h3 = 0x__ffff -- valid h4 = _0xffff -- invalid