2011-09-16 9 views
5

Tengo un problema extraño con la aldea. Estoy tratando de usar $ forall para iterar a través de una lista, pero sigo obteniendo un error "No en el alcance". Estoy ejecutando yesod 0.9.2.2 en Win7.

Aparte de un diseño terrible, ¿alguien tiene alguna idea de dónde me estoy equivocando? Eliminar la interpolación variable de "db" permite ejecutar bien.

La aldea relevante:

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

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

El código del controlador relevante:

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

estoy recibiendo este error cuando se ejecuta 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 

Respuesta

8

Su nivel de sangría en el la plantilla es incorrecta:

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

En su versión, la fila está fuera del alcance de $ forall.

+0

Eres amable señor, muy amable. – Caleb

Cuestiones relacionadas