ircでこれを手伝ってくれたmightybyteに感謝します。私が自分自身に答えるのを禁止された8時間後、これが同じ答えの私の変種です:
テンプレート qu1.tpl を読み取り、それをインスタンス化 (つまり、リストに質問の名前と番号を入力) し、それを返すスプライスを構築します。heist 関数の callTemplate がそれを助けます。(このスプライスは、以下の擬似コードでは splicex と呼ばれます。)
splicex を折りたたむ別の splice を作成して、単一の質問ではなく (インスタンス化された) 質問のリストを取得します。(疑似コード内の関数 splice.)
bindString の代わりに bindSplice を使用します。
疑似コード (テスト後に変更し、コンテキストから切り離したもの) -
... -> let
splice :: Monad m => Splice m
splice = foldM (\ ts (s, i) ->
liftM ((++) ts) $ splicex (quName, quNumber))
[]
(zip questionName [0..])
splicex :: Monad m => (String, Int) -> Splice m
splicex (quName, quNumber) =
do
mt <- callTemplate "qu1"
[ ("question-name", Data.Text.pack quName)
, ("question-number", Data.Text.pack $ show quNumber)
]
case mt of
Nothing -> error "splice rendering failed."
Just (t :: Template) -> return t
in
-- fill in the list of (instatiated) questions
heistLocal (bindSplice "qulist" splice) $
-- before that, instantiate the overall page
instantiatePage $
render "qu"
ところで、私の sourceforge アバターは弱すぎて新しいタグを作成できません。これに「heist」のタグを付けたい人はいますか?
リンク:
http://snapframework.com/
freenode IRC ネットワーク上の #snapframework チャネル。
http://snapframework.com/docs/tutorials/heist