Haskell区分负零:
ghci> (isNegativeZero (0 :: Float), isNegativeZero (-0 :: Float)) (False,True)
JSON还允许区分它们,因为“0”和“-0”在语法上都是有效的。但艾逊却把这个符号扔掉了:
ghci> isNegativeZero <$> eitherDecode "-0" Right False
为什么?如何在解码JSON文档的同时区分非负和负0?
ebdffaop1#
在Data.Aeson中,浮点数似乎是使用Data.Scientific.scientific构造的
Data.Aeson
Data.Scientific.scientific
scientific :: Integer -> Int -> Scientific
scientific c e构造与Fractional数对应的科学数:fromInteger c * 10 ^^ e.由于尾数是Integer,我们有0 == -0,它不能构造负零,似乎不是构造特殊浮点值的最佳API。也许您应该提交一个aeson的bug,请求解析器中的一个变通方法。
scientific c e
Fractional
fromInteger c * 10 ^^ e
Integer
0 == -0
aeson
1条答案
按热度按时间ebdffaop1#
在
Data.Aeson
中,浮点数似乎是使用Data.Scientific.scientific
构造的scientific c e
构造与Fractional
数对应的科学数:fromInteger c * 10 ^^ e
.由于尾数是
Integer
,我们有0 == -0
,它不能构造负零,似乎不是构造特殊浮点值的最佳API。也许您应该提交一个
aeson
的bug,请求解析器中的一个变通方法。