aboutsummaryrefslogtreecommitdiffstats
path: root/src/Data/JLD/Expansion/Global.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/JLD/Expansion/Global.hs')
-rw-r--r--src/Data/JLD/Expansion/Global.hs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Data/JLD/Expansion/Global.hs b/src/Data/JLD/Expansion/Global.hs
new file mode 100644
index 0000000..b92b4af
--- /dev/null
+++ b/src/Data/JLD/Expansion/Global.hs
@@ -0,0 +1,38 @@
1module Data.JLD.Expansion.Global (
2 JLDExpansionT,
3 JLDExpansionEnv (..),
4 JLDExpansionState (..),
5 hoistEnv,
6 modifyContextCache,
7 modifyDocumentCache,
8) where
9
10import Data.JLD.Prelude
11
12import Data.JLD.Control.Monad.RES (REST)
13import Data.JLD.Error (JLDError)
14import Data.JLD.Options (ContextCache, DocumentCache, DocumentLoader (..), JLDVersion (..), hoistDocumentLoader)
15
16type JLDExpansionT e m = REST (JLDExpansionEnv e m) (JLDError e) JLDExpansionState m
17
18data JLDExpansionEnv e m = JLDExpansionEnv
19 { jldExpansionEnvDocumentLoader :: DocumentLoader e m
20 , jldExpansionEnvProcessingMode :: JLDVersion
21 , jldExpansionEnvMaxRemoteContexts :: Int
22 }
23 deriving (Show)
24
25data JLDExpansionState = JLDExpansionState
26 { jldExpansionStateContextCache :: ContextCache
27 , jldExpansionStateDocumentCache :: DocumentCache
28 }
29 deriving (Show, Eq)
30
31hoistEnv :: (forall a. m a -> n a) -> JLDExpansionEnv e m -> JLDExpansionEnv e n
32hoistEnv map' options = options{jldExpansionEnvDocumentLoader = options |> jldExpansionEnvDocumentLoader .> hoistDocumentLoader map'}
33
34modifyContextCache :: MonadState JLDExpansionState m => (ContextCache -> ContextCache) -> m ()
35modifyContextCache fn = modify \s -> s{jldExpansionStateContextCache = fn (jldExpansionStateContextCache s)}
36
37modifyDocumentCache :: MonadState JLDExpansionState m => (DocumentCache -> DocumentCache) -> m ()
38modifyDocumentCache fn = modify \s -> s{jldExpansionStateDocumentCache = fn (jldExpansionStateDocumentCache s)}