on master help sign in
Merge pull request #73 from xkollar/minor-changes

Aeson lower bound bump + minor changes

commita440479185e0a689576a2c1f621ff11ff088e3cd authorMichael Snoyman <michael@snoyman.com> dateSun 6 Sep 2015, 19:57 (11 years ago) parentc505144faa48c5
11 files changed+118−149
Data/Yaml.hs+17−24 Data/Yaml/Builder.hs+15−29 Data/Yaml/Include.hs+6−5 Data/Yaml/Internal.hs+22−35 Data/Yaml/Parser.hs+10−9 Data/Yaml/Pretty.hs+16−8 Text/Libyaml.hs+14−17 exe/json2yaml.hs+7−9 exe/yaml2json.hs+7−5 test/Data/YamlSpec.hs−4 yaml.cabal+4−4
Data/Yaml.hs+17−24
@@ -1,5 +1,4 @@
11{-# LANGUAGE CPP #-}
2−{-# LANGUAGE PatternGuards #-}
32{-# LANGUAGE ScopedTypeVariables #-}
43{-# LANGUAGE OverloadedStrings #-}
54-- | Provides a high-level interface for processing YAML files.
@@ -53,35 +52,33 @@ module Data.Yaml
5352 -- ** More control over decoding
5453 , decodeHelper
5554 ) where
56−
57−import qualified Text.Libyaml as Y
55+#if !MIN_VERSION_base(4,8,0)
56+import Control.Applicative((<$>))
57+#endif
58+import Control.Exception
59+import Control.Monad.Trans.Resource (runResourceT)
5860import Data.Aeson
5961 ( Value (..), ToJSON (..), FromJSON (..), object
6062 , (.=) , (.:) , (.:?) , (.!=)
6163 , Object, Array
6264 )
65+import Data.Aeson.Encode (encodeToTextBuilder)
6366import Data.Aeson.Types (Pair, parseMaybe, parseEither, Parser)
64−import Text.Libyaml hiding (encode, decode, encodeFile, decodeFile)
6567import Data.ByteString (ByteString)
66−import System.IO.Unsafe (unsafePerformIO)
67−import Control.Exception
6868import qualified Data.Conduit as C
6969import qualified Data.Conduit.List as CL
70−import qualified Data.Vector as V
71−import Data.Text.Encoding (encodeUtf8)
7270import qualified Data.HashMap.Strict as M
7371import qualified Data.HashSet as HashSet
74−#if MIN_VERSION_aeson(0, 7, 0)
72+import Data.Text.Encoding (encodeUtf8)
7573import qualified Data.Text.Encoding as TE
7674import qualified Data.Text.Lazy as TL
7775import Data.Text.Lazy.Builder (toLazyText)
78−import Data.Aeson.Encode (encodeToTextBuilder)
79−#else
80−import qualified Data.ByteString.Char8 as S8
81−#endif
82−import Control.Monad.Trans.Resource (runResourceT)
76+import qualified Data.Vector as V
77+import System.IO.Unsafe (unsafePerformIO)
8378
8479import Data.Yaml.Internal
80+import Text.Libyaml hiding (encode, decode, encodeFile, decodeFile)
81+import qualified Text.Libyaml as Y
8582
8683encode :: ToJSON a => a -> ByteString
8784encode obj = unsafePerformIO $
@@ -110,10 +107,10 @@ objToEvents' :: Value -> [Y.Event] -> [Y.Event]
110107--objToEvents' (Scalar s) rest = scalarToEvent s : rest
111108objToEvents' (Array list) rest =
112109 EventSequenceStart Nothing
113− : foldr ($) (EventSequenceEnd : rest) (map objToEvents' $ V.toList list)
110+ : foldr objToEvents' (EventSequenceEnd : rest) (V.toList list)
114111objToEvents' (Object pairs) rest =
115112 EventMappingStart Nothing
116− : foldr ($) (EventMappingEnd : rest) (map pairToEvents $ M.toList pairs)
113+ : foldr pairToEvents (EventMappingEnd : rest) (M.toList pairs)
117114
118115-- Empty strings need special handling to ensure they get quoted. This avoids:
119116-- https://github.com/snoyberg/yaml/issues/24
@@ -130,12 +127,8 @@ objToEvents' (String s) rest =
130127objToEvents' Null rest = EventScalar "null" NullTag PlainNoTag Nothing : rest
131128objToEvents' (Bool True) rest = EventScalar "true" BoolTag PlainNoTag Nothing : rest
132129objToEvents' (Bool False) rest = EventScalar "false" BoolTag PlainNoTag Nothing : rest
133−#if MIN_VERSION_aeson(0,7,0)
134130-- Use aeson's implementation which gets rid of annoying decimal points
135131objToEvents' n@Number{} rest = EventScalar (TE.encodeUtf8 $ TL.toStrict $ toLazyText $ encodeToTextBuilder n) IntTag PlainNoTag Nothing : rest
136−#else
137−objToEvents' (Number n) rest = EventScalar (S8.pack $ show n) IntTag PlainNoTag Nothing : rest
138−#endif
139132
140133pairToEvents :: Pair -> [Y.Event] -> [Y.Event]
141134pairToEvents (k, v) rest =
@@ -146,8 +139,8 @@ decode :: FromJSON a
146139 => ByteString
147140 -> Maybe a
148141decode bs = unsafePerformIO
149− $ fmap (either (const Nothing) id)
150− $ decodeHelper_ (Y.decode bs)
142+ $ either (const Nothing) id
143+ <$> decodeHelper_ (Y.decode bs)
151144
152145decodeFile :: FromJSON a
153146 => FilePath
@@ -165,8 +158,8 @@ decodeFileEither = decodeHelper_ . Y.decodeFile
165158
166159decodeEither :: FromJSON a => ByteString -> Either String a
167160decodeEither bs = unsafePerformIO
168− $ fmap (either (Left . prettyPrintParseException) id)
169− $ decodeHelper (Y.decode bs)
161+ $ either (Left . prettyPrintParseException) id
162+ <$> decodeHelper (Y.decode bs)
170163
171164-- | More helpful version of 'decodeEither' which returns the 'YamlException'.
172165--
Data/Yaml/Builder.hs+15−29
@@ -18,30 +18,26 @@ module Data.Yaml.Builder
1818 , (.=)
1919 ) where
2020
21−import Data.Conduit
22−import Data.ByteString (ByteString)
23−import Text.Libyaml
24−import Data.Yaml.Internal
25−import Data.Text (Text)
26−#if MIN_VERSION_aeson(0, 7, 0)
27−import Data.Scientific (Scientific)
21+import Prelude hiding (null)
22+
23+import Control.Arrow (second)
24+import Control.Monad.Trans.Resource (runResourceT)
25+import Data.Aeson.Encode (encodeToTextBuilder)
2826import Data.Aeson.Types (Value(..))
29−#endif
27+import Data.ByteString (ByteString)
28+import qualified Data.ByteString.Char8 as S8
29+import Data.Conduit
3030import qualified Data.HashSet as HashSet
31+import Data.Scientific (Scientific)
32+import Data.Text (Text)
3133import Data.Text.Encoding (encodeUtf8)
32−import System.IO.Unsafe (unsafePerformIO)
33−import Control.Arrow (second)
34−import qualified Data.ByteString.Char8 as S8
35−import Control.Monad.Trans.Resource (runResourceT)
36−#if MIN_VERSION_aeson(0, 7, 0)
3734import qualified Data.Text.Encoding as TE
3835import qualified Data.Text.Lazy as TL
3936import Data.Text.Lazy.Builder (toLazyText)
40−import Data.Aeson.Encode (encodeToTextBuilder)
41−#else
42−import Data.Attoparsec.Number
43−#endif
44−import Prelude hiding (null)
37+import System.IO.Unsafe (unsafePerformIO)
38+
39+import Data.Yaml.Internal
40+import Text.Libyaml
4541
4642(.=) :: ToYaml a => Text -> a -> (Text, YamlBuilder)
4743k .= v = (k, toYaml v)
@@ -73,7 +69,7 @@ array :: [YamlBuilder] -> YamlBuilder
7369array bs =
7470 YamlBuilder $ (EventSequenceStart Nothing:) . flip (foldr go) bs . (EventSequenceEnd:)
7571 where
76− go (YamlBuilder b) rest = b rest
72+ go (YamlBuilder b) = b
7773
7874string :: Text -> YamlBuilder
7975-- Empty strings need special handling to ensure they get quoted. This avoids:
@@ -89,22 +85,12 @@ string s =
8985 | otherwise = EventScalar (encodeUtf8 s) StrTag PlainNoTag Nothing
9086
9187-- Use aeson's implementation which gets rid of annoying decimal points
92−#if MIN_VERSION_aeson(0, 7, 0)
9388scientific :: Scientific -> YamlBuilder
9489scientific n = YamlBuilder (EventScalar (TE.encodeUtf8 $ TL.toStrict $ toLazyText $ encodeToTextBuilder (Number n)) IntTag PlainNoTag Nothing :)
95−#else
96−scientific :: Number -> YamlBuilder
97−scientific n = YamlBuilder (EventScalar (S8.pack $ show n) IntTag PlainNoTag Nothing :)
98−#endif
9990
10091{-# DEPRECATED number "Use scientific" #-}
101−#if MIN_VERSION_aeson(0,7,0)
10292number :: Scientific -> YamlBuilder
10393number = scientific
104−#else
105−number :: Number -> YamlBuilder
106−number n = YamlBuilder (EventScalar (S8.pack $ show n) IntTag PlainNoTag Nothing :)
107−#endif
10894
10995bool :: Bool -> YamlBuilder
11096bool True = YamlBuilder (EventScalar "true" BoolTag PlainNoTag Nothing :)
Data/Yaml/Include.hs+6−5
@@ -1,17 +1,18 @@
11{-# LANGUAGE RankNTypes #-}
22module Data.Yaml.Include (decodeFile, decodeFileEither) where
33
4−import Control.Monad (when)
54import Control.Exception (throwIO)
5+import Control.Monad (when)
66import Control.Monad.IO.Class (liftIO)
77import Control.Monad.Trans.Resource (MonadResource)
8−import System.Directory
9−import System.FilePath
10−import Data.Text (unpack)
11−import Data.Text.Encoding (decodeUtf8)
128import Data.Aeson (FromJSON)
139import Data.Conduit
1410import qualified Data.Conduit.List as CL
11+import Data.Text (unpack)
12+import Data.Text.Encoding (decodeUtf8)
13+import System.Directory
14+import System.FilePath
15+
1516import Data.Yaml.Internal (ParseException(..), decodeHelper_, decodeHelper)
1617import Text.Libyaml hiding (decodeFile)
1718import qualified Text.Libyaml as Y
Data/Yaml/Internal.hs+22−35
@@ -13,40 +13,36 @@ module Data.Yaml.Internal
1313 , isNumeric
1414 ) where
1515
16−import qualified Text.Libyaml as Y
17−import Data.Aeson
18−import Data.Aeson.Types hiding (parse)
19−import Text.Libyaml hiding (encode, decode, encodeFile, decodeFile)
20−import Data.ByteString (ByteString)
21−import qualified Data.Map as Map
16+#if !MIN_VERSION_base(4,8,0)
17+import Control.Applicative ((<$>), Applicative(..))
18+#endif
2219import Control.Exception
2320import Control.Exception.Enclosed
21+import Control.Monad (liftM, ap, unless)
22+import Control.Monad.IO.Class (MonadIO, liftIO)
23+import Control.Monad.Trans.Class (MonadTrans, lift)
24+import Control.Monad.Trans.Resource (ResourceT, runResourceT)
2425import Control.Monad.Trans.State
26+import Data.Aeson
27+import Data.Aeson.Types hiding (parse)
28+import qualified Data.Attoparsec.Text as Atto
29+import Data.ByteString (ByteString)
30+import Data.Char (toUpper)
2531import qualified Data.Conduit as C
2632import qualified Data.Conduit.List as CL
27−import Control.Monad.Trans.Class (MonadTrans, lift)
28−import Control.Monad.IO.Class (MonadIO, liftIO)
29−import Control.Monad (liftM, ap)
30−#if !MIN_VERSION_base(4,8,0)
31−import Control.Applicative (Applicative(..))
32−#endif
33−import Data.Char (toUpper)
34−import qualified Data.Vector as V
33+import qualified Data.HashMap.Strict as M
34+import qualified Data.HashSet as HashSet
35+import qualified Data.Map as Map
36+import Data.Scientific (Scientific)
3537import Data.Text (Text, pack)
3638import qualified Data.Text as T
3739import Data.Text.Encoding (decodeUtf8With)
3840import Data.Text.Encoding.Error (lenientDecode)
39−import qualified Data.HashMap.Strict as M
4041import Data.Typeable
41−#if MIN_VERSION_aeson(0, 7, 0)
42−import qualified Data.Attoparsec.Text as Atto
43−import Data.Scientific (Scientific)
44−#else
45−import Data.Text.Read
46−import Data.Attoparsec.Number
47−#endif
48−import Control.Monad.Trans.Resource (ResourceT, runResourceT)
49−import qualified Data.HashSet as HashSet
42+import qualified Data.Vector as V
43+
44+import qualified Text.Libyaml as Y
45+import Text.Libyaml hiding (encode, decode, encodeFile, decodeFile)
5046
5147data ParseException = NonScalarKey
5248 | UnknownAlias { _anchorName :: Y.AnchorName }
@@ -131,9 +127,7 @@ type Parse = StateT (Map.Map String Value) (ResourceT IO)
131127requireEvent :: Event -> C.Sink Event Parse ()
132128requireEvent e = do
133129 f <- CL.head
134− if f == Just e
135− then return ()
136− else liftIO $ throwIO $ UnexpectedEvent f $ Just e
130+ unless (f == Just e) $ liftIO $ throwIO $ UnexpectedEvent f $ Just e
137131
138132parse :: C.Sink Event Parse Value
139133parse = do
@@ -163,26 +157,19 @@ textToValue _ _ t
163157 | t `elem` ["null", "Null", "NULL", "~", ""] = Null
164158 | any (t `isLike`) ["y", "yes", "on", "true"] = Bool True
165159 | any (t `isLike`) ["n", "no", "off", "false"] = Bool False
166−#if MIN_VERSION_aeson(0, 7, 0)
167160 | Right x <- textToScientific t = Number x
168−#else
169− | Right (x, "") <- signed decimal t = Number $ I x
170− | Right (x, "") <- double t = Number $ D x
171−#endif
172161 | otherwise = String t
173162 where x `isLike` ref = x `elem` [ref, T.toUpper ref, titleCased]
174163 where titleCased = toUpper (T.head ref) `T.cons` T.tail ref
175164
176−#if MIN_VERSION_aeson(0, 7, 0)
177165textToScientific :: Text -> Either String Scientific
178166textToScientific = Atto.parseOnly (Atto.scientific <* Atto.endOfInput)
179−#endif
180167
181168parseO :: C.Sink Event Parse Value
182169parseO = do
183170 me <- CL.head
184171 case me of
185− Just (EventScalar v tag style a) -> fmap (textToValue style tag) $ parseScalar v a style tag
172+ Just (EventScalar v tag style a) -> textToValue style tag <$> parseScalar v a style tag
186173 Just (EventSequenceStart a) -> parseS a id
187174 Just (EventMappingStart a) -> parseM a M.empty
188175 Just (EventAlias an) -> do
Data/Yaml/Parser.hs+10−9
@@ -5,16 +5,13 @@
55-- drastically, or be entirely removed, in a future release.
66module Data.Yaml.Parser where
77
8−import Text.Libyaml
98import Control.Applicative
10−#if !MIN_VERSION_base(4,8,0)
11−import Data.Monoid (Monoid (..))
12−#endif
9+import Control.Exception (Exception)
1310import Control.Monad (MonadPlus (..), liftM, ap)
14−import Control.Monad.Trans.Writer.Strict (tell, WriterT)
1511import Control.Monad.Trans.Class (lift)
1612import Control.Monad.Trans.Resource (MonadThrow, monadThrow, runResourceT)
17−import qualified Data.Map as Map
13+import Control.Monad.Trans.Writer.Strict (tell, WriterT)
14+import Data.ByteString (ByteString)
1815import Data.Conduit
1916#if MIN_VERSION_conduit(1,1,0)
2017import Data.Conduit.Lift (runWriterC)
@@ -22,12 +19,16 @@ import Data.Conduit.Lift (runWriterC)
2219#else
2320import Data.Conduit.Lift (runWriterSC)
2421#endif
22+import qualified Data.Map as Map
23+#if !MIN_VERSION_base(4,8,0)
24+import Data.Monoid (Monoid (..))
25+#endif
2526import Data.Text (Text, pack, unpack)
2627import Data.Text.Encoding (decodeUtf8)
27−import Data.ByteString (ByteString)
28−import Control.Exception (Exception)
29−import Data.Typeable (Typeable)
3028import Data.Text.Read (signed, decimal)
29+import Data.Typeable (Typeable)
30+
31+import Text.Libyaml
3132
3233newtype YamlParser a = YamlParser
3334 { unYamlParser :: AnchorMap -> Either Text a
Data/Yaml/Pretty.hs+16−8
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12-- | Prettier YAML encoding.
23--
34-- Since 0.8.13
@@ -9,16 +10,23 @@ module Data.Yaml.Pretty
910 , defConfig
1011 ) where
1112
12−import Data.Yaml.Builder
13+import Prelude hiding (null)
14+
15+#if !MIN_VERSION_base(4,8,0)
16+import Control.Applicative ((<$>))
17+#endif
1318import Data.Aeson.Types
14−import Data.Text (Text)
15−import Data.Monoid
16−import qualified Data.Vector as V
17−import qualified Data.HashMap.Strict as HM
19+import Data.ByteString (ByteString)
1820import Data.Function (on)
21+import qualified Data.HashMap.Strict as HM
1922import Data.List (sortBy)
20−import Data.ByteString (ByteString)
21−import Prelude hiding (null)
23+#if !MIN_VERSION_base(4,8,0)
24+import Data.Monoid
25+#endif
26+import Data.Text (Text)
27+import qualified Data.Vector as V
28+
29+import Data.Yaml.Builder
2230
2331-- |
2432-- Since 0.8.13
@@ -45,7 +53,7 @@ setConfCompare cmp c = c { confCompare = cmp }
4553pretty :: Config -> Value -> YamlBuilder
4654pretty cfg = go
4755 where go (Object o) = mapping (sortBy (confCompare cfg `on` fst) $ HM.toList $ HM.map go o)
48− go (Array a) = array (fmap go $ V.toList a)
56+ go (Array a) = array (go <$> V.toList a)
4957 go Null = null
5058 go (String s) = string s
5159 go (Number n) = scientific n
Text/Libyaml.hs+14−17
@@ -4,8 +4,6 @@
44{-# LANGUAGE FlexibleContexts #-}
55{-# LANGUAGE FlexibleInstances #-}
66{-# LANGUAGE MultiParamTypeClasses #-}
7−{-# LANGUAGE PackageImports #-}
8−{-# LANGUAGE GeneralizedNewtypeDeriving #-}
97{-# LANGUAGE RankNTypes #-}
108{-# LANGUAGE CPP #-}
119{-# LANGUAGE TypeFamilies #-}
@@ -31,12 +29,6 @@ module Text.Libyaml
3129
3230import Prelude hiding (pi)
3331
34−import qualified Data.ByteString.Internal as B
35−import qualified Data.ByteString.Char8 as B8
36−import qualified Data.ByteString
37−import qualified Data.ByteString.Unsafe as BU
38−import Data.ByteString (ByteString, packCStringLen)
39−import Control.Monad
4032import Foreign.C
4133import Foreign.Ptr
4234import Foreign.ForeignPtr
@@ -44,17 +36,22 @@ import Foreign.ForeignPtr
4436import Foreign.ForeignPtr.Unsafe
4537#endif
4638import Foreign.Marshal.Alloc
47−import Data.Data
48−
49−import Control.Monad.IO.Class
5039
51−import Control.Exception (throwIO, Exception, finally)
5240#if !MIN_VERSION_base(4,8,0)
5341import Control.Applicative
5442#endif
43+import Control.Exception (mask_, throwIO, Exception, finally)
44+import Control.Monad
45+import Control.Monad.IO.Class
5546import Control.Monad.Trans.Resource
5647import Data.Conduit hiding (Source, Sink, Conduit)
57−import Control.Exception (mask_)
48+import Data.Data
49+
50+import Data.ByteString (ByteString, packCStringLen)
51+import qualified Data.ByteString
52+import qualified Data.ByteString.Char8 as B8
53+import qualified Data.ByteString.Internal as B
54+import qualified Data.ByteString.Unsafe as BU
5855
5956data Event =
6057 EventStreamStart
@@ -267,20 +264,20 @@ getEvent er = do
267264 yanchor <- c_get_scalar_anchor er
268265 anchor <- if yanchor == nullPtr
269266 then return Nothing
270− else fmap Just $ peekCString yanchor
267+ else Just <$> peekCString yanchor
271268 return $ Just $ EventScalar bs (bsToTag tagbs) style anchor
272269 YamlSequenceStartEvent -> do
273270 yanchor <- c_get_sequence_start_anchor er
274271 anchor <- if yanchor == nullPtr
275272 then return Nothing
276− else fmap Just $ peekCString yanchor
273+ else Just <$> peekCString yanchor
277274 return $ Just $ EventSequenceStart anchor
278275 YamlSequenceEndEvent -> return $ Just EventSequenceEnd
279276 YamlMappingStartEvent -> do
280277 yanchor <- c_get_mapping_start_anchor er
281278 anchor <- if yanchor == nullPtr
282279 then return Nothing
283− else fmap Just $ peekCString yanchor
280+ else Just <$> peekCString yanchor
284281 return $ Just $ EventMappingStart anchor
285282 YamlMappingEndEvent -> return $ Just EventMappingEnd
286283
@@ -605,7 +602,7 @@ encodeFile filePath =
605602 file <- withCString filePath $
606603 \filePath' -> withCString "w" $
607604 \w' -> c_fopen filePath' w'
608− if (file == nullPtr)
605+ if file == nullPtr
609606 then throwIO $ YamlException $ "could not open file for write: " ++ filePath
610607 else return file
611608
exe/json2yaml.hs+7−9
@@ -1,11 +1,10 @@
1−{-# LANGUAGE MultiParamTypeClasses #-}
2−{-# LANGUAGE FlexibleInstances #-}
3−import System.Environment (getArgs)
4−import qualified Data.Aeson as J
5−import qualified Data.Yaml as Y
61import Control.Monad (when)
2+import qualified Data.Aeson as J
73import qualified Data.ByteString as S
84import qualified Data.ByteString.Lazy as L
5+import System.Environment (getArgs)
6+
7+import qualified Data.Yaml as Y
98
109main :: IO ()
1110main = do
@@ -18,7 +17,6 @@ main = do
1817 _ -> L.readFile input
1918 case mval of
2019 Nothing -> error "Invalid input JSON"
21− Just val -> do
22− case output of
23− "-" -> S.putStr $ Y.encode (val :: Y.Value)
24− _ -> Y.encodeFile output val
20+ Just val -> case output of
21+ "-" -> S.putStr $ Y.encode (val :: Y.Value)
22+ _ -> Y.encodeFile output val
exe/yaml2json.hs+7−5
@@ -1,10 +1,12 @@
1−import Data.Yaml (decodeFileEither, decodeEither')
2−import System.Environment (getArgs)
3−import System.Exit
4−import Data.Aeson (encode, Value)
51import Prelude hiding (putStr, getContents)
6−import Data.ByteString.Lazy (putStr)
2+
3+import Data.Aeson (encode, Value)
74import Data.ByteString (getContents)
5+import Data.ByteString.Lazy (putStr)
6+import System.Environment (getArgs)
7+import System.Exit
8+
9+import Data.Yaml (decodeFileEither, decodeEither')
810
911helpMessage :: IO ()
1012helpMessage = putStrLn "yaml2json FILE\n use - as FILE to indicate stdin" >> exitFailure
test/Data/YamlSpec.hs−4
@@ -148,9 +148,7 @@ spec = do
148148 it "serialization of +123 #64" $ do
149149 D.decode (D.encode ("+123" :: String)) `shouldBe` Just ("+123" :: String)
150150
151−#if MIN_VERSION_aeson(0, 7, 0)
152151 it "preserves Scientific precision" casePreservesScientificPrecision
153−#endif
154152
155153
156154specialStrings :: [T.Text]
@@ -470,7 +468,6 @@ caseIssue49 =
470468 where
471469 src = "---\na:\n &id5 value: 1.0\nb:\n *id5: 1.2"
472470
473−#if MIN_VERSION_aeson(0, 7, 0)
474471-- | We cannot guarantee this before aeson started using 'Scientific'.
475472casePreservesScientificPrecision :: Assertion
476473casePreservesScientificPrecision = do
@@ -487,4 +484,3 @@ casePreservesScientificPrecision = do
487484 -- results, because of <https://github.com/bos/text/issues/34>.
488485 D.decodeEither "x: 9.78159610558926e-5" @?= Right (object
489486 [ "x" .= D.Number (read "9.78159610558926e-5") ])
490−#endif
yaml.cabal+4−4
@@ -43,7 +43,7 @@ library
4343 , bytestring >= 0.9.1.4
4444 , conduit >= 1.1.0 && < 1.3
4545 , resourcet >= 0.3 && < 1.2
46− , aeson >= 0.5
46+ , aeson >= 0.7
4747 , containers
4848 , unordered-containers
4949 , vector
@@ -91,7 +91,7 @@ executable yaml2json
9191 build-depends: base >= 4 && < 5
9292 , yaml
9393 , bytestring >= 0.9.1.4
94− , aeson >= 0.5
94+ , aeson >= 0.7
9595
9696executable json2yaml
9797 if flag(no-exe)
@@ -104,7 +104,7 @@ executable json2yaml
104104 build-depends: base >= 4 && < 5
105105 , yaml
106106 , bytestring >= 0.9.1.4
107− , aeson >= 0.5
107+ , aeson >= 0.7
108108
109109
110110test-suite spec
@@ -122,7 +122,7 @@ test-suite spec
122122 , conduit
123123 , yaml
124124 , text
125− , aeson
125+ , aeson >= 0.7
126126 , unordered-containers
127127 , vector
128128 , resourcet