haskell 我怎么和艾逊区分负零呢?

pcww981p  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(123)

Haskell区分负零:

ghci> (isNegativeZero (0 :: Float), isNegativeZero (-0 :: Float))
(False,True)

JSON还允许区分它们,因为“0”和“-0”在语法上都是有效的。
但艾逊却把这个符号扔掉了:

ghci> isNegativeZero <$> eitherDecode "-0"
Right False

为什么?如何在解码JSON文档的同时区分非负和负0?

ebdffaop

ebdffaop1#

Data.Aeson中,浮点数似乎是使用Data.Scientific.scientific构造的

scientific :: Integer -> Int -> Scientific

scientific c e构造与Fractional数对应的科学数:fromInteger c * 10 ^^ e.
由于尾数是Integer,我们有0 == -0,它不能构造负零,似乎不是构造特殊浮点值的最佳API。
也许您应该提交一个aeson的bug,请求解析器中的一个变通方法。

相关问题