ginger2-2.2.0.0: Jinja templates for Haskell
Safe HaskellNone
LanguageHaskell2010

Language.Ginger.Interpret

Synopsis

Documentation

class Eval (m :: Type -> Type) a where Source #

Eval represents types that can be evaluated in some 'GingerT m' monadic context.

Methods

eval :: a -> GingerT m (Value m) Source #

Instances

Instances details
Monad m => Eval m Expr Source # 
Instance details

Defined in Language.Ginger.Interpret.Eval

Methods

eval :: Expr -> GingerT m (Value m) Source #

Monad m => Eval m Statement Source # 
Instance details

Defined in Language.Ginger.Interpret.Eval

Methods

eval :: Statement -> GingerT m (Value m) Source #

Monad m => Eval m Template Source # 
Instance details

Defined in Language.Ginger.Interpret.Eval

Methods

eval :: Template -> GingerT m (Value m) Source #

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 #

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

Evaluate an expression, dereferencing mutable refs.

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

evalSs :: forall (m :: Type -> Type). Monad m => [Statement] -> GingerT m (Value m) Source #

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

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 #

runGingerT :: (Monad m, SplitGen g) => GingerT m a -> Context m -> Env m -> g -> m (Either RuntimeError a) Source #

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

defContext :: forall (m :: Type -> Type). Monad m => Context m Source #

setVar :: forall (m :: Type -> Type). Monad m => Identifier -> Value m -> GingerT m () 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 #

stringify :: forall (m :: Type -> Type) t. (Monad m, MonadError RuntimeError (t m), MonadTrans t) => Value m -> t m Text Source #

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

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

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

data RuntimeError Source #

Constructors

ArgumentError 

Fields

  • Text

    Callee

  • Text

    Argument (position or name)

  • Text

    Expected argument

  • Text

    Actual argument

TagError 

Fields

  • Text

    Identifier object context

  • Text

    Expected type(s)

  • Text

    Actual type

NonCallableObjectError Text

Object that was attempted to be used as a callable

NotInScopeError Text

Identifier

NotImplementedError Text

The thing that isn't implemented

NumericError 

Fields

  • Text

    Identifier object context

  • Text

    Error description

TemplateFileNotFoundError Text

Template name

TemplateParseError 

Fields

FatalError Text 
PositionedError !SourcePosition !RuntimeError 

Instances

Instances details
Exception RuntimeError Source # 
Instance details

Defined in Language.Ginger.RuntimeError

Show RuntimeError Source # 
Instance details

Defined in Language.Ginger.RuntimeError

Eq RuntimeError Source # 
Instance details

Defined in Language.Ginger.RuntimeError

Applicative m => ToNativeProcedure m (m (Either RuntimeError (Value m))) Source # 
Instance details

Defined in Language.Ginger.Value

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 #

Applicative m => FnToValue (Value m -> Value m -> Value m -> Value m -> Value m -> m (Either RuntimeError (Value m))) m Source # 
Instance details

Defined in Language.Ginger.Value

Methods

fnToValue :: ObjectID -> Maybe ProcedureDoc -> (Value m -> Value m -> Value m -> Value m -> Value m -> m (Either RuntimeError (Value m))) -> Value m Source #

Applicative m => FnToValue (Value m -> Value m -> Value m -> Value m -> m (Either RuntimeError (Value m))) m Source # 
Instance details

Defined in Language.Ginger.Value

Methods

fnToValue :: ObjectID -> Maybe ProcedureDoc -> (Value m -> Value m -> Value m -> Value m -> m (Either RuntimeError (Value m))) -> Value m Source #

Applicative m => FnToValue (Value m -> Value m -> Value m -> m (Either RuntimeError (Value m))) m Source # 
Instance details

Defined in Language.Ginger.Value

Methods

fnToValue :: ObjectID -> Maybe ProcedureDoc -> (Value m -> Value m -> Value m -> m (Either RuntimeError (Value m))) -> Value m Source #

Applicative m => FnToValue (Value m -> Value m -> m (Either RuntimeError (Value m))) m Source # 
Instance details

Defined in Language.Ginger.Value

Applicative m => FnToValue (Value m -> m (Either RuntimeError (Value m))) m Source # 
Instance details

Defined in Language.Ginger.Value