On dirait que si vous passez l'URL de redirection en arrière à travers les couches de gestionnaires/Facebook monade alors vous pouvez simplement le nourrir. Le type d'URL est redirigé Text
, qui a une instance de RedirectUrl
, nécessaires pour classe de types en utilisant la fonction redirect
(comme on le voit dans le documentation).
Vous devrait être en mesure de faire ce travail avec quelque chose comme:
getAccessTokenR :: Handler RepHtml
getAccessTokenR = do
url <- withManager $ \manager ->
FB.runFacebookT creds manager $
FB.getUserAccessTokenStep1 redirUrl []
redirect url
Il n'y a pas vraiment de la magie ici, vous avez deux modèles de haut niveau en cours, on est le « avec » motif, qui localisera une utilisation de l'ressource (dans ce cas, le manager
) et l'autre est le modèle « run », qui est vraiment l'utilisation des transformateurs Monad (ne vous inquiétez pas trop sur les détails de ce moment!).
Alors withManager
vous donne un gestionnaire à utiliser, on peut supposer qu'il prend soin d'une certaine configuration et retrait du gestionnaire. Ceci est probablement tapé quelque chose comme
withManager :: (Manager -> Handler a) -> Handler a
Dans ce que vous avez le coureur de facebook, qui sera typée comme:
runFacebookT :: Credentials -> Manager -> FacebookT Auth Handler a -> Handler a
qui dit essentiellement que si vous lui donnez des lettres de créance, le gestionnaire, et quelques-uns Facebook calcul spécifique (comme obtenir l'URL de redirection) il peut traduire dans votre Monade de choix (ici nous sélectionnons Handler
, parce que ce withManager
veut). Dans votre cas, la variable de type a
correspond au Text
de l'URL de redirection. En utilisant cette paire de modèles with
et run
, nous obtenons le résultat que l'URL qui a été fournie en profondeur là-bas, bulles dans notre Handler
monade. Ensuite, nous l'accrochons et le donnons à la fonction redirect
!
ne peut pas vous suffit de retourner l'URL au niveau externe ('Handler') puis utilisez' redirect' immédiatement à ce sujet? – ScottWest
@ScottWest Vous voulez en savoir un peu plus sur ce que vous voulez dire en le retournant au niveau externe? J'ai pensé à faire cela, mais je ne sais pas comment le faire avec les monades et autres – Squazic
Pas assez d'espace ici, je vais essayer de répondre ci-dessous (mais je ne peux pas vraiment le tester :)). – ScottWest