我在使用GHC编译后运行时似乎一直挂起以下代码(尽管$RefreshToken = "refresh_token"
$ClientId= "client_id"
没有构建失败)。
-Werror
尝试访问import Data.Aeson
import Data.Scientific
import qualified Data.HashMap.Strict as S
myObj = Object $
S.fromList [("bla", Number $ pc * 100.0)]
where pc = 10 / 9
时,程序将挂起。经过一些挖掘后,似乎haskell在数字转换方面遇到了困难(尽管没有上述代码段的警告或错误)。如果我将上面的myObj
更改为9
,则不会挂起。但我好奇,为什么上面挂了?
答案 0 :(得分:5)
将10 % 9
(一个Rational)转换为Scientific是不会终止的。
10 / 9 :: Scientific
From the documentation of Data.Scientific:
警告:虽然Scientific是Fractional的一个实例,但是方法 只是部分定义!特别是recip和/将分歧 (即,当它们的输出具有无限时,循环并消耗所有空间) 十进制扩展。当输入Rational时,fromRational会发散 有一个无限的十进制扩展。考虑使用fromRationalRepetend 这些理性将检测重复并指出 它开始的地方。
因此,请尝试这样做:
let Right (x, _) = fromRationalRepetend Nothing (10 / 9) in x
您必须决定适当的措施。我在此决定忽略Left
的可能性。