当我尝试对带有浮点数的JSON文件进行解码时,Text.JSON包将数字提供为JSRational。因此,我可以在JSRational上执行readJSON。但是,我不能写有理数!这是故意的吗?
最佳答案
问题的背景是JSON会压缩浮点数和整数类型-不能通过JSON格式的类型标记来区分它们。因此,我们在后台通过Rationals表示了JSON中的所有数字类型。
Double,Int等提供了要转换为JSON类型的实例,但Rational不提供实例-尽管实际上没有充分的理由,因为该实例很简单:
instance JSON Rational where
showJSON r = JSRational True r
readJSON (JSRational _ r) = return r