Предложение Дона Blaze-HTML является одним из способов сделать это, но я обнаружил, что когда я делаю это таким образом, у меня больше склонности нарушать обычно используемый шаблон проектирования MVC путем встраивания представления (в данном случае HTML ) в ваш код на Haskell. В некоторых случаях, если вы просто пытаетесь сделать что-то быстрое и грязное, это может быть то, что нужно сделать. Но если вы хотите, чтобы это вписывалось в более крупное приложение таким образом, чтобы отделить представление от контроллера и позволить проектировщикам работать с ним, незнакомым с Haskell, то вам лучше использовать систему шаблонов Heist.
У нас есть учебник Heist здесь . Я также недавно написал серию сообщений в блоге о подобных вещах. В частности, второй пост в серии , вероятно, наиболее актуален для вашего вопроса. Вот код, который делает что-то вроде того, что вы хотите:
names :: [(Text,Text)]
names = [("Alice", "Anderson"), ("Bob", "Brown")]
nameSplice :: (Text, Text) -> Splice Application
nameSplice name =
runChildrenWithText [("firstName", fst name), ("lastName", snd name)]
namesSplice :: Splice Application
namesSplice = mapSplices nameSplice names
После того, как вы свяжете объединение имен где-то в вашем приложении с bindSplice "names" namesSplice
, вы можете получить эти данные из шаблона, подобного этому:
<table>
<names>
<tr><td><firstName/></td><td><lastName/></td></tr>
</names>
</table>
Приятно то, что веб-дизайнер полностью контролирует отображение имен. Если бы им нужно было изменить отображение на неупорядоченный список в формате «фамилия, имя», это было бы очень легко сделать здесь без необходимости перекомпилировать ваше приложение.