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?