13 Stimmen

Ich verstehe nicht, wozu diese Art von Familienkram in Yesod gut sein soll.

Ich habe das Yesod-Buch und die Quelle durchgesehen und so ziemlich alles gelernt, wie es funktioniert. Aber bevor ich meine eigenen Sachen schreibe, gibt es eine Sache auf der gerüsteten Website, die ich einfach nicht verstehe.

Also rüste ich eine Seite "copywww" und in der Datei CopyWWWWState.hs befindet sich der Code:

instance YesodPersist CopyWWWState where
    type YesodDB CopyWWWState = SqlPersist
    runDB db = liftIOHandler
             $ fmap connPool getYesod >>= Settings.runConnectionPool db

instance YesodAuth CopyWWWState where
    type AuthId CopyWWWState = UserId

    -- Where to send a user after successful login
    loginDest _ = RootR
    -- Where to send a user after logout
    logoutDest _ = RootR

    getAuthId creds = runDB $ do
        x <- getBy $ UniqueUser $ credsIdent creds
        case x of
            Just (uid, _) -> return $ Just uid
            Nothing -> do
                fmap Just $ insert $ User (credsIdent creds) Nothing

    authPlugins = [ authOpenId
                  , authEmail
                  ]

Die Zeilen, die ich nicht verstehe, sind die, die ich nicht verstehe:

type AuthId CopyWWWState = UserId
type YesodDB CopyWWWState = SqlPersist

Wenn ich sie entferne, bekomme ich natürlich Fehler, aber ich bin mir nicht sicher, warum sie überhaupt erforderlich sind. Wenn ich im Quellcode nach "UserId" oder "SqlPersist" suche, finde ich nichts, was vielversprechend erscheint. Wozu genau braucht man diesen Code? Welchen Nutzen zieht yesod aus der Verwendung von Typfamilien in diesen Klassen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X