Я прошел через книгу Yesod и источник и многому научился, как все работает. Но прежде чем я напишу свой собственный материал, на строительном сайте есть одна вещь, которую я просто не понимаю.
Итак, я нахожу сайт "copywww", а в файле CopyWWWState.hs есть код:
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
]
Линии, которые я не понимаю, таковы:
type AuthId CopyWWWState = UserId
type YesodDB CopyWWWState = SqlPersist
Когда я удаляю их, я получаю ошибки, но я не уверен, почему они требуются в первую очередь. Когда я ищу источник для "UserId" или "SqlPersist", я придумываю ничего, что кажется многообещающим. Для чего именно этот код нужен? Какая польза от использования типов типов в этих классах?