diff options
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 | 
