Exemplo do MongoDB para Yesod / Persistent

Haskell e Yesod novato aqui. Eu tenho tentado seguir o exemplo da Integração com Yesod do capítulo Persistente no livro Yesod (http://www.yesodweb.com/book/persistent). O Sqlite compila e corre bem, parece. No entanto, estou tentando usar o MongDB e estou tendo dificuldades em fazer as coisas funcionarem. Especificamente:

No exemplo para o sqlite:

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|

O livro Yesod diz que "o código Mongo usarámongoSettings em vez disso. "Mas eu não consigo encontrá-lo em nenhum dos módulos, e o código não compila. Então, em vez disso, eu tive que usar isso em vez demongoSettings:

MkPersistSettings { mpsBackend = ConT ''Action }

Eu tive que importar Language.Haskell.TH.Syntax para obtê-lo para compilar, o que eu estou supondo que deve ser escondido do usuário, então eu certamente não estou fazendo certo.

Além disso, descobri que nos testes persistentes para o Mongo não há a parte "share" e "migrate". Na verdade, não sei por que, acredito que seja porque o MongoDB é sem esquema e não precisa de migração?

SqlPersist

eu penseiMongoPersist seria a contrapartida do SqlPersist, e eu acho que é quase - eu encontrei uma instância deMongoPersist no init.hs no diretório de teste do Persistent. Mas é comentado, então tenho a sensação de que é obsoleto? Caso contrário, não é definido de qualquer forma, tanto quanto eu posso dizer. Então eu não sei como converter a seguinte linha (P.115 do livro Yesod, ou perto do final dohttp://www.yesodweb.com/book/persistent) para trabalhar no MongoDB:

instance YesodPersist PersistTest where
    type YesodPersistBackend PersistTest = SqlPersist
    runDB action = do
        PersistTest pool <- getYesod
        runSqlPool action pool

Usando withMongoDBConn

Então, para sqlite, o código é (primeiro exemplo da página da web acima):

main :: IO ()
main = withSqliteConn ":memory:" $ runSqlConn $ do
    runMigration migrateAll
    johnId <- insert $ Person "John Doe" $ Just 35
    ... and so on

Mas

main :: IO()
main = withMongoDBConn ":memory:" $ runMongoDBConn $ do
    runMigration migrateAll 
    johnId <- insert $ Person "John Doe" $ Just 35
    ... and so on          

não funciona. Primeiramente,runMigration por algum motivo não está no escopo. Ok, talvez eu não precise de migração para o MongoDB, então eu removo essa linha. Então, o compilador reclama:Couldn't match expected typeAccessMode 'com tipo realm0 b0' Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0 e assim por diante. E nesse estágio, meu conhecimento superficial de mônadas não é suficiente para descobrir isso.

Apesar de tudo, estou tendo um momento muito difícil para converter o exemplo Integração com Yesod do livro Sqlite para MongoDB. Alguém poderia me fornecer um exemplo concreto de Yesod / Persistent com o MongoDB? Muito obrigado antecipadamente.

questionAnswers(2)

yourAnswerToTheQuestion