yesod の本とソースを読んで、すべてがどのように機能するかを学びました。しかし、私が自分自身のものを書く前に、足場のサイトには理解できないことが 1 つあります。
だから私はサイト「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」を検索すると、有望と思われるものは何も見つかりません。このコードは正確には何のためにそこにある必要がありますか? これらのクラスで型ファミリを使用することで、yesod はどのような利点を得ますか?