Вопрос

I'm having a strange issue with hamlet. I'm trying to use $forall to iterate through a list, but I keep getting a "Not in scope" error. I'm running yesod 0.9.2.2 on Win7.

Terrible design aside, anyone have any idea where I'm going wrong? Removing the variable interpolation of "db" lets in execute fine.

The relevant hamlet:

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

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

The relevant handler code:

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")

I'm getting this error when running 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
Это было полезно?

Решение

Your indentation level in the template is wrong:

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

In your version the row is outside of $forall's scope.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top