2
我寫了一個Yesod認證插件,用於發送邀請碼,然後需要註冊。我想在插件中包含的一件事是一個包含創建邀請的表單的小部件;該表單將發佈到auth插件中的路由。我遇到的麻煩是爲小部件確定一個類型簽名,它允許創建適當的URL,也可以在主站點的處理程序中使用。該類型應該適用於可在主站點中使用的子站點小部件?
剝離下來的要領,微件看起來像:
invitationWidget :: GWidget Auth m()
invitationWidget = do
tm <- lift getRouteToMaster
[whamlet|<form [email protected]{tm inviteR}>|]
inviteR :: AuthRoute
inviteR = PluginR "invite" ["invite"]
麻煩的是,指定Auth
亞位點的小窗口意味着我不能直接將其嵌入到GHandler master master a
類型的處理設備(在確切的錯誤是Couldn't match type `App' with `Yesod.Auth.Auth'
)。但是,如果未指定子網站,例如invitationWidget :: GWidget s m()
,那麼我看不到一個方法來得到inviteR
(錯誤是Could not deduce (MonadLift (GHandler Auth m) (GWidget s m))
)。