MongoDB-Beispiel für Yesod / Persistent

Haskell und Yesod Neuling hier. Ich habe versucht, das Beispiel für die Integration mit Yesod aus dem Kapitel Persistent im Yesod-Buch (http://www.yesodweb.com/book/persistent) zu verfolgen. Das Sqlite kompiliert und läuft anscheinend einwandfrei. Ich versuche jedoch, MongDB zu verwenden, und es fällt mir schwer, die Dinge zum Laufen zu bringen. Speziell:

Im Beispiel für SQLite:

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

Das Yesod-Buch sagt: "Mongo-Code wird verwendetmongoSettings Stattdessen. "Aber ich kann es in keinem der Module finden und der Code wird nicht kompiliert. Also musste ich stattdessen dieses verwendenmongoSettings:

MkPersistSettings { mpsBackend = ConT ''Action }

Ich musste Language.Haskell.TH.Syntax importieren, um es zum Kompilieren zu bringen. Ich gehe davon aus, dass es vor dem Benutzer verborgen sein sollte, damit ich es nicht richtig mache.

Außerdem habe ich festgestellt, dass in den Persistent-Tests für Mongo auf den Teil "Teilen" und "Migrieren" verzichtet wird. Ich bin mir eigentlich nicht sicher, warum, ich vermute, es liegt daran, dass MongoDB Schema-frei ist und keine Migration benötigt?

SqlPersist

ich dachteMongoPersist wäre das Gegenstück zu SqlPersist, und ich denke, es ist fast so - ich habe eine Instanz von gefundenMongoPersist in der init.hs im Testverzeichnis von Persistent. Aber es ist auskommentiert, also habe ich das Gefühl, es ist veraltet? Ansonsten ist es sowieso nicht definiert, soweit ich das beurteilen kann. Ich weiß also nicht, wie ich die folgende Zeile konvertieren soll (S.115 des Yesod - Buches oder kurz vor dem Ende vonhttp://www.yesodweb.com/book/persistent) für MongoDB arbeiten:

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

Verwenden mit MongoDBConn

Für sqlite lautet der Code also (1. Beispiel von der obigen Webseite):

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

Aber

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

funktioniert nicht Erst einmal,runMigration Aus irgendeinem Grund ist nicht im Umfang. Okay, vielleicht brauche ich keine Migration für MongoDB, also entferne ich diese Zeile. Dann beschwert sich der Compiler:Couldn't match expected typeAccessMode 'mit aktuellem Typm0 b0' Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0 und so weiter. Und zu diesem Zeitpunkt reicht mein sehr flüchtiges Wissen über Monaden einfach nicht aus, um dies herauszufinden.

Alles in allem fällt es mir sehr schwer, das Beispiel Integration mit Yesod aus dem Buch von Sqlite nach MongoDB zu konvertieren. Könnte mir bitte jemand ein konkretes Beispiel für Yesod / Persistent mit MongoDB geben? Vielen Dank im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage