リダイレクトURLをマネージャー/Facebookモナドのこれらのレイヤーを介して戻すと、フィードすることができるように見えます。リダイレクトされたURLのタイプはです。これにはtypeclassTextのインスタンスがあり、関数を使用するために必要です(ドキュメントを参照)。RedirectUrlredirect
次のような方法でこの作業を行うことができるはずです。
getAccessTokenR :: Handler RepHtml
getAccessTokenR = do
url <- withManager $ \manager ->
FB.runFacebookT creds manager $
FB.getUserAccessTokenStep1 redirUrl []
redirect url
ここには本当の魔法はありません。基本的に2つの高レベルのパターンが進行中です。1つはリソースの使用状況(この場合はmanager)をローカライズする「with」パターンで、もう1つは「run」パターンです。モナド変換子の使用(詳細についてはまだあまり気にしないでください!)。
したがってwithManager、使用するマネージャーを提供します。おそらく、マネージャーのセットアップと削除を処理します。これはおそらく次のように入力されます
withManager :: (Manager -> Handler a) -> Handler a
その中にFacebookランナーがあり、次のように入力されます。
runFacebookT :: Credentials -> Manager -> FacebookT Auth Handler a -> Handler a
これは基本的に、クレデンシャル、マネージャー、およびFacebook固有の計算(リダイレクトURLの取得など)を与えると、それを選択したモナドに変換できることを意味します(ここでは、それが必要Handlerなため、選択しますwithManager)。あなたの場合、a型変数はTextリダイレクトURLのものです。
このパターンのペアを使用するwithと、その奥深くで提供されたURLがモナドrunにバブルアップするという結果が得られます。Handler次に、それを引っ掛けてredirect関数に渡します。