hastache-0.2.0: Haskell implementation of Mustache templates

Text.Hastache.Context

Description

Hastache context helpers

Synopsis

Documentation

mkStrContext :: Monad m => (String -> MuType m) -> MuContext mSource

Make Hastache context from String -> MuType function

mkGenericContext :: (Monad m, Data a, Typeable1 m) => a -> MuContext mSource

Make Hastache context from Data.Data deriving type

data InternalData = InternalData {
    someField       :: String,
    anotherField    :: Int
    } deriving (Data, Typeable, Show)

data Example = Example {
    stringField             :: String,
    intField                :: Int,
    dataField               :: InternalData,
    simpleListField         :: [String],
    dataListField           :: [InternalData],
    stringFunc              :: String -> String,
    byteStringFunc          :: Data.ByteString.ByteString -> Data.ByteString.ByteString,
    monadicStringFunc       :: String -> IO String,
    monadicByteStringFunc   :: Data.ByteString.ByteString -> IO Data.ByteString.ByteString
    } deriving (Data, Typeable)

example = hastacheStr defaultConfig (encodeStr template) 
    (mkGenericContext context)
    where
    template = concat $ map (++ "\n") [
        "string: {{stringField}}",
        "int: {{intField}}",
        "data: {{dataField.someField}}, {{dataField.anotherField}}",
        "data: {{#dataField}}{{someField}}, {{anotherField}}{{/dataField}}",
        "simple list: {{#simpleListField}}{{.}} {{/simpleListField}}",
        "data list:",
        "{{#dataListField}}",
        " * {{someField}}, {{anotherField}}. top level var: {{intField}}",
        "{{/dataListField}}",
        "{{#stringFunc}}upper{{/stringFunc}}",
        "{{#byteStringFunc}}reverse{{/byteStringFunc}}",
        "{{#monadicStringFunc}}upper (monadic){{/monadicStringFunc}}",
        "{{#monadicByteStringFunc}}reverse (monadic){{/monadicByteStringFunc}}"]
    context = Example { stringField = "string value", intField = 1, 
        dataField = InternalData "val" 123, simpleListField = ["a","b","c"],
        dataListField = [InternalData "aaa" 1, InternalData "bbb" 2],
        stringFunc = map Data.Char.toUpper,
        byteStringFunc = Data.ByteString.reverse,
        monadicStringFunc = return . map Data.Char.toUpper,
        monadicByteStringFunc = return . Data.ByteString.reverse }

main = example >>= Data.ByteString.Lazy.putStrLn

Result:

string: string value 
int: 1 
data: val, 123 
data: val, 123 
simple list: a b c  
data list: 
 * aaa, 1. top level var: 1 
 * bbb, 2. top level var: 1 
UPPER 
esrever 
UPPER (MONADIC)
)cidanom( esrever