@@ -29,10 +29,9 @@ module Data.Aeson.Encode
2929
3030import Data.Aeson.Types (Value(..))
3131import Data.Monoid (mappend)
32−import Data.Scientific (Scientific, coefficient, base10Exponent)
32+import Data.Scientific (FPFormat(..), Scientific, base10Exponent)
3333import Data.Text.Lazy.Builder
34−import Data.Text.Lazy.Builder.Int (decimal)
35−import Data.Text.Lazy.Builder.Scientific (scientificBuilder)
34+import Data.Text.Lazy.Builder.Scientific (formatScientificBuilder)
3635import Numeric (showHex)
3736import qualified Data.HashMap.Strict as H
3837import qualified Data.Text as T
@@ -97,11 +96,11 @@ string s = {-# SCC "string" #-} singleton '"' <> quote s <> singleton '"'
9796 where h = showHex (fromEnum c) ""
9897
9998fromScientific :: Scientific -> Builder
100−fromScientific s
101− | e < 0 = scientificBuilder s
102− | otherwise = decimal (coefficient s * 10 ^ e)
99+fromScientific s = formatScientificBuilder format prec s
103100 where
104− e = base10Exponent s
101+ (format, prec)
102+ | base10Exponent s < 0 = (Generic, Nothing)
103+ | otherwise = (Fixed, Just 0)
105104
106105(<>) :: Builder -> Builder -> Builder
107106(<>) = mappend