hamletFile,luciusFile,juliusFile变量不在范围内

时间:2017-10-20 20:41:04

标签: haskell yesod haskell-stack template-haskell

我正在使用Yesod构建一个简单的应用程序,而我很难引入外部文件。这是我的代码:

{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE QuasiQuotes           #-}
{-# LANGUAGE TemplateHaskell       #-}
{-# LANGUAGE TypeFamilies          #-}
import           Yesod

data GomokuServer = GomokuServer

mkYesod "GomokuServer" [parseRoutes|
/ HomeR GET
|]

instance Yesod GomokuServer

getHomeR :: Handler Html
getHomeR = defaultLayout $ do 
        $(hamletFile "./src/templates/home.hamlet")
        $(luciusFile "./src/templates/home.lucius")

main :: IO ()
main = warp 3000 GomokuServer

当我使用quasiquotes时,或者如果我将hamletFile替换为whamletFile,它会很有效,但是否则它不会编译,因为它无法找到hamletFileluciusFile。我使用的是Yesod版本1.4,我认为这些方法是使用核心Yesod软件包导入的。他们不是吗?

1 个答案:

答案 0 :(得分:2)

为什么不使用whamletFile?大多数时候你想要一个小部件。

似乎hamletFile未重新导出。

λ import Yesod
λ :t hamletFile

<interactive>:1:1: error:
    • Variable not in scope: hamletFile
    • Perhaps you meant ‘whamletFile’ (imported from Yesod)

如果你确实需要它,可以从Text.Hamlet开始。

FWIW Yesod scaffolding定义了一个函数

widgetFile :: String -> Q Exp
widgetFile = (if appReloadTemplates compileTimeAppSettings
                then widgetFileReload
                else widgetFileNoReload)
              widgetFileSettings

然后我就像$(Settings.widgetFile "homepage")一样使用它,默认情况下会为#34;主页&#34;带来hamlet,lucius和cassius文件。您可以在Overriding-widgetFile on the Yesod wiki

查看更多信息