Przykład MongoDB dla Yesod / Persistent

Nowicjusz Haskell i Yesod tutaj. Próbowałem śledzić integrację z przykładem Yesoda z rozdziału Trwałe w książce Yesod (http://www.yesodweb.com/book/persistent). Sqlite się kompiluje i działa dobrze. Jednak staram się korzystać z MongDB i mam trudności z uruchomieniem rzeczy. Konkretnie:

W przykładzie dla sqlite:

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

Książka Yesod mówi: „Kod Mongo będzie używanymongoSettings zamiast tego. „Ale nie mogę go znaleźć w żadnym z modułów, a kod się nie kompiluje. Zamiast tego musiałem go użyć zamiastmongoSettings:

MkPersistSettings { mpsBackend = ConT ''Action }

Musiałem zaimportować Language.Haskell.TH.Syntax, aby go skompilować, co, jak przypuszczam, powinno być ukryte przed użytkownikiem, więc z pewnością nie robię tego dobrze.

Odkryłem również, że w testach trwałych dla Mongo nie ma części „share” i „migrate”. Właściwie nie jestem pewien, dlaczego tak się dzieje, ponieważ MongoDB jest bez schematu i nie potrzebuje migracji?

SqlPersist

myślałemMongoPersist byłby odpowiednikiem SqlPersist i myślę, że prawie tak - znalazłem jedno wystąpienieMongoPersist w init.hs w katalogu testowym Persistent. Ale to jest skomentowane, więc mam wrażenie, że jest przestarzałe? W przeciwnym razie tak czy inaczej nie jest to zdefiniowane. Więc nie wiem, jak przekonwertować następującą linię (str.115 książki Yesod lub pod koniechttp://www.yesodweb.com/book/persistent) pracować dla MongoDB:

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

Używanie withMongoDBConn

Tak więc dla sqlite kod jest (pierwszy przykład ze strony powyżej):

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

Ale

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

nie działa. Po pierwsze,runMigration z jakiegoś powodu nie ma zakresu. Dobra, może nie potrzebuję migracji dla MongoDB, więc usuwam tę linię. Następnie kompilator skarży się:Couldn't match expected typeAccessMode 'z aktualnym typemm0 b0' Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0 i tak dalej. I na tym etapie moja bardzo pobieżna znajomość monad nie wystarczy, żeby to zrozumieć.

Ogólnie rzecz biorąc, mam naprawdę trudny czas na konwersję przykładu Integracja z Yesod z książki Sqlite na MongoDB. Czy ktoś mógłby mi podać konkretny przykład Yesod / Persistent z MongoDB? Z góry dzięki.

questionAnswers(2)

yourAnswerToTheQuestion