From 4f3dc25f63c21fc74f1b2370335eb83c27d42ecd Mon Sep 17 00:00:00 2001 From: Volpeon Date: Sat, 27 May 2023 21:19:25 +0200 Subject: Added Node Map Merging algorithm --- src/Data/JLD/Expansion.hs | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'src/Data/JLD/Expansion.hs') diff --git a/src/Data/JLD/Expansion.hs b/src/Data/JLD/Expansion.hs index 79a992d..beb10a3 100644 --- a/src/Data/JLD/Expansion.hs +++ b/src/Data/JLD/Expansion.hs @@ -167,7 +167,7 @@ eo1314ExpandValue activeProperty value = do expandValue activeProperty value |> withStateRES eo1314StateJlde (\eo1314 jld -> eo1314{eo1314StateJlde = jld}) -eo1314ExpandKeywordItem :: Monad m => Maybe Text -> Key -> Keyword -> Value -> EO1314T e m () +eo1314ExpandKeywordItem :: forall e m. Monad m => Maybe Text -> Key -> Keyword -> Value -> EO1314T e m () eo1314ExpandKeywordItem inputType key keyword value = do JLDEEnv{..} <- ask let JLDExpansionEnv{..} = jldeEnvGlobal @@ -335,15 +335,14 @@ eo1314ExpandKeywordItem inputType key keyword value = do -- 13.4.13.4. unless (KM.size expandedObjectValue == 1 && KM.member (show KeywordReverse) expandedObjectValue) do + let go key' reverseMap (Array item) | key' /= show KeywordReverse = foldlM (go' key') reverseMap item + go _ reverseMap _ = pure reverseMap + + go' _ _ item | isListObject item || isValueObject item = throwError <| InvalidReversePropertyValue + go' key' reverseMap item = pure <| mapAddValue key' item True reverseMap + reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult - reverseMap' <- - (\fn -> ifoldlM fn reverseMap expandedObjectValue) <| \key' rm -> \case - Array item | key' /= show KeywordReverse -> do - (\fn -> foldlM fn rm item) <| \rm' i -> - if isListObject i || isValueObject i - then throwError <| InvalidReversePropertyValue - else pure <| mapAddValue key' i True rm' - _ -> pure rm + reverseMap' <- ifoldlM go reverseMap expandedObjectValue if KM.null reverseMap' then eo1314ModifyResult <| KM.delete (show KeywordReverse) @@ -555,16 +554,12 @@ eo1314ExpandNonKeywordItem key expandedProperty value = do -- 13.13. if maybe False termDefinitionReversePropertyFlag keyTermDefinition then do - reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult - -- 13.13.3. 13.13.4. - reverseMap' <- - (\fn -> foldlM fn reverseMap (valueToArray expandedValue'')) <| \rm item -> - if isListObject item || isValueObject item - then -- 13.13.4.1. - throwError InvalidReversePropertyValue - else -- 13.13.4.3. - pure <| mapAddValue (K.fromText expandedProperty) item True rm + let go _ item | isListObject item || isValueObject item = throwError InvalidReversePropertyValue + go reverseMap item = pure <| mapAddValue (K.fromText expandedProperty) item True reverseMap + + reverseMap <- gets <| getMapDefault (show KeywordReverse) <. eo1314StateResult + reverseMap' <- foldlM go reverseMap (valueToArray expandedValue'') eo1314ModifyResult <| KM.insert (show KeywordReverse) (Object reverseMap') else -- 13.14. -- cgit v1.2.3-54-g00ecf