我在Yesod中使用QuasiQuotations,一切正常.但我的文件变得非常大,不好看.此外,我的TextEditor没有正确突出显示此语法.这就是为什么拆分我的文件是这样的:
getHomeR :: Handler Html
getHomeR = do
webSockets chatApp
defaultLayout $do
$(luciusFile "templates/chat.lucius")
$(juliusFile "templates/chat.julius")
$(hamletFile "templates/chat.hamlet")
如果这是错的,请告诉我.执行runghc myFile.hs会抛出许多错误,如下所示:
chat_new.hs:115:9:
Couldn't match expected type ‘t0 -> Css’
with actual type ‘WidgetT App IO a0’
The lambda expression ‘\ _render_ajFK
-> (shakespeare-2.0.7:Text.Css.CssNoWhitespace . (foldr ($) ...))
...’
has one argument,
but its type ‘WidgetT App IO a0’ has none
In a stmt of a 'do' block:
\ _render_ajFK
...
还有这个.
chat_new.hs:116:9:
Couldn't match type ‘(url0 -> [(Text, Text)] -> Text)
-> Javascript’
with ‘WidgetT App IO a1’
Expected type: WidgetT App IO a1
Actual type: JavascriptUrl url0
Probable cause: ‘asJavascriptUrl’ is applied to too few arguments
...
还有一个用于HTML(哈姆雷特).
因此,每个模板一个.
最佳答案 似乎hamletFile和其他人将模板看作是独立的,而你的模板则是彼此引用的东西.您可以使用* File调用的顺序,或使用Yesod.Default.Util模块中的widgetFile *:
$(widgetFileNoReload def "chat")
Reload变体对于开发非常有用 – 它可以让yesod devel来监视文件更改并重新加载它们.