【发布时间】:2012-10-25 12:34:31
【问题描述】:
我编写了一个 Yesod 身份验证插件,它可以邮寄邀请码,然后需要注册。我想在插件中包含的一件事是一个包含用于创建邀请的表单的小部件;该表单将发布到 auth 插件中的路由。我遇到的麻烦是找出允许创建适当 URL 并且也可以在主站点的处理程序中使用的小部件的类型签名。
精简到基本要素,小部件看起来像:
invitationWidget :: GWidget Auth m ()
invitationWidget = do
tm <- lift getRouteToMaster
[whamlet|<form action=@{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)))。
【问题讨论】: