microstache-1.0.3: Mustache templates for Haskell

Copyright | © 2016–2017 Stack Builders
License | BSD 3 clause
Maintainer | Mark Karpov <markkarpov@openmailbox.org>
Stability | experimental
Portability | portable
Safe Haskell | None
Language | Haskell2010

Text.Microstache

Contents

- Types
- Compiling
- Rendering

Description

This is a Haskell implementation of Mustache templates. The implementation conforms to the version 1.1.3 of official Mustache specification https://github.com/mustache/spec. It is extremely simple and straightforward to use with minimal but complete API — three functions to compile templates (from directory, from file, and from lazy text) and one to render them.

For rendering you only need to create Aeson's `Value` where you put the data to interpolate. Since the library re-uses Aeson's instances and most data types in Haskell ecosystem are instances of classes like `ToJSON`, the whole process is very simple for the end user.

Template Haskell helpers for compilation of templates at compile time are available in the Text.Microstache.Compile.TH module. The helpers are currently available only for GHC 8 users though.

One feature that is not currently supported is lambdas. The feature is marked as optional in the spec and can be emulated via processing of parsed template representation. The decision to drop lambdas is intentional, for the sake of simplicity and better integration with Aeson.

Here is an example of basic usage:

    {-# LANGUAGE OverloadedStrings #-}

    module Main (main) where

    import Data.Aeson
    import Data.Text
    import Text.Microstache
    import qualified Data.Text.Lazy.IO as TIO

    main :: IO ()
    main = do
      let res = compileMustacheText "foo"
            "Hi, {{name}}! You have:\n{{#things}}\n  * {{.}}\n{{/things}}\n"
      case res of
        Left err -> print err
        Right template -> TIO.putStr $ renderMustache template $ object
          [ "name"   .= ("John" :: Text)
          , "things" .= ["pen" :: Text, "candle", "egg"]
          ]

If I run the program, it prints the following:

    Hi, John! You have:
      * pen
      * candle
      * egg

For more information about Mustache templates the following links may be helpful:

- The official Mustache site: https://mustache.github.io/
- The manual: https://mustache.github.io/mustache.5.html
- The specification: https://github.com/mustache/spec
- Stack Builders Stache tutorial: https://www.stackbuilders.com/tutorials/haskell/mustache-templates/

Synopsis

- data Template = Template {
  - templateActual :: PName
  - templateCache :: Map PName [Node]
  }
- data Node
  - = TextBlock Text
  - | EscapedVar Key
  - | UnescapedVar Key
  - | Section Key [Node]
  - | InvertedSection Key [Node]
  - | Partial PName (Maybe Word)
- newtype Key = Key {
  - unKey :: [Text]
  }
- newtype PName = PName {
  - unPName :: Text
  }
- data MustacheException
  - = MustacheParserException ParseError
  - | MustacheRenderException PName Key
- displayMustacheException :: MustacheException -> String
- data MustacheWarning
  - = MustacheVariableNotFound Key
  - | MustacheDirectlyRenderedValue Key
- displayMustacheWarning :: MustacheWarning -> String
- compileMustacheDir :: PName -> FilePath -> IO Template
- compileMustacheFile :: FilePath -> IO Template
- compileMustacheText :: PName -> Text -> Either ParseError Template
- renderMustache :: Template -> Value -> Text
- renderMustacheW :: Template -> Value -> ([MustacheWarning], Text)

# Types

data Template Source #

Mustache template as name of “top-level” template and a collection of all available templates (partials).

`Template` is a `Semigroup`. This means that you can combine `Template`s (and their caches) using the `(`<>`)` operator, the resulting `Template` will have the same currently selected template as the left one. Union of caches is also left-biased.

Constructors

Template |

Fields

- templateActual :: PName

  Name of currently “selected” template (top-level one).

- templateCache :: Map PName [Node]

  Collection of all templates that are available for interpolation (as partials). The top-level one is also contained here and the “focus” can be switched easily by modifying `templateActual`.

#### Instances

Instances details

Semigroup Template Source # |
Instance details Defined in Text.Microstache.Type Methods (<>) :: Template -> Template -> Template Source # sconcat :: NonEmpty Template -> Template Source # stimes :: Integral b => b -> Template -> Template Source #
Data Template Source # |

Instance details

Defined in Text.Microstache.Type

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Template -> c Template Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Template Source #

toConstr :: Template -> Constr Source #

dataTypeOf :: Template -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Template) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Template) Source #

gmapT :: (forall b. Data b => b -> b) -> Template -> Template Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Template -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Template -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> Template -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Template -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Template -> m Template Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Template -> m Template Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Template -> m Template Source #

Generic Template Source # |

Instance details

Defined in Text.Microstache.Type

Associated Types

type Rep Template |

Instance details

Defined in Text.Microstache.Type

