如何在Yesod中导入莎士比亚模板?

时间:2016-03-06 19:50:36

标签: templates haskell ghc yesod hamlet

我在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(哈姆雷特)。

因此,每个模板一个。

1 个答案:

答案 0 :(得分:2)

似乎hamletFile和其他人将模板视为自包含的,而您的模板则彼此引用某些内容。您可以使用*File来电订购,也可以使用widgetFile*模块中的Yesod.Default.Util

$(widgetFileNoReload def "chat")

Reload变体对于开发很有用 - 它会使yesod devel监视文件更改并重新加载它们。