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

hamletFile, luciusFile, juliusFile variables not in scope

我正在使用 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

当我使用准引号,或者如果我用 whamletFile 替换 hamletFile 时,它工作得很好,但否则它不会编译,因为它找不到 hamletFileluciusFile。我使用的是 Yesod 1.4 版,我认为这些方法是与核心 Yesod 包一起导入的。不是吗?

为什么不直接使用 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"),它默认为 "homepage" 引入 hamlet、lucius 和 cassius 文件。您可以在 Overriding-widgetFile on the Yesod wiki

查看更多信息