type Rep Template = D1 ('MetaData "Template" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) (C1 ('MetaCons "Template" 'PrefixI 'True) (S1 ('MetaSel ('Just "templateActual") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PName) :*: S1 ('MetaSel ('Just "templateCache") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map PName [Node]))))

Methods

from :: Template -> Rep Template x Source #

to :: Rep Template x -> Template Source #

Show Template Source # |
Instance details Defined in Text.Microstache.Type Methods showsPrec :: Int -> Template -> ShowS Source # show :: Template -> String Source # showList :: [Template] -> ShowS Source #
Eq Template Source # |
Instance details Defined in Text.Microstache.Type Methods (==) :: Template -> Template -> Bool Source # (/=) :: Template -> Template -> Bool Source #
Ord Template Source # |
Instance details Defined in Text.Microstache.Type Methods compare :: Template -> Template -> Ordering Source # (<) :: Template -> Template -> Bool Source # (<=) :: Template -> Template -> Bool Source # (>) :: Template -> Template -> Bool Source # (>=) :: Template -> Template -> Bool Source # max :: Template -> Template -> Template Source # min :: Template -> Template -> Template Source #
type Rep Template Source # |

Instance details

Defined in Text.Microstache.Type

type Rep Template = D1 ('MetaData "Template" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) (C1 ('MetaCons "Template" 'PrefixI 'True) (S1 ('MetaSel ('Just "templateActual") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PName) :*: S1 ('MetaSel ('Just "templateCache") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map PName [Node]))))

data Node Source #

Structural element of template.

Constructors

TextBlock Text | Plain text contained between tags
EscapedVar Key | HTML-escaped variable
UnescapedVar Key | Unescaped variable
Section Key [Node] | Mustache section
InvertedSection Key [Node] | Inverted section
Partial PName (Maybe Word) | Partial with indentation level (`Nothing` means it was inlined)

#### Instances

Instances details

Data Node Source # |

Instance details

Defined in Text.Microstache.Type

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Node -> c Node Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Node Source #

toConstr :: Node -> Constr Source #

dataTypeOf :: Node -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Node) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Node) Source #

gmapT :: (forall b. Data b => b -> b) -> Node -> Node Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Node -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Node -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> Node -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Node -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Node -> m Node Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Node -> m Node Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Node -> m Node Source #

Generic Node Source # |

Instance details

Defined in Text.Microstache.Type

Associated Types

type Rep Node |

Instance details

Defined in Text.Microstache.Type

