2
手冊http://www.yesodweb.com/book/shakespearean-templates只是說「循環列表 - 我們有你覆蓋」。我不明白該聲明中「list」的確切語義。
這不是「[something]
類型的任意哈斯克爾表達」:我不會寫
main = putStrLn $ renderHtml [shamlet|
<ul>
$forall x <- reverse [ False, True ]
<li>#{x}
|]
現在看來,這必須是文字列表(在方括號,用逗號分隔的元素),但究竟什麼是有效的列表元素?
它可以是數字文字 - 至少以下使它通過拼接
main = putStrLn $ renderHtml [shamlet|
<ul>
$forall x <- [ 0, 1 ]
<li>#{ x }
|]
但隨後的編譯器不喜歡它,因爲(我認爲)數字文字是多態。 通常的解決方法是在某處放置類型簽名。但是哪裏?
我不是專家,我不知道確切的答案。儘管如此,如果你可以在'<-'後面加上唯一的變量名稱,它並不會讓我感到驚訝。 –
我從來沒有使用過莎士比亞的DSL,但我認爲這個問題依賴於解析:不是'#{x}',而是嘗試所有Yesod的例子 - #{x},即修剪空格。 – Guiraldelli
也沒有爲我工作。始終在處理程序中使用具有插值變量的'forall'。 – lambdas