Haskell Text.Json 包可以读取但不能写入 Rational?

发布于 2024-09-13 19:16:24 字数 109 浏览 5 评论 0原文

当我尝试使用浮点数解码 JSON 文件时,Text.JSON 包将数字作为 JSRational 提供。因此,我可以在 JSRational 上执行 readJSON。但是,我不会写有理数!这是故意的吗?

When I try to decode a JSON file with a floating point number, the Text.JSON package gives me the number as a JSRational. So, I can do a readJSON on a JSRational. However, I can't write rational numbers! Is this on purpose?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冬天的雪花 2024-09-20 19:16:24

问题的背景是 JSON 合并了浮点类型和整数类型——它们不通过 JSON 格式的类型标签来区分。因此,我们在底层通过 Rational 表示 JSON 中的所有数字类型。

为 Double、Int 等提供了转换为 JSON 类型的实例,但没有为 Rational 提供——尽管实际上没有充分的理由,因为实例很简单:

instance JSON Rational where
    showJSON r = JSRational True r 
    readJSON (JSRational _ r) = return r

The background to the problem is that JSON conflates floating point and integer types -- they're not distinguished via a type tag in the JSON format. So we represent all numeric types in JSON via Rationals, under the hood.

Instances to convert into the JSON type are provided for Double, Int etc, but not for Rational -- though there is actually no good reason for this, as the instance is trivial:

instance JSON Rational where
    showJSON r = JSRational True r 
    readJSON (JSRational _ r) = return r
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文