我正在使用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
,它会很有效,但是否则它不会编译,因为它无法找到hamletFile
或luciusFile
。我使用的是Yesod版本1.4,我认为这些方法是使用核心Yesod软件包导入的。他们不是吗?
答案 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