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

标签 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(哈姆雷特)。

因此,每个模板一个。

最佳答案

看来hamletFile和其他人将模板视为独立的,而您的模板则相互引用。您可以按 *File 的顺序玩电话,或使用widgetFile*来自 Yesod.Default.Util模块:

$(widgetFileNoReload def "chat")
Reload变体对开发很有用 - 它会使 yesod devel监视文件更改并重新加载它们。

关于templates - 如何在 Yesod 中导入莎士比亚模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35831703/

相关文章:

c++ - 根据运行时参数创建专用类的实例

c++ - 模板方法运行,但 Visual Studio 2015 显示错误

string - 如何在haskell中组合两种不同类型的列表

haskell - Haskell 中的多个源文件

list - 如何在 Haskell 中提取所有唯一的列表对?

haskell - Haskell 列表的点积

c++ - 模板继承内部类访问问题

c++ - 在 ‘typename’ 之前需要 ‘std::result_of<_Signature>::type’ 因为 ‘std::result_of<_Signature>’ 是一个依赖范围

haskell - Nix 上的 XMonad - 找不到 xmonad-contrib

haskell - 解决多参数类型类的模棱两可的实例