module Data.JLD.Expansion.Global ( JLDExpansionT, JLDExpansionEnv (..), JLDExpansionState (..), hoistEnv, modifyContextCache, modifyDocumentCache, ) where import Data.JLD.Prelude import Data.JLD.Control.Monad.RES (REST) import Data.JLD.Error (JLDError) import Data.JLD.Options (ContextCache, DocumentCache, DocumentLoader (..), JLDVersion (..), hoistDocumentLoader) type JLDExpansionT e m = REST (JLDExpansionEnv e m) (JLDError e) JLDExpansionState m data JLDExpansionEnv e m = JLDExpansionEnv { jldExpansionEnvDocumentLoader :: DocumentLoader e m , jldExpansionEnvProcessingMode :: JLDVersion , jldExpansionEnvMaxRemoteContexts :: Int } deriving (Show) data JLDExpansionState = JLDExpansionState { jldExpansionStateContextCache :: ContextCache , jldExpansionStateDocumentCache :: DocumentCache } deriving (Show, Eq) hoistEnv :: (forall a. m a -> n a) -> JLDExpansionEnv e m -> JLDExpansionEnv e n hoistEnv map' options = options{jldExpansionEnvDocumentLoader = options |> jldExpansionEnvDocumentLoader .> hoistDocumentLoader map'} modifyContextCache :: MonadState JLDExpansionState m => (ContextCache -> ContextCache) -> m () modifyContextCache fn = modify \s -> s{jldExpansionStateContextCache = fn (jldExpansionStateContextCache s)} modifyDocumentCache :: MonadState JLDExpansionState m => (DocumentCache -> DocumentCache) -> m () modifyDocumentCache fn = modify \s -> s{jldExpansionStateDocumentCache = fn (jldExpansionStateDocumentCache s)}