type Rep Node = D1 ('MetaData "Node" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) ((C1 ('MetaCons "TextBlock" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: (C1 ('MetaCons "EscapedVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)) :+: C1 ('MetaCons "UnescapedVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)))) :+: (C1 ('MetaCons "Section" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Node])) :+: (C1 ('MetaCons "InvertedSection" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Node])) :+: C1 ('MetaCons "Partial" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Word))))))

Methods

from :: Node -> Rep Node x Source #

to :: Rep Node x -> Node Source #

Show Node Source # |
Instance details Defined in Text.Microstache.Type Methods showsPrec :: Int -> Node -> ShowS Source # show :: Node -> String Source # showList :: [Node] -> ShowS Source #
Eq Node Source # |
Instance details Defined in Text.Microstache.Type Methods (==) :: Node -> Node -> Bool Source # (/=) :: Node -> Node -> Bool Source #
Ord Node Source # |
Instance details Defined in Text.Microstache.Type Methods compare :: Node -> Node -> Ordering Source # (<) :: Node -> Node -> Bool Source # (<=) :: Node -> Node -> Bool Source # (>) :: Node -> Node -> Bool Source # (>=) :: Node -> Node -> Bool Source # max :: Node -> Node -> Node Source # min :: Node -> Node -> Node Source #
type Rep Node Source # |

Instance details

Defined in Text.Microstache.Type

type Rep Node = D1 ('MetaData "Node" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) ((C1 ('MetaCons "TextBlock" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: (C1 ('MetaCons "EscapedVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)) :+: C1 ('MetaCons "UnescapedVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)))) :+: (C1 ('MetaCons "Section" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Node])) :+: (C1 ('MetaCons "InvertedSection" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Node])) :+: C1 ('MetaCons "Partial" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Word))))))

newtype Key Source #

Identifier for values to interpolate.

The representation is the following:

- `[]` — empty list means implicit iterators;
- `[text]` — single key is a normal identifier;
- `[text1, text2]` — multiple keys represent dotted names.

Constructors

Key |

Fields

- unKey :: [Text]

#### Instances

Instances details

NFData Key Source # |
Instance details Defined in Text.Microstache.Type Methods rnf :: Key -> () Source #
Monoid Key Source # |
Instance details Defined in Text.Microstache.Type Methods mempty :: Key Source # mappend :: Key -> Key -> Key Source # mconcat :: [Key] -> Key Source #
Semigroup Key Source # |
Instance details Defined in Text.Microstache.Type Methods (<>) :: Key -> Key -> Key Source # sconcat :: NonEmpty Key -> Key Source # stimes :: Integral b => b -> Key -> Key Source #
Data Key Source # |

Instance details

Defined in Text.Microstache.Type

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Key -> c Key Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Key Source #

toConstr :: Key -> Constr Source #

dataTypeOf :: Key -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Key) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Key) Source #

gmapT :: (forall b. Data b => b -> b) -> Key -> Key Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Key -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Key -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> Key -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Key -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Key -> m Key Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Key -> m Key Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Key -> m Key Source #

Generic Key Source # |

Instance details

Defined in Text.Microstache.Type

Associated Types

type Rep Key |
Instance details Defined in Text.Microstache.Type type Rep Key = D1 ('MetaData "Key" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'True) (C1 ('MetaCons "Key" 'PrefixI 'True) (S1 ('MetaSel ('Just "unKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Text])))

Methods

from :: Key -> Rep Key x Source #

to :: Rep Key x -> Key Source #

Show Key Source # |
Instance details Defined in Text.Microstache.Type Methods showsPrec :: Int -> Key -> ShowS Source # show :: Key -> String Source # showList :: [Key] -> ShowS Source #
Eq Key Source # |
Instance details Defined in Text.Microstache.Type Methods (==) :: Key -> Key -> Bool Source # (/=) :: Key -> Key -> Bool Source #
Ord Key Source # |
Instance details Defined in Text.Microstache.Type Methods compare :: Key -> Key -> Ordering Source # (<) :: Key -> Key -> Bool Source # (<=) :: Key -> Key -> Bool Source # (>) :: Key -> Key -> Bool Source # (>=) :: Key -> Key -> Bool Source # max :: Key -> Key -> Key Source # min :: Key -> Key -> Key Source #
type Rep Key Source # |
Instance details Defined in Text.Microstache.Type type Rep Key = D1 ('MetaData "Key" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'True) (C1 ('MetaCons "Key" 'PrefixI 'True) (S1 ('MetaSel ('Just "unKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Text])))

newtype PName Source #

Identifier for partials. Note that with the `OverloadedStrings` extension you can use just string literals to create values of this type.

Constructors

PName |

Fields

- unPName :: Text

#### Instances

Instances details

NFData PName Source # |
Instance details Defined in Text.Microstache.Type Methods rnf :: PName -> () Source #
Data PName Source # |

Instance details

Defined in Text.Microstache.Type

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PName -> c PName Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c PName Source #

toConstr :: PName -> Constr Source #

dataTypeOf :: PName -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c PName) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c PName) Source #

gmapT :: (forall b. Data b => b -> b) -> PName -> PName Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PName -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PName -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> PName -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> PName -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> PName -> m PName Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PName -> m PName Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PName -> m PName Source #

IsString PName Source # |
Instance details Defined in Text.Microstache.Type Methods fromString :: String -> PName Source #
Generic PName Source # |

Instance details

Defined in Text.Microstache.Type

Associated Types

type Rep PName |
Instance details Defined in Text.Microstache.Type type Rep PName = D1 ('MetaData "PName" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'True) (C1 ('MetaCons "PName" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

Methods

from :: PName -> Rep PName x Source #

to :: Rep PName x -> PName Source #

Show PName Source # |
Instance details Defined in Text.Microstache.Type Methods showsPrec :: Int -> PName -> ShowS Source # show :: PName -> String Source # showList :: [PName] -> ShowS Source #
Eq PName Source # |
Instance details Defined in Text.Microstache.Type Methods (==) :: PName -> PName -> Bool Source # (/=) :: PName -> PName -> Bool Source #
Ord PName Source # |
Instance details Defined in Text.Microstache.Type Methods compare :: PName -> PName -> Ordering Source # (<) :: PName -> PName -> Bool Source # (<=) :: PName -> PName -> Bool Source # (>) :: PName -> PName -> Bool Source # (>=) :: PName -> PName -> Bool Source # max :: PName -> PName -> PName Source # min :: PName -> PName -> PName Source #
type Rep PName Source # |
Instance details Defined in Text.Microstache.Type type Rep PName = D1 ('MetaData "PName" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'True) (C1 ('MetaCons "PName" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data MustacheException Source #

Exception that is thrown when parsing of a template has failed or referenced values were not provided.

Constructors

MustacheParserException ParseError | Template parser has failed. This contains the parse error.
MustacheRenderException PName Key | Deprecated: Not thrown anymore, will be removed in the next major version of microstache A referenced value was not provided. The exception provides info about partial in which the issue happened `PName` and name of the missing key `Key`.

#### Instances

Instances details

Exception MustacheException Source # |
Instance details Defined in Text.Microstache.Type Methods toException :: MustacheException -> SomeException Source # fromException :: SomeException -> Maybe MustacheException Source # displayException :: MustacheException -> String Source # backtraceDesired :: MustacheException -> Bool Source #
Generic MustacheException Source # |

Instance details

Defined in Text.Microstache.Type

Associated Types

type Rep MustacheException |

Instance details

Defined in Text.Microstache.Type

type Rep MustacheException = D1 ('MetaData "MustacheException" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) (C1 ('MetaCons "MustacheParserException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ParseError)) :+: C1 ('MetaCons "MustacheRenderException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)))

Methods

from :: MustacheException -> Rep MustacheException x Source #

to :: Rep MustacheException x -> MustacheException Source #

Show MustacheException Source # |
Instance details Defined in Text.Microstache.Type Methods showsPrec :: Int -> MustacheException -> ShowS Source # show :: MustacheException -> String Source # showList :: [MustacheException] -> ShowS Source #
Eq MustacheException Source # |
Instance details Defined in Text.Microstache.Type Methods (==) :: MustacheException -> MustacheException -> Bool Source # (/=) :: MustacheException -> MustacheException -> Bool Source #
type Rep MustacheException Source # |

Instance details

Defined in Text.Microstache.Type

type Rep MustacheException = D1 ('MetaData "MustacheException" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) (C1 ('MetaCons "MustacheParserException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ParseError)) :+: C1 ('MetaCons "MustacheRenderException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)))

displayMustacheException :: MustacheException -> String Source #

Since: 1.0.1

data MustacheWarning Source #

Since: 1.0.1

Constructors

MustacheVariableNotFound Key | The template contained a variable for which there was no data counterpart in the current context
MustacheDirectlyRenderedValue Key | A complex value such as an Object or Array was directly rendered into the template

#### Instances

Instances details

Exception MustacheWarning Source # |
Instance details Defined in Text.Microstache.Type Methods toException :: MustacheWarning -> SomeException Source # fromException :: SomeException -> Maybe MustacheWarning Source # displayException :: MustacheWarning -> String Source # backtraceDesired :: MustacheWarning -> Bool Source #
Generic MustacheWarning Source # |

Instance details

Defined in Text.Microstache.Type

Associated Types

type Rep MustacheWarning |

Instance details

Defined in Text.Microstache.Type

type Rep MustacheWarning = D1 ('MetaData "MustacheWarning" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) (C1 ('MetaCons "MustacheVariableNotFound" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)) :+: C1 ('MetaCons "MustacheDirectlyRenderedValue" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)))

Methods

from :: MustacheWarning -> Rep MustacheWarning x Source #

to :: Rep MustacheWarning x -> MustacheWarning Source #

Show MustacheWarning Source # |
Instance details Defined in Text.Microstache.Type Methods showsPrec :: Int -> MustacheWarning -> ShowS Source # show :: MustacheWarning -> String Source # showList :: [MustacheWarning] -> ShowS Source #
Eq MustacheWarning Source # |
Instance details Defined in Text.Microstache.Type Methods (==) :: MustacheWarning -> MustacheWarning -> Bool Source # (/=) :: MustacheWarning -> MustacheWarning -> Bool Source #
type Rep MustacheWarning Source # |

Instance details

Defined in Text.Microstache.Type

type Rep MustacheWarning = D1 ('MetaData "MustacheWarning" "Text.Microstache.Type" "microstache-1.0.3-65hwVxKYsea8EtbUB5KPre" 'False) (C1 ('MetaCons "MustacheVariableNotFound" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)) :+: C1 ('MetaCons "MustacheDirectlyRenderedValue" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Key)))

displayMustacheWarning :: MustacheWarning -> String Source #

Since: 1.0.1

# Compiling

compileMustacheDir Source #

Arguments

:: PName | Which template to select after compiling
-> FilePath | Directory with templates
-> IO Template | The resulting template

Compile all templates in specified directory and select one. Template files should have extension `mustache`, (e.g. `foo.mustache`) to be recognized. This function does not scan the directory recursively.

The action can throw the same exceptions as `getDirectoryContents`, and `readFile`.

compileMustacheFile Source #

Arguments

:: FilePath | Location of the file
-> IO Template |

Compile single Mustache template and select it.

The action can throw the same exceptions as `readFile`.

compileMustacheText Source #

Arguments

:: PName | How to name the template?
-> Text | The template to compile
-> Either ParseError Template | The result

Compile Mustache template from a lazy `Text` value. The cache will contain only this template named according to given `PName`.

# Rendering

renderMustache :: Template -> Value -> Text Source #

Render a Mustache `Template` using Aeson's `Value` to get actual values for interpolation.

renderMustacheW :: Template -> Value -> ([MustacheWarning], Text) Source #

Like `renderMustache` but also return a list of warnings.

Since: 1.0.1