gpt4 book ai didi

facebook - haskell facebook 例子

转载 作者:行者123 更新时间:2023-12-02 02:13:45 29 4
gpt4 key购买 nike

我受困于 haskell 类型。

{-# LANGUAGE OverloadedStrings #-}

module Main (
main
) where

import qualified Facebook as FB
import Network.HTTP.Conduit (withManager)
import Control.Monad.IO.Class (liftIO)
import System.IO

app :: FB.Credentials
app = FB.Credentials "localhost" "249348058430770" "..."

url :: FB.RedirectUrl
url = "http://localhost/fb"

perms :: [FB.Permission]
perms = ["user_about_me", "email"]

main :: IO ()
main = do
fbAuthUrl <- FB.getUserAccessTokenStep1 url perms
liftIO $ print fbAuthUrl
argument <- readLn
token <- FB.getUserAccessTokenStep2 url [argument]
withManager $ \manager -> do
FB.runFacebookT app manager $ do
u <- FB.getUser "me" [] token
liftIO $ print (FB.userEmail u)

错误

src/Main.hs:23:18:
Couldn't match expected type `IO t0'
with actual type `FB.FacebookT
FB.Auth m0 text-0.11.2.0:Data.Text.Internal.Text'
In the return type of a call of `FB.getUserAccessTokenStep1'
In a stmt of a 'do' block:
fbAuthUrl <- FB.getUserAccessTokenStep1 url perms
In the expression:
do { fbAuthUrl <- FB.getUserAccessTokenStep1 url perms;
liftIO $ print fbAuthUrl;
argument <- readLn;
token <- FB.getUserAccessTokenStep2 url [argument];
.... }

http://hackage.haskell.org/package/fb

最佳答案

首先,让我通过免责声明作为这个答案的开头,我从未真正使用过 Facebook API 或 Conduits 库,所以我不确定这段代码是否真的做了任何明智的事情,但是通过仅使用类型信息,我认为这就是您想要做的

main :: IO ()
main = withManager $ \manager -> FB.runFacebookT app manager $ do
fbAuthUrl <- FB.getUserAccessTokenStep1 url perms
liftIO $ print fbAuthUrl
argument <- liftIO $ readLn
token <- FB.getUserAccessTokenStep2 url [argument]
u <- FB.getUser "me" [] (Just token)
liftIO $ print (FB.userEmail u)

主要的陷阱是 Haskell 中的 main 必须总是类型为 IO a,但是你试图使用类型的值FacebookT Auth m () 作为您的 main。您的实现在正确的轨道上,但 runFacebookTwithManager 需要成为函数中的第一件事。

在类型方面,实际的 do block 具有类型 FacebookT Auth (ResourceT IO) ()runFacebookT 函数用于解包 FacebookT 转换器,产生一个 ResourceT IO () 值,该值由 依次处理withManager 生成普通的旧IO ()

另一个问题是您最初在没有 liftIO 的 do block 中有一个 readLn,这混淆了类型推断。我还将缺少的 Just 添加到 FB.getUser 调用中。

关于facebook - haskell facebook 例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11596234/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com