mustache-haskell

Straight implementation of mustache templates https://github.com/danchoi/mustache-haskell

Latest on Hackage:0.1.0.5

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

MIT licensed by Daniel Choi
Maintained by dhchoi@gmail.com

mustache-haskell

A Haskell implementation of mustache templates. Expects input data to be JSON.

Should be compatible with the the mustache specification. Except lambdas are not supported.

Supported syntax:

  • basic variables
  • sections
  • inverted sections
  • comments (are suppressed)
  • partials
  • set delimiter

This project currently only provides a command line interface. Later versions will provide a library API for templating ToJSON instances.

Install

You need the Haskell platform on your system.

cabal install mustache-haskell

Or alternatively

git clone git@github.com:danchoi/mustache-haskell.git
cd mustache-haskell
cabal sandbox init
cabal install
# Now copy .cabal-sandbox/bin/mus to your PATH

Usage

mus template.mustache < input.json
mus 

Usage: mus [-c] [-d TEMPLATE_DIRECTORY] TEMPLATE_FILE
  A Haskell implementation of Mustache templates. On STDIN provide the JSON to
  insert into the template.

Available options:
  -h,--help                Show this help text
  -c                       Just output parse tree of template file
  -d TEMPLATE_DIRECTORY    Template directory

List separator syntax

mustache-haskell adds one additional feature to the mustache specification. If you are outputing elements of a list, you can designate an optional list separator with the following syntax:

{{#hobbies, }}{{name}}{{/hobbies}}

This designates ", " as the list separator and will output

sewing, brewing, cooking

when the input is

{"hobbies":[{"name":"sewing"},{"name":"brewing"},{"name":"cooking"}]}

Performance

In a few informal tests,

mus template.mustache < input.json

is about 10x faster than the Ruby mustache gem command-line implementation,

mustache - template.mustache < input.json
  • whiskers Mustache templates with Template Haskell (reddit)
  • hastache Haskell implementation of Mustache templates
  • mustache2hs takes in Haskell records (single data constructor only) and a list of mustache template and record name pairs, and generates Haskell code for functions that take an escape function and one of the records
  • mustache.go an implementation of the mustache template language in Go
comments powered byDisqus