我找不到此行为的文档,它看起来像是一个错误([编辑] 确实是:gitlab.haskell.org/ghc/ghc /-/issues/10387)。我遗漏了什么吗?
在 GHCi 中:
> import GHC.Real
> inf = 1/O :: Double
> inf
Infinity
> infinity
1 % 0
> fromRational infinity
Infinity
> toRational inf
179769313486231590... % 1
> toRational inf == infinity
False
[编辑 : ]
有一个解决方法。使用包ieee754,可以定义以下内容:
import GHC.Real
import qualified Numeric.IEEE as IEEE
toRational' :: (IEEE.IEEE a, Real a) => a -> Rational
toRational' a
| a == IEEE.infinity = infinity
| a == -IEEE.infinity = -infinity
| otherwise = toRational a