heterocephalus-1.0.1.2: A type-safe template engine for working with popular front end development tools

CopyrightKadzuya Okamoto 2016
LicenseMIT
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Text.Heterocephalus

Contents

Description

This module exports functions for working with frontend templates from Haskell.

Synopsis

Core functions

compileTextFile :: FilePath -> Q Exp Source #

A function to compile template file. This function DOES NOT escape template variables. To render the compiled file, use Renderer.*.renderMarkup.

>>> putStr $ renderMarkup (let as = ["<a>", "b"] in $(compileTextFile "templates/sample.txt"))
sample
key: <a>,
key: b,

compileTextFileWithDefault :: FilePath -> DefaultScope -> Q Exp Source #

Same as compileText but allows the user to specify default values for template parameters.

>>> :set -XOverloadedStrings
>>> :{
>>> putStr $ renderMarkup (
>>> let as = ["<a>", "b"]
>>> in $(compileTextFileWithDefault "templates/sample.txt"
>>> [("as", [| ["foo", "bar"] |])]
>>> )
>>> )
>>> :}
sample
key: <a>,
key: b,
>>> :{
>>> putStr $ renderMarkup (
>>> $(compileTextFileWithDefault "templates/sample.txt"
>>> [("as", [| ["foo", "bar"] |])]
>>> )
>>> )
>>> :}
sample
key: foo,
key: bar,

compileHtmlFile :: FilePath -> Q Exp Source #

Same as compileTextFile but escapes template variables in HTML.

>>> putStr $ renderMarkup (let as = ["<a>", "b"] in $(compileHtmlFile "templates/sample.txt"))
sample
key: &lt;a&gt;,
key: b,

compileHtmlFileWithDefault :: FilePath -> DefaultScope -> Q Exp Source #

Same as compileHtmlFile but allows the user to specify default values for template parameters.

>>> :set -XOverloadedStrings
>>> :{
>>> putStr $ renderMarkup (
>>> let as = ["<a>", "b"]
>>> in $(compileHtmlFileWithDefault "templates/sample.txt"
>>> [("as", [| ["foo", "bar"] |])]
>>> )
>>> )
>>> :}
sample
key: &lt;a&gt;,
key: b,
>>> :{
>>> putStr $ renderMarkup (
>>> $(compileHtmlFileWithDefault "templates/sample.txt"
>>> [("as", [| ["foo", "bar"] |])]
>>> )
>>> )
>>> :}
sample
key: foo,
key: bar,

QuasiQuoters

compileText :: QuasiQuoter Source #

Heterocephalus quasi-quoter. This function DOES NOT escape template variables. To render the compiled file, use Renderer.*.renderMarkup.

>>> renderMarkup (let as = ["<a>", "b"] in [compileText|sample %{ forall a <- as }key: #{a}, %{ endforall }|])
"sample key: <a>, key: b, "
>>> renderMarkup (let num=2 in [compileText|#{num} is %{ if even num }even number.%{ else }odd number.%{ endif }|])
"2 is even number."

compileHtml :: QuasiQuoter Source #

Heterocephalus quasi-quoter for HTML. Same as compileText but this function does escape template variables in HTML.

>>> renderMarkup (let as = ["<a>", "b"] in [compileHtml|sample %{ forall a <- as }key: #{a}, %{ endforall }|])
"sample key: &lt;a&gt;, key: b, "

low-level

compileFile :: HeterocephalusSetting -> FilePath -> Q Exp Source #

Compile a template file.

compileFileWithDefault :: DefaultScope -> HeterocephalusSetting -> FilePath -> Q Exp Source #

Same as compileFile but we can specify default scope.

Orphan instances