diff options
author | Volpeon <github@volpeon.ink> | 2023-05-28 10:18:49 +0200 |
---|---|---|
committer | Volpeon <github@volpeon.ink> | 2023-05-28 10:18:49 +0200 |
commit | b2c846b0daf9d6e26e1e2a07fecc848b4732baa0 (patch) | |
tree | d76c99df7a6e52301d41c59eac1736137062ceac /src/Data/JLD.hs | |
parent | Completed untested Flattening implementation (diff) | |
download | hs-jsonld-b2c846b0daf9d6e26e1e2a07fecc848b4732baa0.tar.gz hs-jsonld-b2c846b0daf9d6e26e1e2a07fecc848b4732baa0.tar.bz2 hs-jsonld-b2c846b0daf9d6e26e1e2a07fecc848b4732baa0.zip |
Fixed flattening errors
Diffstat (limited to 'src/Data/JLD.hs')
-rw-r--r-- | src/Data/JLD.hs | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/Data/JLD.hs b/src/Data/JLD.hs index d7688d0..a7042dc 100644 --- a/src/Data/JLD.hs +++ b/src/Data/JLD.hs | |||
@@ -4,6 +4,7 @@ module Data.JLD ( | |||
4 | module Data.JLD.Options, | 4 | module Data.JLD.Options, |
5 | JLDExpansionParams (..), | 5 | JLDExpansionParams (..), |
6 | JLDExpansionState (..), | 6 | JLDExpansionState (..), |
7 | JLDFlatteningParams (..), | ||
7 | expand, | 8 | expand, |
8 | flatten, | 9 | flatten, |
9 | ) where | 10 | ) where |
@@ -100,9 +101,44 @@ expand document baseUrl paramsFn = do | |||
100 | 101 | ||
101 | pure (result', state') | 102 | pure (result', state') |
102 | 103 | ||
103 | flatten :: Monad m => Value -> URI -> (JLDExpansionParams () m -> JLDExpansionParams e m) -> m (Either (JLDError e) Value, JLDExpansionState) | 104 | data JLDFlatteningParams e m = JLDFlatteningParams |
105 | { jldFlatteningParamsDocumentLoader :: DocumentLoader e m | ||
106 | , jldFlatteningParamsProcessingMode :: JLDVersion | ||
107 | , jldFlatteningParamsMaxRemoteContexts :: Int | ||
108 | , jldFlatteningParamsExpandContext :: Maybe Value | ||
109 | , jldFlatteningParamsFrameExpansion :: Bool | ||
110 | , jldFlatteningParamsState :: JLDExpansionState | ||
111 | , jldFlatteningParamsCompactArrays :: Bool | ||
112 | } | ||
113 | deriving (Show) | ||
114 | |||
115 | flatten :: Monad m => Value -> URI -> (JLDFlatteningParams () m -> JLDFlatteningParams e m) -> m (Either (JLDError e) Value, JLDExpansionState) | ||
104 | flatten document baseUrl paramsFn = do | 116 | flatten document baseUrl paramsFn = do |
105 | (result, state') <- expand document baseUrl paramsFn | 117 | let JLDFlatteningParams{..} = |
118 | paramsFn | ||
119 | JLDFlatteningParams | ||
120 | { jldFlatteningParamsDocumentLoader = DocumentLoader <. const <. pure <| Left () | ||
121 | , jldFlatteningParamsProcessingMode = JLD1_1 | ||
122 | , jldFlatteningParamsMaxRemoteContexts = 20 | ||
123 | , jldFlatteningParamsExpandContext = Nothing | ||
124 | , jldFlatteningParamsFrameExpansion = False | ||
125 | , jldFlatteningParamsState = | ||
126 | JLDExpansionState | ||
127 | { jldExpansionStateContextCache = mempty | ||
128 | , jldExpansionStateDocumentCache = mempty | ||
129 | } | ||
130 | , jldFlatteningParamsCompactArrays = True | ||
131 | } | ||
132 | expansionParams = | ||
133 | JLDExpansionParams | ||
134 | { jldExpansionParamsDocumentLoader = jldFlatteningParamsDocumentLoader | ||
135 | , jldExpansionParamsProcessingMode = jldFlatteningParamsProcessingMode | ||
136 | , jldExpansionParamsMaxRemoteContexts = jldFlatteningParamsMaxRemoteContexts | ||
137 | , jldExpansionParamsExpandContext = jldFlatteningParamsExpandContext | ||
138 | , jldExpansionParamsFrameExpansion = jldFlatteningParamsFrameExpansion | ||
139 | , jldExpansionParamsState = jldFlatteningParamsState | ||
140 | } | ||
141 | (result, state') <- expand document baseUrl (const expansionParams) | ||
106 | case result of | 142 | case result of |
107 | Left err -> pure (Left err, state') | 143 | Left err -> pure (Left err, state') |
108 | Right expanded -> fmap (,state') <. runExceptT <| F.flatten expanded | 144 | Right expanded -> fmap (,state') <. runExceptT <| F.flatten expanded |