
I'd like to propose what I believe is a simple but valuable extension to Haskell that I haven't seen proposed elsewhere. C has something it calls hexadecimal floating constants, and it would be very nice if Haskell had it too. For floating point systems where the radix is a power of two (very common), they offer a means of clearly and exactly specifying any finite floating point value. For example, suppose we want to write the least positive value of an IEEE754 double. With hexadecimal floating constants, we write 0x0.0000000000001p-1022 and a reader can immediately tell what this is. One could equivalently write this in a normalized fashion as 0x1p-1074. The exact representation of this value in base 10 is very, very long (there are over 750 significant digits), but we can abuse roundoff to write it succinctly as 5e-324, which is much less clear about which value was intended. Similarly, the greatest finite double value can be written as 0x1.fffffffffffffp+1023. These constants have the form 0x[HH][.HHHHH]p[+/-]DDD where we have the hexadecimal prefix 0x, zero or more hexadecimal digits, and an optional fractional separator followed by zero or more hexadecimal digits. There must be at least one hexadecimal digit. Finally, there is a p followed by an (optionally signed) exponent encoded in decimal. The hexadecimal digits are interpreted in the obvious way and then scaled by 2 raised to the given exponent. Implementing this proposal would change the meaning of expressions like let p4 = 5 in (+) 0x5p4 I don't believe anyone writes code like that, but it's resolved by adding a space, as in let p4 = 5 in (+) 0x5 p4 -- Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/)