Donのblaze-htmlの提案は、それを行う1つの方法ですが、そのようにすると、ビュー(この場合はHTML)をユーザーに埋め込むことで、一般的に使用されるMVCデザインパターンに違反する傾向が強くなることがわかります。 Haskellコード。場合によっては、すばやく汚いことをしようとしているだけなら、これがやるべきことかもしれません。しかし、ビューをコントローラーから分離し、デザイナーがHaskellに慣れていないデザイナーがそれを操作できるように、これをより大きなアプリケーションに適合させたい場合は、Heistテンプレートシステムを使用する方がよいでしょう。
ここにHeistチュートリアルがあります。私は最近、この種のことについての一連のブログ投稿も書きました。特にシリーズの2番目の投稿は、おそらくあなたの質問に最も関連性があります。これがあなたが望むようなことをするいくつかのコードです:
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>
これの良いところは、Webデザイナーが名前の表示方法を完全に制御できることです。順序付けされていないリストを「lastname、firstname」の形式で表示するように表示を変更する必要がある場合は、アプリケーションを再コンパイルしなくても、ここで非常に簡単に実行できます。