【问题标题】:Yesod: Weird error working with LuciusYesod:与 Lucius 合作的奇怪错误
【发布时间】:2012-07-14 20:08:22
【问题描述】:

您好,我是 yesod 的新手,我正在尝试关注这个 Tutorial,但是当我尝试开发应用程序时,它给了我这个错误:

正在构建 ministeam-0.0.0...

处理程序/AuthTut.hs:81:0: 错误:无效的预处理指令#message

cabal-dev:用户错误(警告:无法确定版本 /home/nock/.cabal/bin/fake-ghc-cabal-dev :“== GHC 参数:开始 ==\n--numeric-version\n== GHC Arguments: End ==\n" /usr/bin/ar: dist/build/Handler/AuthTut.o: No such file or directory ) yesod: readProcess: cabal-dev "buildopts" (exit 1): failed

这部分代码似乎不正确(见下文)。实际上我不明白他是如何在这部分代码中使用“toWidget”函数的。我以为缺少 Lucius 模块的导入,我将其添加到教程的导入列表中,但错误仍然存​​在。

defaultLayout inside = do
    mmsg <- getMessage
    pc <- widgetToPageContent $ do
                toWidget [lucius|
body {
    width: 760px;
    margin: 1em auto;
    font-family: sans-serif;
}
#message{
    color: #900;
}
|]      

            inside

hamletToRepHtml [hamlet|
$doctype 5
<html>
    <head>
        <title>#{pageTitle pc}
        ^{pageHead pc}
    <body>
        $maybe msg <- mmsg
            <div #message>#{msg}
        ^{pageBody pc}
|]

提前感谢您的关注!

【问题讨论】:

    标签: haskell yesod haskell-platform


    【解决方案1】:

    我猜您启用了 CPP(C 预处理器)语言扩展。在这种情况下,您的 Haskell 文件中以散列开头的任何行都将被解释为 CPP 指令。由于#message 是无效指令,因此您会收到一条错误消息。

    我建议切换到外部 Lucius 模板并使用 widgetFile。这将具有额外的优势,即能够在开发过程中自动重新生成 CSS。

    【讨论】:

    • 感谢您的回答,但我发现我的问题是您的菜鸟问题的识别错误!还是谢谢!
    • 有什么方法可以在某些文件中禁用 CPP 语言扩展?
    • 我觉得你可以做{-# LANGUAGE NoCPP #-},但我没试过。
    【解决方案2】:

    我发现当我从教程中复制一些代码时,我忘记了缩进一些行!还是谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      相关资源
      最近更新 更多