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 typeAccessMode '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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta