Ejemplo de MongoDB para Yesod / Persistente
Haskell y Yesod novato aquí. He intentado seguir el ejemplo de Integración con Yesod del capítulo Persistente en el libro de Yesod (http://www.yesodweb.com/book/persistent). El Sqlite compila y funciona bien, parece. Sin embargo, estoy tratando de usar MongDB y estoy teniendo dificultades para que las cosas funcionen. Específicamente:
En el ejemplo para sqlite:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
El libro de Yesod dice "El código de Mongo usarámongoSettings
en su lugar. "Pero no puedo encontrarlo en ninguno de los módulos, y el código no se compila. Por lo tanto, tuve que usar esto en lugar demongoSettings
:
MkPersistSettings { mpsBackend = ConT ''Action }
Tuve que importar Language.Haskell.TH.Syntax para compilarlo, lo que supongo que debería estar oculto para el usuario, así que ciertamente no lo estoy haciendo bien.
Además, encontré que en las pruebas persistentes para Mongo prescindir de las partes "compartir" y "migrar". Realmente no estoy seguro de por qué, supongo que es porque MongoDB no tiene esquema y no necesita migración.
SqlPersist
penséMongoPersist
sería la contraparte de SqlPersist, y supongo que casi lo es, encontré una instancia deMongoPersist
en el init.hs en el directorio de prueba de persistente. Pero está comentado, así que tengo la sensación de que es obsoleto? De lo contrario, no está definido de todos modos por lo que puedo decir. Así que no sé cómo convertir la siguiente línea (P.115 del libro de Yesod, o cerca del final dehttp://www.yesodweb.com/book/persistent) para trabajar para MongoDB:
instance YesodPersist PersistTest where
type YesodPersistBackend PersistTest = SqlPersist
runDB action = do
PersistTest pool <- getYesod
runSqlPool action pool
Utilizando withMongoDBConn
Entonces, para sqlite, el código es (primer ejemplo de la página web anterior):
main :: IO ()
main = withSqliteConn ":memory:" $ runSqlConn $ do
runMigration migrateAll
johnId <- insert $ Person "John Doe" $ Just 35
... and so on
Pero
main :: IO()
main = withMongoDBConn ":memory:" $ runMongoDBConn $ do
runMigration migrateAll
johnId <- insert $ Person "John Doe" $ Just 35
... and so on
no funciona Antes que nada,runMigration
por alguna razón no está en el alcance Bueno, tal vez no necesito la migración para MongoDB, así que elimino esa línea. Entonces, el compilador se queja:Couldn't match expected type
AccessMode 'con el tipo realm0 b0' Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0
y así. Y en esta etapa, mi conocimiento superficial de las mónadas no es suficiente para resolver esto.
En general, me está costando mucho convertir el ejemplo de Integración con Yesod del libro de Sqlite a MongoDB. ¿Podría alguien proporcionarme un ejemplo concreto de Yesod / Persistente con MongoDB? Muchas gracias de antemano.