Text.Hastache.Context
Description
Hastache context helpers
- mkStrContext :: Monad m => (String -> MuType m) -> MuContext m
- mkGenericContext :: (Monad m, Data a, Typeable1 m) => a -> MuContext m
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