Lorsque j'essaie de décoder un fichier JSON avec un nombre à virgule flottante, le package Text.JSON me donne le numéro en tant que JSRational. Donc, je peux faire un readJSON sur un JSRational. Cependant, je ne peux pas écrire des nombres rationnels! Est-ce exprès?Haskell Text.Json package peut lire mais pas écrire Rationals?
3
A
Répondre
6
L'arrière-plan du problème est que JSON mélange les types virgule flottante et nombre entier - ils ne sont pas distingués par une balise de type au format JSON. Nous représentons donc tous les types numériques dans JSON via Rationals, sous le capot.
instances pour convertir dans le type JSON sont fournis pour Double, Int etc, mais pas pour rationnelle - mais il est en fait pas une bonne raison pour cela, que l'instance est trivial:
instance JSON Rational where
showJSON r = JSRational True r
readJSON (JSRational _ r) = return r