Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble with $forall in hamlet template

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
like image 956
Caleb Avatar asked Sep 16 '11 13:09

Caleb


1 Answers

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.

like image 156
ertes Avatar answered Sep 27 '22 23:09

ertes