| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Text.Hastache.Context
Description
Hastache context helpers
- mkStrContext :: Monad m => (String -> MuType m) -> MuContext m
- mkStrContextM :: Monad m => (String -> m (MuType m)) -> MuContext m
- mkGenericContext :: (Monad m, Data a, Typeable m) => a -> MuContext m
Documentation
mkStrContext :: Monad m => (String -> MuType m) -> MuContext m Source
Make Hastache context from String -> MuType function
mkStrContextM :: Monad m => (String -> m (MuType m)) -> MuContext m Source
Make Hastache context from monadic String -> MuType function
mkGenericContext :: (Monad m, Data a, Typeable m) => a -> MuContext m Source
Make Hastache context from Data.Data deriving type
Supported field types:
- String
- Char
- Double
- Float
- Int
- Int8
- Int16
- Int32
- Int64
- Integer
- Word
- Word8
- Word16
- Word32
- Word64
- Data.ByteString.ByteString
- Data.ByteString.Lazy.ByteString
- Data.Text.Text
- Data.Text.Lazy.Text
- Bool
- Data.Text.Text -> Data.Text.Text
- Data.Text.Text -> Data.Text.Lazy.Text
- Data.Text.Lazy.Text -> Data.Text.Lazy.Text
- Data.ByteString.ByteString -> Data.ByteString.ByteString
- String -> String
- Data.ByteString.ByteString -> Data.ByteString.Lazy.ByteString
- MonadIO m => Data.Text.Text -> m Data.Text.Text
- MonadIO m => Data.Text.Text -> m Data.Text.Lazy.Text
- MonadIO m => Data.Text.Lazy.Text -> m Data.Text.Lazy.Text
- MonadIO m => Data.ByteString.ByteString -> m Data.ByteString.ByteString
- MonadIO m => String -> m String
- MonadIO m => Data.ByteString.ByteString -> m Data.ByteString.Lazy.ByteString
Example:
import Text.Hastache
import Text.Hastache.Context
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.IO as TL
import Data.Data
import Data.Generics
import Data.Char
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,
textFunc :: T.Text -> T.Text,
monadicStringFunc :: String -> IO String,
monadicTextFunc :: T.Text -> IO T.Text
} 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}}",
"{{#textFunc}}reverse{{/textFunc}}",
"{{#monadicStringFunc}}upper (monadic){{/monadicStringFunc}}",
"{{#monadicTextFunc}}reverse (monadic){{/monadicTextFunc}}"]
context = Example { stringField = "string value", intField = 1,
dataField = InternalData "val" 123, simpleListField = ["a","b","c"],
dataListField = [InternalData "aaa" 1, InternalData "bbb" 2],
stringFunc = map toUpper,
textFunc = T.reverse,
monadicStringFunc = return . map toUpper,
monadicTextFunc = return . T.reverse }
main = example >>= TL.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
Hastache also supports datatypes with multiple constructors:
data A = A { str :: String }
| B { num :: Int }
{{#A}}
A : {{str}}
{{/A}}
{{#B}}
B : {{num}}
{{/B}}