Error de tipo persistente Yesod

Estoy probando persistente en una aplicación Yesod. Mi archivo de modelo contiene

Job
 issuer MemberId
 addDate UTCTime
 lastDate UTCTime
 title Text
 description Text
 deriving Show Read

Y mi controlador:

getProfileR :: Handler RepHtml
getProfileR = do
 jobs <- runDB $ selectList [] [Desc JobAddDate]
 defaultLayout $ do
  setTitle "title"
  $(widgetFile "profile")

En profile.hamlet recorro los objetos

$forall Job issuer addDate lastDate title description <- jobs
 <p>#{issuer}

Sin embargo, obtengo el siguiente error

Handler/Profile.hs:36:18:
    Couldn't match type `Entity' with `JobGeneric'
    In the return type of a call of `selectList'
    In the second argument of `($)', namely
      `selectList [] [Desc JobAddDate]'
    In a stmt of a 'do' block:
      jobs <- runDB $ selectList [] [Desc JobAddDate]

Handler/Profile.hs:36:18:
    Kind incompatibility when matching types:
      t0 :: (* -> *) -> * -> *
      JobGeneric Database.Persist.GenericSql.Raw.SqlPersist :: *
    In the return type of a call of `selectList'
    In the second argument of `($)', namely
      `selectList [] [Desc JobAddDate]'
    In a stmt of a 'do' block:
      jobs <- runDB $ selectList [] [Desc JobAddDate]
Build failure, pausing...

Donde la línea 36 es la línea runDB.

Siendo nuevo en Haskell, no puedo entender qué está mal. Estoy siguiendo el Libro de Yesod. Desafortunadamente, están evitando el sitio con andamios, por lo que no puedo imitar completamente su código.

preguntado el 01 de julio de 12 a las 21:07

Quizás esta pregunta y sus respuestas será de gran ayuda. -

1 Respuestas

selectList no vuelve [Job], es en realidad [Entity Job] que contiene tanto el Job y su Key*

Hay varias formas de refactorizar esto para manejarlo, una sería:

$forall Entity jobId job <- jobs
    <p>#{jobIssuer job}

En tu plantilla.

Alternativamente, puede utilizar map entityVal en cualquier punto para girar [Entity Job] -> [Job] si prefieres trabajar con eso.

*Los Entity y Key los tipos son en realidad un poco más complejos, pero creo que es más fácil pensar en ellos de esta manera. Lea los documentos si está interesado.

Respondido 02 Jul 12, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.