on master help sign in
All tests pass
0bd09eaMichael Snoyman
Data/Yaml.hs+12−2
@@ -35,7 +35,7 @@ import Control.Monad.Trans.Class (MonadTrans, lift)
35import Control.Monad.IO.Class (MonadIO, liftIO)
35import Control.Monad.IO.Class (MonadIO, liftIO)
36import Control.Monad (liftM)
36import Control.Monad (liftM)
37import qualified Data.Vector as V
37import qualified Data.Vector as V
38−import Data.Text (Text)
38+import Data.Text (Text, pack)
39import Data.Text.Encoding (encodeUtf8, decodeUtf8With)
39import Data.Text.Encoding (encodeUtf8, decodeUtf8With)
40import Data.Text.Encoding.Error (lenientDecode)
40import Data.Text.Encoding.Error (lenientDecode)
41import qualified Data.HashMap.Strict as M
41import qualified Data.HashMap.Strict as M
@@ -183,7 +183,17 @@ parseM a front = do
183 Just (EventScalar v _ _ a') -> parseScalar v a'
183 Just (EventScalar v _ _ a') -> parseScalar v a'
184 _ -> liftIO $ throwIO $ UnexpectedEvent me Nothing
184 _ -> liftIO $ throwIO $ UnexpectedEvent me Nothing
185 o <- parseO
185 o <- parseO
186+
187+ let al = M.insert s o front
188+ al' = if s == pack "<<"
189+ then case o of
190+ Object l -> M.union al l
191+ Array l -> M.union al $ foldl merge' M.empty $ V.toList l
192+ _ -> al
193+ else al
186− parseM a $ M.insert s o front
194+ parseM a $ M.insert s o al'
195+ where merge' al (Object om) = M.union al om
196+ merge' al _ = al
187
197
188decode :: FromJSON a
198decode :: FromJSON a
189 => ByteString
199 => ByteString