【问题标题】:Trouble with $forall in hamlet templatehamlet 模板中 $forall 的问题
【发布时间】:2011-11-18 17:34:57
【问题描述】:

我对小村庄有一个奇怪的问题。我正在尝试使用 $forall 遍历列表,但我不断收到“不在范围内”错误。我在 Win7 上运行 yesod 0.9.2.2。

撇开糟糕的设计不谈,有人知道我哪里出错了吗?删除“db”的变量插值可以正常执行。

相关的小村庄:

 !!!
<h1> Database List
<hr>
<table>

  <tr>
       <td> Host
       <td> Status
  $forall db <- dbList
  <tr>
       <td> #{host db}

相关处理程序代码:

data Database = Database {dbType :: DBType,
                        host :: String,
                        user :: String,
                        password :: String
                       }


dbList = [Database Oracle "cpalmerws" "system" "***",
          Database Oracle "bdblnx" "system" "***",
          Database Postgres "localhost" "postgres" "***"]

getDBStatusR :: Handler RepHtml
getDBStatusR = do
  mu <- maybeAuth
  defaultLayout $ do
    setTitle "DB Status Page"
    addWidget $(widgetFile "dbstatus")

运行 yesod devel 时出现此错误:

Handler\DBStatus.hs:47:17:
    Not in scope: `db'
    In the result of the splice:
      $(widgetFile "dbstatus")
    To see what the splice expanded to, use -ddump-splices
    In the first argument of `addWidget', namely
      `$(widgetFile "dbstatus")'
    In the expression: addWidget ($(widgetFile "dbstatus"))
Starting development server...

dist\devel.hs:3:1:
    Failed to load interface for `Application':
      it is not a module in the current program, or in any known package.
Exit code: ExitFailure 1

【问题讨论】:

    标签: haskell yesod hamlet


    【解决方案1】:

    您在模板中的缩进级别错误:

    $forall db <- dbList
        <tr>
            <td>#{host db}
    

    在您的版本中,该行超出了 $forall 的范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 2016-04-20
      • 2014-05-10
      • 1970-01-01
      相关资源
      最近更新 更多