[GHC] #13124: Template Haskell: Floating point literals that cannot be represented by rationals
GHC
ghc-devs at haskell.org
Wed Jan 18 04:03:28 UTC 2017
#13124: Template Haskell: Floating point literals that cannot be represented by
rationals
-------------------------------------+-------------------------------------
Reporter: lerkok | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Template Haskell | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by rwbarton):
> One can easily imagine doing a similar transformation via TH, and having
access to arbitrary floating constants would be useful. There would be no
easy way to write that in TH today as all the "magic" constants would have
to be converted to rationals, thus having anomalies.
This doesn't make sense to me: any ordinary floating point value (i.e. not
negative zero, infinity or NaN) can be exactly represented as a rational
number. For those special floating point values, you could just generate
an expression that evaluates to the `Double` you need, like `1.0 / 0.0`.
Do you really need a literal specifically?
In short, I don't see a real use case here.
> I wouldn't go as far as saying that this is a huge shortcoming, but I
don't see why TH can't just use a good old double/float there instead of
requiring a Rational? Is there a good reason for requiring a Rational
there?
GHC doesn't use `Double` in any AST type. All floating point literals are
represented internally as `Rational`. Considering the nasty and
potentially platform-dependent semantics of `Double`, this is a good
thing. Imagine cross-compiling to a hypothetical platform with 128-bit
`Double`s on a platform that doesn't support that. (It's also certainly
necessary to represent floating-point literals as `Rational` rather than
`Double` or any other fixed-size data type, since `Rational` is itself a
valid type for a floating-point literal!)
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13124#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list