2013-10-10 27 views
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 } 
|] 

但隨後的編譯器不喜歡它,因爲(我認爲)數字文字是多態。 通常的解決方法是在某處放置類型簽名。但是哪裏?

+0

我不是專家,我不知道確切的答案。儘管如此,如果你可以在'<-'後面加上唯一的變量名稱,它並不會讓我感到驚訝。 –

+0

我從來沒有使用過莎士比亞的DSL,但我認爲這個問題依賴於解析:不是'#{x}',而是嘗試所有Yesod的例子 - #{x},即修剪空格。 – Guiraldelli

+0

也沒有爲我工作。始終在處理程序中使用具有插值變量的'forall'。 – lambdas

回答