Yesod:为Haskell使用Github API v3库

Yesod:为Haskell使用Github API v3库,haskell,github,monads,github-api,yesod,Haskell,Github,Monads,Github Api,Yesod,我正在做一个基于简单YesSOD模板的项目。我不熟悉函数式编程,haskell和Yesod,所以对任何有Yesod经验的人来说,这可能是显而易见的。目前,我正在尝试使用这个函数进行GithubAPI调用。我遇到了一些类型的问题,我甚至不知道如何着手解决它们 你可以找到我的经纪人 Handler/Home.hs:43:19: 无法匹配预期的类型“HandlerT” 应用程序IO(a0 GitHub.User之一)' 实际类型为“GitHub.Request k0 GitHub.User” 在“do

我正在做一个基于简单YesSOD模板的项目。我不熟悉函数式编程,haskell和Yesod,所以对任何有Yesod经验的人来说,这可能是显而易见的。目前,我正在尝试使用这个函数进行GithubAPI调用。我遇到了一些类型的问题,我甚至不知道如何着手解决它们

你可以找到我的经纪人

Handler/Home.hs:43:19:
无法匹配预期的类型“HandlerT”
应用程序IO(a0 GitHub.User之一)'
实际类型为“GitHub.Request k0 GitHub.User”
在“do”块的stmt中:
可能是手持设备应用程序IO a1
实际类型:GitHub.User->Text
在'Earth'的第二个参数中,即'formatUser'
在“do”块的stmt中:

结果GitHub库似乎是关于构建请求并运行它们的。
userInfoForR
执行以下操作:

userInfoForR :: Name User -> Request k User
收到请求后,可以使用以下功能之一运行该请求,具体取决于是否需要进行身份验证:

executeRequest :: Auth -> Request k a -> IO (Either Error a)
executeRequest' :: Request RO a -> IO (Either Error a)
我不知道这个具体案例,但假设你不需要身份验证。因此,下面的表达式可以实现此目的:

executeRequest' (userInfoForR "mike-burns") :: IO (Either Error User)
现在,为了在
Handler
中使用它,您需要了解
Handler
MonadIO
的一个实例,因此您可以执行以下操作:

euser <- liftIO (executeRequest' (userInfoForR "mike-burns"))
case euser of
    Left rr -> ...
    Right user -> ...

euser而不是
possibleUser Hi arrowd。这确实消除了与“possibleUser”行相关的错误,但是在下一个“result”行中使用该变量会导致以下错误(也许我需要用“in”来构造它):
Handler/Home.hs:49:59:
无法将表达式中的第三个参数中的预期类型“other a0 GitHub.User”与实际类型“GitHub.Request k0 GitHub.User”匹配,即表达式中的“possibleUser”
other((“错误:).tshow)formatUser-possibleUser
谢谢你的建议,但我还是不太明白。虽然我想我更了解这个问题。我根据你的建议推送了一些新代码。我得到了以下错误
Handler/Home。hs:26:18:模式中的解析错误:GitHub.userInfoForR
我们在这里试图匹配什么模式?again,我为我在这方面的无知道歉。等号左边的是模式匹配的。你不能在那里调用函数。你写的第二个executeRequest类型声明是作为函数体还是函数体不是必需的?原来我试图使用一些非常过时的示例代码。t他是你提到的最有效的方法。
euser <- liftIO (executeRequest' (userInfoForR "mike-burns"))
case euser of
    Left rr -> ...
    Right user -> ...