J'ai le morceau de code suivant qui semble se bloquer de façon constante lors de l'exécution avec après la compilation avec GHC (bien que pas de défaillances de construction avec -Werror
).Haskell suspendu à la conversion de nombre
import Data.Aeson
import Data.Scientific
import qualified Data.HashMap.Strict as S
myObj = Object $
S.fromList [("bla", Number $ pc * 100.0)]
where pc = 10/9
Et en essayant d'accéder à myObj
le programme va se bloquer. Après quelques recherches, il semble que Haskell ait du mal avec la conversion du nombre (bien qu'il n'y ait pas d'avertissement ou d'erreur avec l'extrait ci-dessus). Si je change le 9
ci-dessus à un 10
, il ne se bloque pas. Mais je suis curieux, pourquoi ce qui précède pend?
Ceci est honnêtement extrêmement préoccupant. Dans une application du monde réel où le numérateur et le dénominateur proviennent de l'entrée de l'utilisateur, ce cas n'apparaît que dans une fraction des requêtes, ce qui rend extrêmement difficile le débogage. Il semble que le conseil général devrait être d'éviter Data.Scientific à tout prix et de ne l'utiliser que lors de la conversion de nombres en JSON. – pretobomba