@@ -35,7 +35,7 @@ import Control.Monad.Trans.Class (MonadTrans, lift)
3535import Control.Monad.IO.Class (MonadIO, liftIO)
3636import Control.Monad (liftM)
3737import qualified Data.Vector as V
38−import Data.Text (Text)
38+import Data.Text (Text, pack)
3939import Data.Text.Encoding (encodeUtf8, decodeUtf8With)
4040import Data.Text.Encoding.Error (lenientDecode)
4141import qualified Data.HashMap.Strict as M
@@ -183,7 +183,17 @@ parseM a front = do
183183 Just (EventScalar v _ _ a') -> parseScalar v a'
184184 _ -> liftIO $ throwIO $ UnexpectedEvent me Nothing
185185 o <- parseO
186− parseM a $ M.insert s o front
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
194+ parseM a $ M.insert s o al'
195+ where merge' al (Object om) = M.union al om
196+ merge' al _ = al
187197
188198decode :: FromJSON a
189199 => ByteString