Very poor constant folding
GHC seems to lack constant folding for encodeFloat/decodeFloat. For many examples, compile the numeric-limits package on hackage, or just this snippet:
epsilon :: Double epsilon = r where r = 1 - encodeFloat (m-1) e (m, e) = decodeFloat (1 `asTypeOf` r)
This has a very simple value, but GHC refuses to compute it at compile time. This in turn inhibits other constant folding that should be going on.