Haskell 获取追随者的所有推文
这是我尝试的Haskell 获取追随者的所有推文,haskell,Haskell,这是我尝试的allTweets功能 getBody1接受我的响应和IO(字符串[Tweets]) 我想获得列表中所有用户的tweet,但我只管理了头用户。 如何为列表中的所有用户获取 urldata2 :: String urldata2 = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" allTweets :: [String] -> IO (Either String [Tweets])
allTweets
功能
getBody1接受我的响应和IO(字符串[Tweets])
我想获得列表中所有用户的tweet,但我只管理了头用户。
如何为列表中的所有用户获取
urldata2 :: String
urldata2 = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name="
allTweets :: [String] -> IO (Either String [Tweets])
allTweets listusers = do
getWith authenticate (urldata2++(DL.head listusers) ) >>= \body1 -> getBody1 body1
正如Thomas建议的那样,我能够使用mapM解决我的问题。
我当时正面临map cause(DL.map)的问题:(a->b)->[a]->[b]
它希望它在同一个容器中。
但是对于
mapM::(Monad m,Traversable t)=>(a->mb)->ta->m(tb)
我们可以用任何类似容器的格式发布它你看过mapM
吗?是的,我设法得到了它。谢谢你:)请随时发布并接受你的答案。请注意,你不需要这里的do
关键字<代码>执行a==a。另外,我认为mapM
实际上只是为了向后兼容而保留的,因为它只是traverse
专用于monad,而不是所有的应用程序函子。@chepner它在traverse
没有的地方肯定没有用处,但我认为mapM
有时比traverse
更具描述性。例如,traverse print someValues
对我来说并不像mapM print someValues
那么明显,尽管那里有YMMV@AdamSmith FWIW,我的里程确实不同:我真的很喜欢“traverse”这个名字。我认为它很好地捕捉到了“穿过一个结构,执行一个动作/计算/效果/你在每一步都做了什么”。它还唤起了方向感,这是可遍历
(与Functor
相反)的关键因素之一。
allTweets1 listusers =
mapM (\listu -> (getWith authenticate (urldata2++(listu) ) >>= \body1 -> getBody1 body1) ) listusers