ginger-0.1.1.1: An implementation of the Jinja2 template language in Haskell

Safe HaskellNone
LanguageHaskell2010

Text.Ginger.GVal

Description

GVal is a generic unitype value, representing the kind of values that Ginger can understand.

Most of the types in this module are parametrized over an m type, which is the host monad for template execution, as passed to runGingerT.

Synopsis

Documentation

type Function m = [(Maybe Text, GVal m)] -> m (GVal m) Source

A function that can be called from within a template execution context.

matchFuncArgs :: [Text] -> [(Maybe Text, GVal m)] -> (HashMap Text (GVal m), [GVal m], HashMap Text (GVal m)) Source

Match arguments passed to a function at runtime against a list of declared argument names. matchFuncArgs argNames argsPassed returns (matchedArgs, positionalArgs, namedArgs), where matchedArgs is a list of arguments matched against declared names (by name or by position), positionalArgs are the unused positional (unnamed) arguments, and namedArgs are the unused named arguments.

data GVal m Source

Ginger value.

Instances

ToGVal m (GVal m) Source

Trivial instance for GVal itself

Show (GVal m) Source

For convenience, Show is implemented in a way that looks similar to JavaScript / JSON

IsString (GVal m) Source 
Default (GVal m) Source

The default GVal is equivalent to NULL.

ToHtml (GVal m) Source

Converting to HTML hooks into the ToHtml instance for Text for most tags. Tags that have no obvious textual representation render as empty HTML.

class ToGVal m a where Source

Types that implement conversion to GVal

Methods

toGVal :: a -> GVal m Source

Instances

ToGVal m Value Source

Convert Aeson Values to GVals over an arbitrary host monad. Because JSON cannot represent functions, this conversion will never produce a Function.

ToGVal m Html Source 
ToGVal m Text Source 
ToGVal m Text Source 
ToGVal m Bool Source 
ToGVal m Scientific Source 
ToGVal m Integer Source 
ToGVal m Int Source 
ToGVal m v => ToGVal m [v] Source 
ToGVal m v => ToGVal m (Maybe v) Source 
ToGVal m (GVal m) Source

Trivial instance for GVal itself

ToGVal m v => ToGVal m (HashMap Text v) Source 

lookupIndex :: Int -> GVal m -> Maybe (GVal m) Source

Treat a GVal as a flat list and look up a value by integer index. If the value is not a List, or if the index exceeds the list length, return Nothing.

lookupIndexMay :: Maybe Int -> GVal m -> Maybe (GVal m) Source

Helper function; look up a value by an integer index when the index may or may not be available. If no index is given, return Nothing.

lookupLoose :: GVal m -> GVal m -> Maybe (GVal m) Source

Loosely-typed lookup: try dictionary-style lookup first (treat index as a string, and container as a dictionary), if that doesn't yield anything (either because the index is not string-ish, or because the container doesn't provide dictionary-style access), try index-based lookup.

keys :: GVal m -> Maybe [Text] Source

Treat a GVal as a dictionary and list all the keys, with no particular ordering.

toNumber :: GVal m -> Maybe Scientific Source

Convert a GVal to a number.

toInt :: GVal m -> Maybe Int Source

Convert a GVal to an Int. The conversion will fail when the value is not numeric, and also if it is too large to fit in an Int.

toBoolean :: GVal m -> Bool Source

Loose cast to boolean.

Numeric zero, empty strings, empty lists, empty objects, Null, and boolean False are considered falsy, anything else (including functions) is considered true-ish.

toFunction :: GVal m -> Maybe (Function m) Source

Dynamically cast to a function. This yields Just a Function if the value is a function, Nothing if it's not.

fromFunction :: Function m -> GVal m Source

Turn a Function into a GVal