ginger2
Safe HaskellNone
LanguageHaskell2010

Language.Ginger.Interpret.Type

Synopsis

Documentation

newtype GingerT (m :: Type -> Type) a Source #

The Ginger interpreter monad. Provides error reporting / handling via MonadError, an execution context (Context), and an evaluation state (EvalState).

Constructors

GingerT 

Instances

Instances details
MonadTrans GingerT Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

lift :: Monad m => m a -> GingerT m a #

Monad m => MonadError RuntimeError (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

throwError :: RuntimeError -> GingerT m a #

catchError :: GingerT m a -> (RuntimeError -> GingerT m a) -> GingerT m a #

Monad m => Applicative (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

pure :: a -> GingerT m a #

(<*>) :: GingerT m (a -> b) -> GingerT m a -> GingerT m b #

liftA2 :: (a -> b -> c) -> GingerT m a -> GingerT m b -> GingerT m c #

(*>) :: GingerT m a -> GingerT m b -> GingerT m b #

(<*) :: GingerT m a -> GingerT m b -> GingerT m a #

Functor m => Functor (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

fmap :: (a -> b) -> GingerT m a -> GingerT m b #

(<$) :: a -> GingerT m b -> GingerT m a #

Monad m => Monad (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

(>>=) :: GingerT m a -> (a -> GingerT m b) -> GingerT m b #

(>>) :: GingerT m a -> GingerT m b -> GingerT m b #

return :: a -> GingerT m a #

Monad m => MonadReader (Context m) (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

ask :: GingerT m (Context m) #

local :: (Context m -> Context m) -> GingerT m a -> GingerT m a #

reader :: (Context m -> a) -> GingerT m a #

Monad m => MonadState (EvalState m) (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

get :: GingerT m (EvalState m) #

put :: EvalState m -> GingerT m () #

state :: (EvalState m -> (a, EvalState m)) -> GingerT m a #

data EvalState (m :: Type -> Type) Source #

Evaluation state. This keeps track of variables in scope, as well as loaded templates and blocks, and the current source position.

Instances

Instances details
Semigroup (EvalState m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

(<>) :: EvalState m -> EvalState m -> EvalState m #

sconcat :: NonEmpty (EvalState m) -> EvalState m #

stimes :: Integral b => b -> EvalState m -> EvalState m #

Monad m => MonadState (EvalState m) (GingerT m) Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

Methods

get :: GingerT m (EvalState m) #

put :: EvalState m -> GingerT m () #

state :: (EvalState m -> (a, EvalState m)) -> GingerT m a #

data LoadedBlock Source #

Instances

Instances details
Show LoadedBlock Source # 
Instance details

Defined in Language.Ginger.Interpret.Type

decorateError :: forall (m :: Type -> Type) a. Monad m => SourcePosition -> RuntimeError -> GingerT m a Source #

lookupVar :: forall (m :: Type -> Type). Monad m => Identifier -> GingerT m (Value m) Source #

lookupVarMaybe :: forall (m :: Type -> Type). Monad m => Identifier -> GingerT m (Maybe (Value m)) Source #

modifyEnv :: forall (m :: Type -> Type). Monad m => (Env m -> Env m) -> GingerT m () Source #

setVar :: forall (m :: Type -> Type). Monad m => Identifier -> Value m -> GingerT m () Source #

setVars :: forall (m :: Type -> Type). Monad m => Map Identifier (Value m) -> GingerT m () Source #

setMutable :: forall (m :: Type -> Type). Monad m => Identifier -> Identifier -> Value m -> GingerT m () Source #

setBlock :: forall (m :: Type -> Type). Monad m => Identifier -> Block -> GingerT m LoadedBlock Source #

allocMutable :: forall (m :: Type -> Type) t. (Monad m, MonadTrans t, MonadState (EvalState m) (t m)) => Value m -> t m RefID Source #

assignMutable :: forall (m :: Type -> Type). Monad m => RefID -> Value m -> GingerT m () Source #

modifyMutable :: forall (m :: Type -> Type). Monad m => RefID -> (Value m -> GingerT m (Value m)) -> GingerT m () Source #

derefMutableMaybe :: forall (m :: Type -> Type). Monad m => RefID -> GingerT m (Maybe (Value m)) Source #

derefMutable :: forall (m :: Type -> Type). Monad m => RefID -> GingerT m (Value m) Source #

setSourcePosition :: forall (m :: Type -> Type). Monad m => SourcePosition -> GingerT m () Source #

clearSourcePosition :: forall (m :: Type -> Type). Monad m => GingerT m () Source #

getBlock :: forall (m :: Type -> Type). Monad m => Identifier -> GingerT m (Maybe LoadedBlock) Source #

scoped :: forall (m :: Type -> Type) a. Monad m => GingerT m a -> GingerT m a Source #

withoutContext :: forall (m :: Type -> Type) a. Monad m => GingerT m a -> GingerT m a Source #

Run a GingerT action in a fresh environment; however, any globals set by the invoked action will be ported back to the calling environment.

withEnv :: forall (m :: Type -> Type) a. Monad m => Env m -> GingerT m a -> GingerT m a Source #

bind :: forall (m :: Type -> Type) a. Monad m => (Env m -> a) -> GingerT m a Source #

scopify :: forall (m :: Type -> Type). Monad m => Value m -> GingerT m () Source #

Lift a dictionary value into the current scope, such that dictionary keys become variables bound to the respective values in the dictionary.

withJinjaFilters :: forall (m :: Type -> Type) a. Monad m => GingerT m a -> GingerT m a Source #

withJinjaTests :: forall (m :: Type -> Type) a. Monad m => GingerT m a -> GingerT m a Source #

withJinjaKey :: forall (m :: Type -> Type) a. Monad m => Identifier -> GingerT m a -> GingerT m a Source #