packages feed

twitter-conduit 0.4.0 → 0.5.0

raw patch · 28 files changed

+628/−752 lines, 28 filesdep +ghc-primdep −case-insensitivedep −networkdep −network-uridep ~conduitdep ~conduit-extradep ~http-clientPVP ok

version bump matches the API change (PVP)

Dependencies added: ghc-prim

Dependencies removed: case-insensitive, network, network-uri, template-haskell, transformers-base

Dependency ranges changed: conduit, conduit-extra, http-client, http-conduit

API changes (from Hackage documentation)

- Web.Twitter.Conduit.Api: data AccountUpdateProfile
- Web.Twitter.Conduit.Api: data AccountVerifyCredentials
- Web.Twitter.Conduit.Api: data DirectMessages
- Web.Twitter.Conduit.Api: data DirectMessagesDestroy
- Web.Twitter.Conduit.Api: data DirectMessagesNew
- Web.Twitter.Conduit.Api: data DirectMessagesSent
- Web.Twitter.Conduit.Api: data DirectMessagesShow
- Web.Twitter.Conduit.Api: data FavoritesCreate
- Web.Twitter.Conduit.Api: data FavoritesDestroy
- Web.Twitter.Conduit.Api: data FavoritesList
- Web.Twitter.Conduit.Api: data FollowersIds
- Web.Twitter.Conduit.Api: data FollowersList
- Web.Twitter.Conduit.Api: data FriendsIds
- Web.Twitter.Conduit.Api: data FriendsList
- Web.Twitter.Conduit.Api: data FriendshipsCreate
- Web.Twitter.Conduit.Api: data FriendshipsDestroy
- Web.Twitter.Conduit.Api: data FriendshipsIncoming
- Web.Twitter.Conduit.Api: data FriendshipsNoRetweetsIds
- Web.Twitter.Conduit.Api: data FriendshipsOutgoing
- Web.Twitter.Conduit.Api: data ListsCreate
- Web.Twitter.Conduit.Api: data ListsDestroy
- Web.Twitter.Conduit.Api: data ListsMembers
- Web.Twitter.Conduit.Api: data ListsMembersCreate
- Web.Twitter.Conduit.Api: data ListsMembersCreateAll
- Web.Twitter.Conduit.Api: data ListsMembersDestroy
- Web.Twitter.Conduit.Api: data ListsMembersDestroyAll
- Web.Twitter.Conduit.Api: data ListsMemberships
- Web.Twitter.Conduit.Api: data ListsOwnerships
- Web.Twitter.Conduit.Api: data ListsShow
- Web.Twitter.Conduit.Api: data ListsStatuses
- Web.Twitter.Conduit.Api: data ListsSubscribers
- Web.Twitter.Conduit.Api: data ListsSubscriptions
- Web.Twitter.Conduit.Api: data ListsUpdate
- Web.Twitter.Conduit.Api: data MediaUpload
- Web.Twitter.Conduit.Api: data SearchTweets
- Web.Twitter.Conduit.Api: data UsersLookup
- Web.Twitter.Conduit.Api: data UsersShow
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessages a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FavoritesList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FollowersIds a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FollowersList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendsIds a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendsList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsMembers a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsMemberships a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsOwnerships a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsStatuses a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsSubscribers a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsSubscriptions a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessages a) Data.Text.Internal.Text
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FollowersIds a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FollowersList a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendsIds a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendsList a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendshipsIncoming a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendshipsOutgoing a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsMembers a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsMemberships a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsOwnerships a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsSubscribers a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasCursorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsSubscriptions a) GHC.Integer.Type.Integer
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasDescriptionParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasFollowParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendshipsCreate a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasFullTextParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessages a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasFullTextParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasFullTextParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesShow a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEmailParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountVerifyCredentials a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountVerifyCredentials a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessages a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FavoritesCreate a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FavoritesDestroy a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FavoritesList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsStatuses a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.UsersLookup a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.UsersShow a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeRtsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsStatuses a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeUserEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FollowersList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasIncludeUserEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendsList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasLangParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasLocaleParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasLocationParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FavoritesList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsStatuses a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasNameParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasPageParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasProfileLinkColorParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FavoritesList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsStatuses a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountVerifyCredentials a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessages a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.DirectMessagesSent a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FollowersList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.FriendsList a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsMembers a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasSkipStatusParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.ListsSubscribers a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasUntilParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.SearchTweets a)
- Web.Twitter.Conduit.Api: instance Web.Twitter.Conduit.Parameters.HasUrlParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Api.AccountUpdateProfile a)
- Web.Twitter.Conduit.Parameters: PVBool :: Bool -> PV
- Web.Twitter.Conduit.Parameters: PVDay :: Day -> PV
- Web.Twitter.Conduit.Parameters: PVInteger :: Integer -> PV
- Web.Twitter.Conduit.Parameters: PVIntegerArray :: [Integer] -> PV
- Web.Twitter.Conduit.Parameters: PVString :: Text -> PV
- Web.Twitter.Conduit.Parameters: PVStringArray :: [Text] -> PV
- Web.Twitter.Conduit.Parameters: [unPVBool] :: PV -> Bool
- Web.Twitter.Conduit.Parameters: [unPVDay] :: PV -> Day
- Web.Twitter.Conduit.Parameters: [unPVIntegerArray] :: PV -> [Integer]
- Web.Twitter.Conduit.Parameters: [unPVInteger] :: PV -> Integer
- Web.Twitter.Conduit.Parameters: [unPVStringArray] :: PV -> [Text]
- Web.Twitter.Conduit.Parameters: [unPVString] :: PV -> Text
- Web.Twitter.Conduit.Parameters: class Parameters a_avax => HasContributorDetailsParam a_avax
- Web.Twitter.Conduit.Parameters: class Parameters a_av5v => HasCountParam a_av5v
- Web.Twitter.Conduit.Parameters: class Parameters p => HasCursorParam p a | p -> a
- Web.Twitter.Conduit.Parameters: class Parameters a_avs9 => HasDescriptionParam a_avs9
- Web.Twitter.Conduit.Parameters: class Parameters a_avhf => HasDisplayCoordinatesParam a_avhf
- Web.Twitter.Conduit.Parameters: class Parameters a_av9H => HasExcludeRepliesParam a_av9H
- Web.Twitter.Conduit.Parameters: class Parameters a_avlr => HasFilterLevelParam a_avlr
- Web.Twitter.Conduit.Parameters: class Parameters a_avpD => HasFollowParam a_avpD
- Web.Twitter.Conduit.Parameters: class Parameters a_avwm => HasFullTextParam a_avwm
- Web.Twitter.Conduit.Parameters: class Parameters a_avgp => HasInReplyToStatusIdParam a_avgp
- Web.Twitter.Conduit.Parameters: class Parameters a_avcd => HasIncludeEmailParam a_avcd
- Web.Twitter.Conduit.Parameters: class Parameters a_avbn => HasIncludeEntitiesParam a_avbn
- Web.Twitter.Conduit.Parameters: class Parameters a_avfz => HasIncludeExtAltTextParam a_avfz
- Web.Twitter.Conduit.Parameters: class Parameters a_aveJ => HasIncludeMyRetweetParam a_aveJ
- Web.Twitter.Conduit.Parameters: class Parameters a_avdT => HasIncludeRtsParam a_avdT
- Web.Twitter.Conduit.Parameters: class Parameters a_avd3 => HasIncludeUserEntitiesParam a_avd3
- Web.Twitter.Conduit.Parameters: class Parameters a_aviV => HasLangParam a_aviV
- Web.Twitter.Conduit.Parameters: class Parameters a_avjL => HasLanguageParam a_avjL
- Web.Twitter.Conduit.Parameters: class Parameters a_avkB => HasLocaleParam a_avkB
- Web.Twitter.Conduit.Parameters: class Parameters a_avuF => HasLocationParam a_avuF
- Web.Twitter.Conduit.Parameters: class Parameters a_avqt => HasMapParam a_avqt
- Web.Twitter.Conduit.Parameters: class Parameters a_av7b => HasMaxIdParam a_av7b
- Web.Twitter.Conduit.Parameters: class Parameters a_avrj => HasMediaIdsParam a_avrj
- Web.Twitter.Conduit.Parameters: class Parameters a_avsZ => HasNameParam a_avsZ
- Web.Twitter.Conduit.Parameters: class Parameters a_av81 => HasPageParam a_av81
- Web.Twitter.Conduit.Parameters: class Parameters a_avi5 => HasPossiblySensitiveParam a_avi5
- Web.Twitter.Conduit.Parameters: class Parameters a_avtP => HasProfileLinkColorParam a_avtP
- Web.Twitter.Conduit.Parameters: class Parameters a_avn7 => HasRepliesParam a_avn7
- Web.Twitter.Conduit.Parameters: class Parameters a_av6l => HasSinceIdParam a_av6l
- Web.Twitter.Conduit.Parameters: class Parameters a_avoN => HasSkipStatusParam a_avoN
- Web.Twitter.Conduit.Parameters: class Parameters a_avmh => HasStallWarningsParam a_avmh
- Web.Twitter.Conduit.Parameters: class Parameters a_av8R => HasTrimUserParam a_av8R
- Web.Twitter.Conduit.Parameters: class Parameters a_avnX => HasUntilParam a_avnX
- Web.Twitter.Conduit.Parameters: class Parameters a_avvv => HasUrlParam a_avvv
- Web.Twitter.Conduit.Parameters: class Parameters a_avxc => HasWithParam a_avxc
- Web.Twitter.Conduit.Parameters: class Parameters a
- Web.Twitter.Conduit.Parameters: contributorDetails :: HasContributorDetailsParam a_avax => Lens' a_avax (Maybe Bool)
- Web.Twitter.Conduit.Parameters: count :: HasCountParam a_av5v => Lens' a_av5v (Maybe Integer)
- Web.Twitter.Conduit.Parameters: cursor :: HasCursorParam p a => Lens' p (Maybe a)
- Web.Twitter.Conduit.Parameters: data PV
- Web.Twitter.Conduit.Parameters: description :: HasDescriptionParam a_avs9 => Lens' a_avs9 (Maybe Text)
- Web.Twitter.Conduit.Parameters: displayCoordinates :: HasDisplayCoordinatesParam a_avhf => Lens' a_avhf (Maybe Bool)
- Web.Twitter.Conduit.Parameters: excludeReplies :: HasExcludeRepliesParam a_av9H => Lens' a_av9H (Maybe Bool)
- Web.Twitter.Conduit.Parameters: filterLevel :: HasFilterLevelParam a_avlr => Lens' a_avlr (Maybe Text)
- Web.Twitter.Conduit.Parameters: follow :: HasFollowParam a_avpD => Lens' a_avpD (Maybe Bool)
- Web.Twitter.Conduit.Parameters: fullText :: HasFullTextParam a_avwm => Lens' a_avwm (Maybe Bool)
- Web.Twitter.Conduit.Parameters: inReplyToStatusId :: HasInReplyToStatusIdParam a_avgp => Lens' a_avgp (Maybe Integer)
- Web.Twitter.Conduit.Parameters: includeEmail :: HasIncludeEmailParam a_avcd => Lens' a_avcd (Maybe Bool)
- Web.Twitter.Conduit.Parameters: includeEntities :: HasIncludeEntitiesParam a_avbn => Lens' a_avbn (Maybe Bool)
- Web.Twitter.Conduit.Parameters: includeExtAltText :: HasIncludeExtAltTextParam a_avfz => Lens' a_avfz (Maybe Bool)
- Web.Twitter.Conduit.Parameters: includeMyRetweet :: HasIncludeMyRetweetParam a_aveJ => Lens' a_aveJ (Maybe Bool)
- Web.Twitter.Conduit.Parameters: includeRts :: HasIncludeRtsParam a_avdT => Lens' a_avdT (Maybe Bool)
- Web.Twitter.Conduit.Parameters: includeUserEntities :: HasIncludeUserEntitiesParam a_avd3 => Lens' a_avd3 (Maybe Bool)
- Web.Twitter.Conduit.Parameters: lang :: HasLangParam a_aviV => Lens' a_aviV (Maybe Text)
- Web.Twitter.Conduit.Parameters: language :: HasLanguageParam a_avjL => Lens' a_avjL (Maybe Text)
- Web.Twitter.Conduit.Parameters: locale :: HasLocaleParam a_avkB => Lens' a_avkB (Maybe Text)
- Web.Twitter.Conduit.Parameters: location :: HasLocationParam a_avuF => Lens' a_avuF (Maybe Text)
- Web.Twitter.Conduit.Parameters: makeSimpleQuery :: APIQuery -> SimpleQuery
- Web.Twitter.Conduit.Parameters: map :: HasMapParam a_avqt => Lens' a_avqt (Maybe Bool)
- Web.Twitter.Conduit.Parameters: maxId :: HasMaxIdParam a_av7b => Lens' a_av7b (Maybe Integer)
- Web.Twitter.Conduit.Parameters: mediaIds :: HasMediaIdsParam a_avrj => Lens' a_avrj (Maybe [Integer])
- Web.Twitter.Conduit.Parameters: name :: HasNameParam a_avsZ => Lens' a_avsZ (Maybe Text)
- Web.Twitter.Conduit.Parameters: page :: HasPageParam a_av81 => Lens' a_av81 (Maybe Integer)
- Web.Twitter.Conduit.Parameters: params :: Parameters a => Lens' a APIQuery
- Web.Twitter.Conduit.Parameters: possiblySensitive :: HasPossiblySensitiveParam a_avi5 => Lens' a_avi5 (Maybe Bool)
- Web.Twitter.Conduit.Parameters: profileLinkColor :: HasProfileLinkColorParam a_avtP => Lens' a_avtP (Maybe Text)
- Web.Twitter.Conduit.Parameters: replies :: HasRepliesParam a_avn7 => Lens' a_avn7 (Maybe Text)
- Web.Twitter.Conduit.Parameters: sinceId :: HasSinceIdParam a_av6l => Lens' a_av6l (Maybe Integer)
- Web.Twitter.Conduit.Parameters: skipStatus :: HasSkipStatusParam a_avoN => Lens' a_avoN (Maybe Bool)
- Web.Twitter.Conduit.Parameters: stallWarnings :: HasStallWarningsParam a_avmh => Lens' a_avmh (Maybe Bool)
- Web.Twitter.Conduit.Parameters: trimUser :: HasTrimUserParam a_av8R => Lens' a_av8R (Maybe Bool)
- Web.Twitter.Conduit.Parameters: type APIQuery = [APIQueryItem]
- Web.Twitter.Conduit.Parameters: type APIQueryItem = (ByteString, PV)
- Web.Twitter.Conduit.Parameters: until :: HasUntilParam a_avnX => Lens' a_avnX (Maybe Day)
- Web.Twitter.Conduit.Parameters: url :: HasUrlParam a_avvv => Lens' a_avvv (Maybe URIString)
- Web.Twitter.Conduit.Parameters: with :: HasWithParam a_avxc => Lens' a_avxc (Maybe Text)
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClass :: Name -> Name -> TypeQ -> String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClass' :: String -> String -> Name -> Name -> TypeQ -> String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassBool :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassDay :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassInteger :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassIntegerArray :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassString :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassStringArray :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: defineHasParamClassURI :: String -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: deriveHasParamInstances :: Name -> [String] -> Q [Dec]
- Web.Twitter.Conduit.Parameters.TH: wrappedParam :: Parameters p => ByteString -> (a -> PV) -> (PV -> a) -> Lens' p (Maybe a)
- Web.Twitter.Conduit.Request: PVBool :: Bool -> PV
- Web.Twitter.Conduit.Request: PVDay :: Day -> PV
- Web.Twitter.Conduit.Request: PVInteger :: Integer -> PV
- Web.Twitter.Conduit.Request: PVIntegerArray :: [Integer] -> PV
- Web.Twitter.Conduit.Request: PVString :: Text -> PV
- Web.Twitter.Conduit.Request: PVStringArray :: [Text] -> PV
- Web.Twitter.Conduit.Request: [unPVBool] :: PV -> Bool
- Web.Twitter.Conduit.Request: [unPVDay] :: PV -> Day
- Web.Twitter.Conduit.Request: [unPVIntegerArray] :: PV -> [Integer]
- Web.Twitter.Conduit.Request: [unPVInteger] :: PV -> Integer
- Web.Twitter.Conduit.Request: [unPVStringArray] :: PV -> [Text]
- Web.Twitter.Conduit.Request: [unPVString] :: PV -> Text
- Web.Twitter.Conduit.Request: class Parameters a
- Web.Twitter.Conduit.Request: data PV
- Web.Twitter.Conduit.Request: instance GHC.Classes.Eq Web.Twitter.Conduit.Request.PV
- Web.Twitter.Conduit.Request: instance GHC.Show.Show Web.Twitter.Conduit.Request.PV
- Web.Twitter.Conduit.Request: instance Web.Twitter.Conduit.Request.Parameters (Web.Twitter.Conduit.Request.APIRequest apiName responseType)
- Web.Twitter.Conduit.Request: makeSimpleQuery :: APIQuery -> SimpleQuery
- Web.Twitter.Conduit.Request: paramValueBS :: PV -> ByteString
- Web.Twitter.Conduit.Request: params :: Parameters a => Lens' a APIQuery
- Web.Twitter.Conduit.Request: type APIQuery = [APIQueryItem]
- Web.Twitter.Conduit.Request: type APIQueryItem = (ByteString, PV)
- Web.Twitter.Conduit.Status: data StatusesDestroyId
- Web.Twitter.Conduit.Status: data StatusesHomeTimeline
- Web.Twitter.Conduit.Status: data StatusesLookup
- Web.Twitter.Conduit.Status: data StatusesMentionsTimeline
- Web.Twitter.Conduit.Status: data StatusesRetweetId
- Web.Twitter.Conduit.Status: data StatusesRetweetsId
- Web.Twitter.Conduit.Status: data StatusesRetweetsOfMe
- Web.Twitter.Conduit.Status: data StatusesShowId
- Web.Twitter.Conduit.Status: data StatusesUpdate
- Web.Twitter.Conduit.Status: data StatusesUpdateWithMedia
- Web.Twitter.Conduit.Status: data StatusesUserTimeline
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasContributorDetailsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasContributorDetailsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesMentionsTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasContributorDetailsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesMentionsTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsOfMe a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasCountParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasDisplayCoordinatesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdate a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasDisplayCoordinatesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdateWithMedia a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasExcludeRepliesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasExcludeRepliesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasInReplyToStatusIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdate a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasInReplyToStatusIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdateWithMedia a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesLookup a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesMentionsTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsOfMe a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesShowId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeExtAltTextParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesShowId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeMyRetweetParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesShowId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeRtsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasIncludeUserEntitiesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsOfMe a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasMapParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesLookup a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesMentionsTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsOfMe a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasMaxIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasMediaIdsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdate a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasPossiblySensitiveParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdateWithMedia a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesMentionsTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsOfMe a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasSinceIdParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesDestroyId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesHomeTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesLookup a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesMentionsTimeline a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesRetweetsOfMe a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesShowId a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUpdate a)
- Web.Twitter.Conduit.Status: instance Web.Twitter.Conduit.Parameters.HasTrimUserParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Status.StatusesUserTimeline a)
- Web.Twitter.Conduit.Stream: data StatusesFilter
- Web.Twitter.Conduit.Stream: data Userstream
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasFilterLevelParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.StatusesFilter a)
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasFilterLevelParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.Userstream a)
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasLanguageParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.StatusesFilter a)
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasLanguageParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.Userstream a)
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasRepliesParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.Userstream a)
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasStallWarningsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.StatusesFilter a)
- Web.Twitter.Conduit.Stream: instance Web.Twitter.Conduit.Parameters.HasStallWarningsParam (Web.Twitter.Conduit.Request.APIRequest Web.Twitter.Conduit.Stream.Userstream a)
+ Web.Twitter.Conduit.Api: statusesDestroyId :: StatusId -> APIRequest StatusesDestroyId Status
+ Web.Twitter.Conduit.Api: statusesHomeTimeline :: APIRequest StatusesHomeTimeline [Status]
+ Web.Twitter.Conduit.Api: statusesLookup :: [StatusId] -> APIRequest StatusesLookup [Status]
+ Web.Twitter.Conduit.Api: statusesMentionsTimeline :: APIRequest StatusesMentionsTimeline [Status]
+ Web.Twitter.Conduit.Api: statusesRetweetId :: StatusId -> APIRequest StatusesRetweetId RetweetedStatus
+ Web.Twitter.Conduit.Api: statusesRetweetsId :: StatusId -> APIRequest StatusesRetweetsId [RetweetedStatus]
+ Web.Twitter.Conduit.Api: statusesRetweetsOfMe :: APIRequest StatusesRetweetsOfMe [Status]
+ Web.Twitter.Conduit.Api: statusesShowId :: StatusId -> APIRequest StatusesShowId Status
+ Web.Twitter.Conduit.Api: statusesUpdate :: Text -> APIRequest StatusesUpdate Status
+ Web.Twitter.Conduit.Api: statusesUpdateWithMedia :: Text -> MediaData -> APIRequest StatusesUpdateWithMedia Status
+ Web.Twitter.Conduit.Api: statusesUserTimeline :: UserParam -> APIRequest StatusesUserTimeline [Status]
+ Web.Twitter.Conduit.Api: type AccountUpdateProfile = '["include_entities" := Bool, "skip_status" := Bool, "name" := Text, "url" := URIString, "location" := Text, "description" := Text, "profile_link_color" := Text]
+ Web.Twitter.Conduit.Api: type AccountVerifyCredentials = '["include_entities" := Bool, "skip_status" := Bool, "include_email" := Bool]
+ Web.Twitter.Conduit.Api: type DirectMessages = '["count" := Integer, "include_entities" := Bool, "skip_status" := Bool, "full_text" := Bool, "cursor" := Text]
+ Web.Twitter.Conduit.Api: type DirectMessagesDestroy = EmptyParams
+ Web.Twitter.Conduit.Api: type DirectMessagesNew = EmptyParams
+ Web.Twitter.Conduit.Api: type DirectMessagesSent = '["since_id" := Integer, "max_id" := Integer, "count" := Integer, "include_entities" := Bool, "page" := Integer, "skip_status" := Bool, "full_text" := Bool]
+ Web.Twitter.Conduit.Api: type DirectMessagesShow = '["full_text" := Bool]
+ Web.Twitter.Conduit.Api: type FavoritesCreate = '["include_entities" := Bool]
+ Web.Twitter.Conduit.Api: type FavoritesDestroy = '["include_entities" := Bool]
+ Web.Twitter.Conduit.Api: type FavoritesList = '["count" := Integer, "since_id" := Integer, "max_id" := Integer, "include_entities" := Bool]
+ Web.Twitter.Conduit.Api: type FollowersIds = '["count" := Integer, "cursor" := Integer]
+ Web.Twitter.Conduit.Api: type FollowersList = '["count" := Integer, "cursor" := Integer, "skip_status" := Bool, "include_user_entities" := Bool]
+ Web.Twitter.Conduit.Api: type FriendsIds = '["count" := Integer, "cursor" := Integer]
+ Web.Twitter.Conduit.Api: type FriendsList = '["count" := Integer, "cursor" := Integer, "skip_status" := Bool, "include_user_entities" := Bool]
+ Web.Twitter.Conduit.Api: type FriendshipsCreate = '["follow" := Bool]
+ Web.Twitter.Conduit.Api: type FriendshipsDestroy = EmptyParams
+ Web.Twitter.Conduit.Api: type FriendshipsIncoming = '["cursor" := Integer]
+ Web.Twitter.Conduit.Api: type FriendshipsNoRetweetsIds = EmptyParams
+ Web.Twitter.Conduit.Api: type FriendshipsOutgoing = '["cursor" := Integer]
+ Web.Twitter.Conduit.Api: type ListsCreate = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsDestroy = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsMembers = '["count" := Integer, "cursor" := Integer, "skip_status" := Bool]
+ Web.Twitter.Conduit.Api: type ListsMembersCreate = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsMembersCreateAll = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsMembersDestroy = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsMembersDestroyAll = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsMemberships = '["count" := Integer, "cursor" := Integer]
+ Web.Twitter.Conduit.Api: type ListsOwnerships = '["count" := Integer, "cursor" := Integer]
+ Web.Twitter.Conduit.Api: type ListsShow = EmptyParams
+ Web.Twitter.Conduit.Api: type ListsStatuses = '["since_id" := Integer, "max_id" := Integer, "count" := Integer, "include_entities" := Bool, "include_rts" := Bool]
+ Web.Twitter.Conduit.Api: type ListsSubscribers = '["count" := Integer, "cursor" := Integer, "skip_status" := Bool]
+ Web.Twitter.Conduit.Api: type ListsSubscriptions = '["count" := Integer, "cursor" := Integer]
+ Web.Twitter.Conduit.Api: type ListsUpdate = EmptyParams
+ Web.Twitter.Conduit.Api: type MediaUpload = EmptyParams
+ Web.Twitter.Conduit.Api: type SearchTweets = '["lang" := Text, "locale" := Text, "count" := Integer, "until" := Day, "since_id" := Integer, "max_id" := Integer, "include_entities" := Bool]
+ Web.Twitter.Conduit.Api: type UsersLookup = '["include_entities" := Bool]
+ Web.Twitter.Conduit.Api: type UsersShow = '["include_entities" := Bool]
+ Web.Twitter.Conduit.ParametersDeprecated: contributorDetails :: (Parameters p, HasParam "contributor_details" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: count :: (Parameters p, HasParam "count" Integer (SupportParameters p)) => Lens' p (Maybe Integer)
+ Web.Twitter.Conduit.ParametersDeprecated: description :: (Parameters p, HasParam "description" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: displayCoordinates :: (Parameters p, HasParam "display_coordinates" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: excludeReplies :: (Parameters p, HasParam "exclude_replies" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: filterLevel :: (Parameters p, HasParam "filter_level" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: follow :: (Parameters p, HasParam "follow" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: fullText :: (Parameters p, HasParam "full_text" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: inReplyToStatusId :: (Parameters p, HasParam "in_reply_to_status_id" Integer (SupportParameters p)) => Lens' p (Maybe Integer)
+ Web.Twitter.Conduit.ParametersDeprecated: includeEmail :: (Parameters p, HasParam "include_email" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: includeEntities :: (Parameters p, HasParam "include_entities" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: includeExtAltText :: (Parameters p, HasParam "include_ext_alt_text" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: includeMyRetweet :: (Parameters p, HasParam "include_my_retweet" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: includeRts :: (Parameters p, HasParam "include_rts" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: includeUserEntities :: (Parameters p, HasParam "include_user_entities" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: lang :: (Parameters p, HasParam "lang" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: language :: (Parameters p, HasParam "language" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: locale :: (Parameters p, HasParam "locale" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: location :: (Parameters p, HasParam "location" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: map :: (Parameters p, HasParam "map" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: maxId :: (Parameters p, HasParam "max_id" Integer (SupportParameters p)) => Lens' p (Maybe Integer)
+ Web.Twitter.Conduit.ParametersDeprecated: mediaIds :: (Parameters p, HasParam "media_ids" [Integer] (SupportParameters p)) => Lens' p (Maybe [Integer])
+ Web.Twitter.Conduit.ParametersDeprecated: name :: (Parameters p, HasParam "name" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: page :: (Parameters p, HasParam "page" Integer (SupportParameters p)) => Lens' p (Maybe Integer)
+ Web.Twitter.Conduit.ParametersDeprecated: possiblySensitive :: (Parameters p, HasParam "possibly_sensitive" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: profileLinkColor :: (Parameters p, HasParam "profile_link_color" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: replies :: (Parameters p, HasParam "replies" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.ParametersDeprecated: sinceId :: (Parameters p, HasParam "since_id" Integer (SupportParameters p)) => Lens' p (Maybe Integer)
+ Web.Twitter.Conduit.ParametersDeprecated: skipStatus :: (Parameters p, HasParam "skip_status" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: stallWarnings :: (Parameters p, HasParam "stall_warnings" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: trimUser :: (Parameters p, HasParam "trim_user" Bool (SupportParameters p)) => Lens' p (Maybe Bool)
+ Web.Twitter.Conduit.ParametersDeprecated: until :: (Parameters p, HasParam "until" Day (SupportParameters p)) => Lens' p (Maybe Day)
+ Web.Twitter.Conduit.ParametersDeprecated: url :: (Parameters p, HasParam "url" URIString (SupportParameters p)) => Lens' p (Maybe URIString)
+ Web.Twitter.Conduit.ParametersDeprecated: with :: (Parameters p, HasParam "with" Text (SupportParameters p)) => Lens' p (Maybe Text)
+ Web.Twitter.Conduit.Request: instance Web.Twitter.Conduit.Request.Internal.Parameters (Web.Twitter.Conduit.Request.APIRequest supports responseType)
+ Web.Twitter.Conduit.Request: type HasParam (label :: Symbol) (paramType :: *) (params :: [Param Symbol *]) = ParamType label params ~ paramType
+ Web.Twitter.Conduit.Request.Internal: (:=) :: label -> t -> Param label t
+ Web.Twitter.Conduit.Request.Internal: PVBool :: Bool -> PV
+ Web.Twitter.Conduit.Request.Internal: PVDay :: Day -> PV
+ Web.Twitter.Conduit.Request.Internal: PVInteger :: Integer -> PV
+ Web.Twitter.Conduit.Request.Internal: PVIntegerArray :: [Integer] -> PV
+ Web.Twitter.Conduit.Request.Internal: PVString :: Text -> PV
+ Web.Twitter.Conduit.Request.Internal: PVStringArray :: [Text] -> PV
+ Web.Twitter.Conduit.Request.Internal: [unPVBool] :: PV -> Bool
+ Web.Twitter.Conduit.Request.Internal: [unPVDay] :: PV -> Day
+ Web.Twitter.Conduit.Request.Internal: [unPVIntegerArray] :: PV -> [Integer]
+ Web.Twitter.Conduit.Request.Internal: [unPVInteger] :: PV -> Integer
+ Web.Twitter.Conduit.Request.Internal: [unPVStringArray] :: PV -> [Text]
+ Web.Twitter.Conduit.Request.Internal: [unPVString] :: PV -> Text
+ Web.Twitter.Conduit.Request.Internal: class ParameterValue a
+ Web.Twitter.Conduit.Request.Internal: class Parameters req where {
+ Web.Twitter.Conduit.Request.Internal: data PV
+ Web.Twitter.Conduit.Request.Internal: data Param label t
+ Web.Twitter.Conduit.Request.Internal: instance (Web.Twitter.Conduit.Request.Internal.Parameters req, Web.Twitter.Conduit.Request.Internal.ParameterValue a, GHC.TypeLits.KnownSymbol label, Web.Twitter.Conduit.Request.Internal.HasParam label a (Web.Twitter.Conduit.Request.Internal.SupportParameters req), GHC.Base.Functor f, lens Data.Type.Equality.~ ((GHC.Maybe.Maybe a -> f (GHC.Maybe.Maybe a)) -> req -> f req)) => GHC.OverloadedLabels.IsLabel label lens
+ Web.Twitter.Conduit.Request.Internal: instance GHC.Classes.Eq Web.Twitter.Conduit.Request.Internal.PV
+ Web.Twitter.Conduit.Request.Internal: instance GHC.Show.Show Web.Twitter.Conduit.Request.Internal.PV
+ Web.Twitter.Conduit.Request.Internal: instance Web.Twitter.Conduit.Request.Internal.ParameterValue Data.Text.Internal.Text
+ Web.Twitter.Conduit.Request.Internal: instance Web.Twitter.Conduit.Request.Internal.ParameterValue Data.Time.Calendar.Days.Day
+ Web.Twitter.Conduit.Request.Internal: instance Web.Twitter.Conduit.Request.Internal.ParameterValue GHC.Integer.Type.Integer
+ Web.Twitter.Conduit.Request.Internal: instance Web.Twitter.Conduit.Request.Internal.ParameterValue GHC.Types.Bool
+ Web.Twitter.Conduit.Request.Internal: instance Web.Twitter.Conduit.Request.Internal.ParameterValue [Data.Text.Internal.Text]
+ Web.Twitter.Conduit.Request.Internal: instance Web.Twitter.Conduit.Request.Internal.ParameterValue [GHC.Integer.Type.Integer]
+ Web.Twitter.Conduit.Request.Internal: makeSimpleQuery :: APIQuery -> SimpleQuery
+ Web.Twitter.Conduit.Request.Internal: paramValueBS :: PV -> ByteString
+ Web.Twitter.Conduit.Request.Internal: params :: Parameters req => Lens' req APIQuery
+ Web.Twitter.Conduit.Request.Internal: rawParam :: (Parameters p, ParameterValue a) => ByteString -> Lens' p (Maybe a)
+ Web.Twitter.Conduit.Request.Internal: type APIQuery = [APIQueryItem]
+ Web.Twitter.Conduit.Request.Internal: type APIQueryItem = (ByteString, PV)
+ Web.Twitter.Conduit.Request.Internal: type EmptyParams = ('[] :: [Param Symbol *])
+ Web.Twitter.Conduit.Request.Internal: type HasParam (label :: Symbol) (paramType :: *) (params :: [Param Symbol *]) = ParamType label params ~ paramType
+ Web.Twitter.Conduit.Request.Internal: type family SupportParameters req :: [Param Symbol *];
+ Web.Twitter.Conduit.Request.Internal: unwrap :: ParameterValue a => PV -> a
+ Web.Twitter.Conduit.Request.Internal: wrap :: ParameterValue a => a -> PV
+ Web.Twitter.Conduit.Request.Internal: }
+ Web.Twitter.Conduit.Status: type StatusesDestroyId = '["trim_user" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesHomeTimeline = '["count" := Integer, "since_id" := Integer, "max_id" := Integer, "trim_user" := Bool, "exclude_replies" := Bool, "contributor_details" := Bool, "include_entities" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesLookup = '["include_entities" := Bool, "trim_user" := Bool, "map" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesMentionsTimeline = '["count" := Integer, "since_id" := Integer, "max_id" := Integer, "trim_user" := Bool, "contributor_details" := Bool, "include_entities" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesRetweetId = '["trim_user" := Bool]
+ Web.Twitter.Conduit.Status: type StatusesRetweetsId = '["count" := Integer, "trim_user" := Bool]
+ Web.Twitter.Conduit.Status: type StatusesRetweetsOfMe = '["count" := Integer, "since_id" := Integer, "max_id" := Integer, "trim_user" := Bool, "include_entities" := Bool, "include_user_entities" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesShowId = '["trim_user" := Bool, "include_my_retweet" := Bool, "include_entities" := Bool, "include_ext_alt_text" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesUpdate = '["in_reply_to_status_id" := Integer, "display_coordinates" := Bool, "trim_user" := Bool, "media_ids" := [Integer], "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesUpdateWithMedia = '["possibly_sensitive" := Bool, "in_reply_to_status_id" := Integer, "display_coordinates" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Status: type StatusesUserTimeline = '["count" := Integer, "since_id" := Integer, "max_id" := Integer, "trim_user" := Bool, "exclude_replies" := Bool, "contributor_details" := Bool, "include_rts" := Bool, "tweet_mode" := Text]
+ Web.Twitter.Conduit.Stream: type StatusesFilter = '["language" := Text, "filter_level" := Text, "stall_warnings" := Bool]
+ Web.Twitter.Conduit.Stream: type Userstream = '["language" := Text, "filter_level" := Text, "stall_warnings" := Bool, "replies" := Text]
- Web.Twitter.Conduit: sourceWithCursor :: (MonadIO m, FromJSON responseType, CursorKey ck, HasCursorParam (APIRequest apiName (WithCursor Integer ck responseType)) Integer) => TWInfo -> Manager -> APIRequest apiName (WithCursor Integer ck responseType) -> Source m responseType
+ Web.Twitter.Conduit: sourceWithCursor :: (MonadIO m, FromJSON responseType, CursorKey ck, HasParam "cursor" Integer supports) => TWInfo -> Manager -> APIRequest supports (WithCursor Integer ck responseType) -> ConduitT () responseType m ()
- Web.Twitter.Conduit: sourceWithCursor' :: (MonadIO m, CursorKey ck, HasCursorParam (APIRequest apiName (WithCursor Integer ck responseType)) Integer) => TWInfo -> Manager -> APIRequest apiName (WithCursor Integer ck responseType) -> Source m Value
+ Web.Twitter.Conduit: sourceWithCursor' :: (MonadIO m, CursorKey ck, HasParam "cursor" Integer supports) => TWInfo -> Manager -> APIRequest supports (WithCursor Integer ck responseType) -> ConduitT () Value m ()
- Web.Twitter.Conduit: sourceWithMaxId :: (MonadIO m, FromJSON responseType, AsStatus responseType, HasMaxIdParam (APIRequest apiName [responseType])) => TWInfo -> Manager -> APIRequest apiName [responseType] -> Source m responseType
+ Web.Twitter.Conduit: sourceWithMaxId :: (MonadIO m, FromJSON responseType, AsStatus responseType, HasParam "max_id" Integer supports) => TWInfo -> Manager -> APIRequest supports [responseType] -> ConduitT () responseType m ()
- Web.Twitter.Conduit: sourceWithMaxId' :: (MonadIO m, HasMaxIdParam (APIRequest apiName [responseType])) => TWInfo -> Manager -> APIRequest apiName [responseType] -> Source m Value
+ Web.Twitter.Conduit: sourceWithMaxId' :: (MonadIO m, HasParam "max_id" Integer supports) => TWInfo -> Manager -> APIRequest supports [responseType] -> ConduitT () Value m ()
- Web.Twitter.Conduit: sourceWithSearchResult :: (MonadIO m, FromJSON responseType) => TWInfo -> Manager -> APIRequest apiName (SearchResult [responseType]) -> m (SearchResult (Source m responseType))
+ Web.Twitter.Conduit: sourceWithSearchResult :: (MonadIO m, FromJSON responseType) => TWInfo -> Manager -> APIRequest supports (SearchResult [responseType]) -> m (SearchResult (ConduitT () responseType m ()))
- Web.Twitter.Conduit: sourceWithSearchResult' :: MonadIO m => TWInfo -> Manager -> APIRequest apiName (SearchResult [responseType]) -> m (SearchResult (Source m Value))
+ Web.Twitter.Conduit: sourceWithSearchResult' :: MonadIO m => TWInfo -> Manager -> APIRequest supports (SearchResult [responseType]) -> m (SearchResult (ConduitT () Value m ()))
- Web.Twitter.Conduit.Base: sinkFromJSON :: (FromJSON a, MonadThrow m) => Consumer ByteString m a
+ Web.Twitter.Conduit.Base: sinkFromJSON :: (FromJSON a, MonadThrow m) => ConduitT ByteString o m a
- Web.Twitter.Conduit.Base: sinkJSON :: MonadThrow m => Consumer ByteString m Value
+ Web.Twitter.Conduit.Base: sinkJSON :: MonadThrow m => ConduitT ByteString o m Value
- Web.Twitter.Conduit.Base: sourceWithCursor :: (MonadIO m, FromJSON responseType, CursorKey ck, HasCursorParam (APIRequest apiName (WithCursor Integer ck responseType)) Integer) => TWInfo -> Manager -> APIRequest apiName (WithCursor Integer ck responseType) -> Source m responseType
+ Web.Twitter.Conduit.Base: sourceWithCursor :: (MonadIO m, FromJSON responseType, CursorKey ck, HasParam "cursor" Integer supports) => TWInfo -> Manager -> APIRequest supports (WithCursor Integer ck responseType) -> ConduitT () responseType m ()
- Web.Twitter.Conduit.Base: sourceWithCursor' :: (MonadIO m, CursorKey ck, HasCursorParam (APIRequest apiName (WithCursor Integer ck responseType)) Integer) => TWInfo -> Manager -> APIRequest apiName (WithCursor Integer ck responseType) -> Source m Value
+ Web.Twitter.Conduit.Base: sourceWithCursor' :: (MonadIO m, CursorKey ck, HasParam "cursor" Integer supports) => TWInfo -> Manager -> APIRequest supports (WithCursor Integer ck responseType) -> ConduitT () Value m ()
- Web.Twitter.Conduit.Base: sourceWithMaxId :: (MonadIO m, FromJSON responseType, AsStatus responseType, HasMaxIdParam (APIRequest apiName [responseType])) => TWInfo -> Manager -> APIRequest apiName [responseType] -> Source m responseType
+ Web.Twitter.Conduit.Base: sourceWithMaxId :: (MonadIO m, FromJSON responseType, AsStatus responseType, HasParam "max_id" Integer supports) => TWInfo -> Manager -> APIRequest supports [responseType] -> ConduitT () responseType m ()
- Web.Twitter.Conduit.Base: sourceWithMaxId' :: (MonadIO m, HasMaxIdParam (APIRequest apiName [responseType])) => TWInfo -> Manager -> APIRequest apiName [responseType] -> Source m Value
+ Web.Twitter.Conduit.Base: sourceWithMaxId' :: (MonadIO m, HasParam "max_id" Integer supports) => TWInfo -> Manager -> APIRequest supports [responseType] -> ConduitT () Value m ()
- Web.Twitter.Conduit.Base: sourceWithSearchResult :: (MonadIO m, FromJSON responseType) => TWInfo -> Manager -> APIRequest apiName (SearchResult [responseType]) -> m (SearchResult (Source m responseType))
+ Web.Twitter.Conduit.Base: sourceWithSearchResult :: (MonadIO m, FromJSON responseType) => TWInfo -> Manager -> APIRequest supports (SearchResult [responseType]) -> m (SearchResult (ConduitT () responseType m ()))
- Web.Twitter.Conduit.Base: sourceWithSearchResult' :: MonadIO m => TWInfo -> Manager -> APIRequest apiName (SearchResult [responseType]) -> m (SearchResult (Source m Value))
+ Web.Twitter.Conduit.Base: sourceWithSearchResult' :: MonadIO m => TWInfo -> Manager -> APIRequest supports (SearchResult [responseType]) -> m (SearchResult (ConduitT () Value m ()))
- Web.Twitter.Conduit.Request: APIRequest :: Method -> String -> APIQuery -> APIRequest apiName responseType
+ Web.Twitter.Conduit.Request: APIRequest :: Method -> String -> APIQuery -> APIRequest responseType
- Web.Twitter.Conduit.Request: APIRequestJSON :: Method -> String -> APIQuery -> Value -> APIRequest apiName responseType
+ Web.Twitter.Conduit.Request: APIRequestJSON :: Method -> String -> APIQuery -> Value -> APIRequest responseType
- Web.Twitter.Conduit.Request: APIRequestMultipart :: Method -> String -> APIQuery -> [Part] -> APIRequest apiName responseType
+ Web.Twitter.Conduit.Request: APIRequestMultipart :: Method -> String -> APIQuery -> [Part] -> APIRequest responseType
- Web.Twitter.Conduit.Request: [_body] :: APIRequest apiName responseType -> Value
+ Web.Twitter.Conduit.Request: [_body] :: APIRequest responseType -> Value
- Web.Twitter.Conduit.Request: [_method] :: APIRequest apiName responseType -> Method
+ Web.Twitter.Conduit.Request: [_method] :: APIRequest responseType -> Method
- Web.Twitter.Conduit.Request: [_params] :: APIRequest apiName responseType -> APIQuery
+ Web.Twitter.Conduit.Request: [_params] :: APIRequest responseType -> APIQuery
- Web.Twitter.Conduit.Request: [_part] :: APIRequest apiName responseType -> [Part]
+ Web.Twitter.Conduit.Request: [_part] :: APIRequest responseType -> [Part]
- Web.Twitter.Conduit.Request: [_url] :: APIRequest apiName responseType -> String
+ Web.Twitter.Conduit.Request: [_url] :: APIRequest responseType -> String
- Web.Twitter.Conduit.Request: data APIRequest apiName responseType
+ Web.Twitter.Conduit.Request: data APIRequest (supports :: [Param Symbol *]) responseType

Files

ChangeLog.md view
@@ -1,3 +1,32 @@+## 0.5.0++* Support for OverloadedLabels++  `twitter-conduit` now supports the OverloadedLabels extensions for overloaded parameters in `APIRequest` (e.g.: `#count`, `#max_id`).++  We can now write:++  ```haskell+  homeTimeline & #count ?~ 200+  ```++  instead of:++  ```haskell+  import qualified Web.Twitter.Conduit.Parameters as P++  homeTimeline & P.count ?~ 200+  ```++  NOTE: See `Web.Twitter.Conduit.ParametersDeprecated` module if you would like to use classic value lenses.++* Drop supports conduit < 1.3 and http-conduit < 2.3 [#69](https://github.com/himura/twitter-conduit/pull/69).+* `Web.Twitter.Conduit.Status` is no longer re-exported by Web.Twitter.Conduit in order to avoid name conflictions (e.g. `update`, `lookup`) [#71](https://github.com/himura/twitter-conduit/pull/71).+* Add alias for functions in `Web.Twitter.Conduit.Status` with statuses- prefix [#71](https://github.com/himura/twitter-conduit/pull/71).+  (e.g. `Web.Twitter.Conduit.Api.statusesHomeTimeline` for `Web.Twitter.Conduit.Status.homeTimeline`)+* Drop supports network < 2.6 [#74](https://github.com/himura/twitter-conduit/pull/74).+* Support `tweet_mode` parameter [#72](https://github.com/himura/twitter-conduit/pull/72).+ ## 0.4.0  * Follow direct message API changes [#65](https://github.com/himura/twitter-conduit/pull/65) [#62](https://github.com/himura/twitter-conduit/pull/62)
Web/Twitter/Conduit.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-}  -- |@@ -21,7 +20,6 @@        , module Web.Twitter.Conduit.Cursor        , module Web.Twitter.Conduit.Request        , module Web.Twitter.Conduit.Response-       , module Web.Twitter.Conduit.Status        , module Web.Twitter.Conduit.Stream        , module Web.Twitter.Conduit.Types @@ -38,10 +36,10 @@        , sourceWithSearchResult'         -- * 'Web.Twitter.Conduit.Parameters'-       , Parameters.ListParam(..)-       , Parameters.MediaData(..)-       , Parameters.UserListParam(..)-       , Parameters.UserParam(..)+       , ListParam(..)+       , MediaData(..)+       , UserListParam(..)+       , UserParam(..)         -- * re-exports        , OAuth (..)@@ -55,16 +53,13 @@ import Web.Twitter.Conduit.Api import Web.Twitter.Conduit.Base import Web.Twitter.Conduit.Cursor-import qualified Web.Twitter.Conduit.Parameters as Parameters+import Web.Twitter.Conduit.Parameters import Web.Twitter.Conduit.Request import Web.Twitter.Conduit.Response-import Web.Twitter.Conduit.Status import Web.Twitter.Conduit.Stream import Web.Twitter.Conduit.Types-import Web.Twitter.Types  import Data.Default (def)-import Data.Time.Calendar (Day) import Network.HTTP.Conduit (Manager, newManager, tlsManagerSettings) import Web.Authenticate.OAuth @@ -76,9 +71,7 @@ import Control.Monad.IO.Class import Control.Lens -#ifdef HLINT {-# ANN module "HLint: ignore Use import/export shortcut" #-}-#endif  -- $howto --@@ -161,7 +154,7 @@ -- includes 20 tweets, and you can change the number of tweets by the /count/ parameter. -- -- @--- timeline \<- 'call' twInfo mgr '$' 'homeTimeline' '&' 'count' '?~' 200+-- timeline \<- 'call' twInfo mgr '$' 'homeTimeline' '&' #count '?~' 200 -- @ -- -- If you need more statuses, you can obtain those with multiple API requests.@@ -171,7 +164,7 @@ -- or use the conduit wrapper 'sourceWithCursor' as below: -- -- @--- friends \<- 'sourceWithCursor' twInfo mgr ('friendsList' ('ScreenNameParam' \"thimura\") '&' 'count' '?~' 200) '$$' 'CL.consume'+-- friends \<- 'sourceWithCursor' twInfo mgr ('friendsList' ('ScreenNameParam' \"thimura\") '&' #count '?~' 200) '$$' 'CL.consume' -- @ -- -- Statuses APIs, for instance, 'homeTimeline', are also wrapped by 'sourceWithMaxId'.
Web/Twitter/Conduit/Api.hs view
@@ -1,14 +1,26 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeOperators #-}  module Web.Twitter.Conduit.Api        (+       -- * Status+         statusesMentionsTimeline+       , statusesUserTimeline+       , statusesHomeTimeline+       , statusesRetweetsOfMe+       , statusesRetweetsId+       , statusesShowId+       , statusesDestroyId+       , statusesUpdate+       , statusesRetweetId+       , statusesUpdateWithMedia+       , statusesLookup+        -- * Search-         SearchTweets+       , SearchTweets        , searchTweets        , search @@ -144,23 +156,24 @@        , mediaUpload        ) where -import Web.Twitter.Types-import Web.Twitter.Conduit.Parameters hiding (description, name)-import Web.Twitter.Conduit.Parameters.TH import Web.Twitter.Conduit.Base-import Web.Twitter.Conduit.Request import Web.Twitter.Conduit.Cursor+import Web.Twitter.Conduit.Parameters+import Web.Twitter.Conduit.Request+import Web.Twitter.Conduit.Request.Internal+import qualified Web.Twitter.Conduit.Status as Status+import Web.Twitter.Types  import Network.HTTP.Client.MultipartFormData import qualified Data.Text as T import Data.Default+import Data.Time.Calendar (Day) import Data.Aeson  -- $setup--- >>> :set -XOverloadedStrings+-- >>> :set -XOverloadedStrings -XOverloadedLabels -- >>> import Control.Lens -data SearchTweets -- | Returns search query. -- -- You can perform a search query using 'call':@@ -172,78 +185,73 @@ -- -- >>> searchTweets "search text" -- APIRequest "GET" "https://api.twitter.com/1.1/search/tweets.json" [("q","search text")]--- >>> searchTweets "search text" & lang ?~ "ja" & count ?~ 100+-- >>> searchTweets "search text" & #lang ?~ "ja" & #count ?~ 100 -- APIRequest "GET" "https://api.twitter.com/1.1/search/tweets.json" [("count","100"),("lang","ja"),("q","search text")] searchTweets :: T.Text -- ^ search string              -> APIRequest SearchTweets (SearchResult [Status]) searchTweets q = APIRequest "GET" (endpoint ++ "search/tweets.json") [("q", PVString q)]-deriveHasParamInstances ''SearchTweets-    [ "lang"-    , "locale"-    -- , "result_type"-    , "count"-    , "until"-    , "since_id"-    , "max_id"-    , "include_entities"-    -- , "callback"  (needless)+type SearchTweets = '[+      "lang" ':= T.Text+    , "locale" ':= T.Text+    , "count" ':= Integer+    , "until" ':= Day+    , "since_id" ':= Integer+    , "max_id" ':= Integer+    , "include_entities" ':= Bool     ]  -- | Alias of 'searchTweets', for backward compatibility search :: T.Text -- ^ search string        -> APIRequest SearchTweets (SearchResult [Status]) search = searchTweets+{-# DEPRECATED search "Please use Web.Twitter.Conduit.searchTweets" #-} -data DirectMessages -- | Returns query data which asks recent direct messages sent to the authenticating user. -- -- You can perform a query using 'call': -- -- @--- res <- 'call' twInfo mgr '$' 'directMessages' '&' 'count' '?~' 50+-- res <- 'call' twInfo mgr '$' 'directMessages' '&' #count '?~' 50 -- @ -- -- >>> directMessages -- APIRequest "GET" "https://api.twitter.com/1.1/direct_messages/events/list.json" []--- >>> directMessages & count ?~ 50+-- >>> directMessages & #count ?~ 50 -- APIRequest "GET" "https://api.twitter.com/1.1/direct_messages/events/list.json" [("count","50")] directMessages :: APIRequest DirectMessages (WithCursor T.Text EventsCursorKey DirectMessage) directMessages = APIRequest "GET" (endpoint ++ "direct_messages/events/list.json") def-deriveHasParamInstances ''DirectMessages-    [ "count"-    , "include_entities"-    , "skip_status"-    , "full_text"+type DirectMessages = '[+      "count" ':= Integer+    , "include_entities" ':= Bool+    , "skip_status" ':= Bool+    , "full_text" ':= Bool+    , "cursor" ':= T.Text     ]-instance HasCursorParam (APIRequest DirectMessages a) T.Text where-    cursor = wrappedParam "cursor" PVString unPVString -data DirectMessagesSent -- | Returns query data which asks recent direct messages sent by the authenticating user. -- -- You can perform a query using 'call': -- -- @--- res <- 'call' twInfo mgr '$' 'directMessagesSent' '&' 'count' '?~' 100+-- res <- 'call' twInfo mgr '$' 'directMessagesSent' '&' #count '?~' 100 -- @ -- -- >>> directMessagesSent -- APIRequest "GET" "https://api.twitter.com/1.1/direct_messages/sent.json" []--- >>> directMessagesSent & count ?~ 100+-- >>> directMessagesSent & #count ?~ 100 -- APIRequest "GET" "https://api.twitter.com/1.1/direct_messages/sent.json" [("count","100")] directMessagesSent :: APIRequest DirectMessagesSent [DirectMessage] directMessagesSent = APIRequest "GET" (endpoint ++ "direct_messages/sent.json") def-deriveHasParamInstances ''DirectMessagesSent-    [ "since_id"-    , "max_id"-    , "count"-    , "include_entities"-    , "page"-    , "skip_status"-    , "full_text"+type DirectMessagesSent = '[+      "since_id" ':= Integer+    , "max_id" ':= Integer+    , "count" ':= Integer+    , "include_entities" ':= Bool+    , "page" ':= Integer+    , "skip_status" ':= Bool+    , "full_text" ':= Bool     ] -data DirectMessagesShow -- | Returns query data which asks a single direct message, specified by an id parameter. -- -- You can perform a query using 'call':@@ -256,11 +264,10 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/direct_messages/show.json" [("id","1234567890")] directMessagesShow :: StatusId -> APIRequest DirectMessagesShow DirectMessage directMessagesShow sId = APIRequest "GET" (endpoint ++ "direct_messages/show.json") [("id", PVInteger sId)]-deriveHasParamInstances ''DirectMessagesShow-    [ "full_text"+type DirectMessagesShow = '[+      "full_text" ':= Bool     ] -data DirectMessagesDestroy -- | Returns post data which destroys the direct message specified in the required ID parameter. -- -- You can perform a query using 'call':@@ -273,6 +280,7 @@ -- APIRequest "DELETE" "https://api.twitter.com/1.1/direct_messages/events/destroy.json" [("id","1234567890")] directMessagesDestroy :: StatusId -> APIRequest DirectMessagesDestroy NoContent directMessagesDestroy sId = APIRequest "DELETE" (endpoint ++ "direct_messages/events/destroy.json") [("id", PVInteger sId)]+type DirectMessagesDestroy = EmptyParams  newtype DirectMessagesNewResponse = DirectMessagesNewResponse     { directMessageBody :: DirectMessage@@ -281,7 +289,6 @@ instance FromJSON DirectMessagesNewResponse where     parseJSON = withObject "DirectMessagesNewResponse" $ \o -> DirectMessagesNewResponse <$> o .: "event" -data DirectMessagesNew -- | Returns post data which sends a new direct message to the specified user from the authenticating user. -- -- You can perform a post using 'call':@@ -308,10 +315,10 @@                         ]                   ]             ]+type DirectMessagesNew = EmptyParams  type RecipientId = Integer -data FriendshipsNoRetweetsIds -- | Returns a collection of user_ids that the currently authenticated user does not want to receive retweets from. -- -- You can perform a request using 'call':@@ -324,8 +331,8 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/friendships/no_retweets/ids.json" [] friendshipsNoRetweetsIds :: APIRequest FriendshipsNoRetweetsIds [UserId] friendshipsNoRetweetsIds = APIRequest "GET" (endpoint ++ "friendships/no_retweets/ids.json") []+type FriendshipsNoRetweetsIds = EmptyParams -data FriendsIds -- | Returns query data which asks a collection of user IDs for every user the specified user is following. -- -- You can perform a query using 'call':@@ -342,17 +349,15 @@ -- -- >>> friendsIds (ScreenNameParam "thimura") -- APIRequest "GET" "https://api.twitter.com/1.1/friends/ids.json" [("screen_name","thimura")]--- >>> friendsIds (ScreenNameParam "thimura") & count ?~ 5000+-- >>> friendsIds (ScreenNameParam "thimura") & #count ?~ 5000 -- APIRequest "GET" "https://api.twitter.com/1.1/friends/ids.json" [("count","5000"),("screen_name","thimura")] friendsIds :: UserParam -> APIRequest FriendsIds (WithCursor Integer IdsCursorKey UserId) friendsIds q = APIRequest "GET" (endpoint ++ "friends/ids.json") (mkUserParam q)-deriveHasParamInstances ''FriendsIds-    [ "count"+type FriendsIds = '[+      "count" ':= Integer+    , "cursor" ':= Integer     ]-instance HasCursorParam (APIRequest FriendsIds a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data FollowersIds -- | Returns query data which asks a collection of user IDs for every user following the specified user. -- -- You can perform a query using 'call':@@ -369,17 +374,15 @@ -- -- >>> followersIds (ScreenNameParam "thimura") -- APIRequest "GET" "https://api.twitter.com/1.1/followers/ids.json" [("screen_name","thimura")]--- >>> followersIds (ScreenNameParam "thimura") & count ?~ 5000+-- >>> followersIds (ScreenNameParam "thimura") & #count ?~ 5000 -- APIRequest "GET" "https://api.twitter.com/1.1/followers/ids.json" [("count","5000"),("screen_name","thimura")] followersIds :: UserParam -> APIRequest FollowersIds (WithCursor Integer IdsCursorKey UserId) followersIds q = APIRequest "GET" (endpoint ++ "followers/ids.json") (mkUserParam q)-deriveHasParamInstances ''FollowersIds-    [ "count"+type FollowersIds = '[+      "count" ':= Integer+    , "cursor" ':= Integer     ]-instance HasCursorParam (APIRequest FollowersIds a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data FriendshipsIncoming -- | Returns a collection of numeric IDs for every user who has a pending request to follow the authenticating user. -- -- You can perform a request by using 'call':@@ -398,10 +401,10 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/friendships/incoming.json" [] friendshipsIncoming :: APIRequest FriendshipsIncoming (WithCursor Integer IdsCursorKey UserId) friendshipsIncoming = APIRequest "GET" (endpoint ++ "friendships/incoming.json") def-instance HasCursorParam (APIRequest FriendshipsIncoming a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger+type FriendshipsIncoming = '[+      "cursor" ':= Integer+    ] -data FriendshipsOutgoing -- | Returns a collection of numeric IDs for every protected user for whom the authenticating user has a pending follow request. -- -- You can perform a request by using 'call':@@ -420,10 +423,10 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/friendships/outgoing.json" [] friendshipsOutgoing :: APIRequest FriendshipsOutgoing (WithCursor Integer IdsCursorKey UserId) friendshipsOutgoing = APIRequest "GET" (endpoint ++ "friendships/outgoing.json") def-instance HasCursorParam (APIRequest FriendshipsOutgoing a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger+type FriendshipsOutgoing = '[+      "cursor" ':= Integer+    ] -data FriendshipsCreate -- | Returns post data which follows the user specified in the ID parameter. -- -- You can perform request by using 'call':@@ -438,11 +441,10 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/friendships/create.json" [("user_id","69179963")] friendshipsCreate :: UserParam -> APIRequest FriendshipsCreate User friendshipsCreate user = APIRequest "POST" (endpoint ++ "friendships/create.json") (mkUserParam user)-deriveHasParamInstances ''FriendshipsCreate-    [ "follow"+type FriendshipsCreate = '[+      "follow" ':= Bool     ] -data FriendshipsDestroy -- | Returns post data which unfollows the user specified in the ID parameter. -- -- You can perform request by using 'call':@@ -457,8 +459,8 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/friendships/destroy.json" [("user_id","69179963")] friendshipsDestroy :: UserParam -> APIRequest FriendshipsDestroy User friendshipsDestroy user = APIRequest "POST" (endpoint ++ "friendships/destroy.json") (mkUserParam user)+type FriendshipsDestroy = EmptyParams -data FriendsList -- | Returns query data which asks a cursored collection of user objects for every user the specified users is following. -- -- You can perform request by using 'call':@@ -479,15 +481,13 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/friends/list.json" [("user_id","69179963")] friendsList :: UserParam -> APIRequest FriendsList (WithCursor Integer UsersCursorKey User) friendsList q = APIRequest "GET" (endpoint ++ "friends/list.json") (mkUserParam q)-deriveHasParamInstances ''FriendsList-    [ "count"-    , "skip_status"-    , "include_user_entities"+type FriendsList = '[+      "count" ':= Integer+    , "cursor" ':= Integer+    , "skip_status" ':= Bool+    , "include_user_entities" ':= Bool     ]-instance HasCursorParam (APIRequest FriendsList a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data FollowersList -- | Returns query data which asks a cursored collection of user objects for users following the specified user. -- -- You can perform request by using 'call':@@ -508,15 +508,13 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/followers/list.json" [("user_id","69179963")] followersList :: UserParam -> APIRequest FollowersList (WithCursor Integer UsersCursorKey User) followersList q = APIRequest "GET" (endpoint ++ "followers/list.json") (mkUserParam q)-deriveHasParamInstances ''FollowersList-    [ "count"-    , "skip_status"-    , "include_user_entities"+type FollowersList = '[+      "count" ':= Integer+    , "cursor" ':= Integer+    , "skip_status" ':= Bool+    , "include_user_entities" ':= Bool     ]-instance HasCursorParam (APIRequest FollowersList a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data AccountVerifyCredentials -- | Returns query data asks that the credential is valid. -- -- You can perform request by using 'call':@@ -529,37 +527,35 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/account/verify_credentials.json" [] accountVerifyCredentials :: APIRequest AccountVerifyCredentials User accountVerifyCredentials = APIRequest "GET" (endpoint ++ "account/verify_credentials.json") []-deriveHasParamInstances ''AccountVerifyCredentials-    [ "include_entities"-    , "skip_status"-    , "include_email"+type AccountVerifyCredentials = '[+      "include_entities" ':= Bool+    , "skip_status" ':= Bool+    , "include_email" ':= Bool     ] -data AccountUpdateProfile -- | Returns user object with updated fields. -- Note that while no specific parameter is required, you need to provide at least one parameter before executing the query. -- -- You can perform request by using 'call': -- -- @--- res <- 'call' twInfo mgr '$' 'accountUpdateProfile' & 'Web.Twitter.Conduit.Parameters.url' ?~ \"http://www.example.com\"+-- res <- 'call' twInfo mgr '$' 'accountUpdateProfile' & #url ?~ \"http://www.example.com\" -- @ ----- >>> accountUpdateProfile & url ?~ "http://www.example.com"+-- >>> accountUpdateProfile & #url ?~ "http://www.example.com" -- APIRequest "POST" "https://api.twitter.com/1.1/account/update_profile.json" [("url","http://www.example.com")] accountUpdateProfile :: APIRequest AccountUpdateProfile User accountUpdateProfile = APIRequest "POST" (endpoint ++ "account/update_profile.json") []-deriveHasParamInstances ''AccountUpdateProfile-    [ "include_entities"-    , "skip_status"-    , "name"-    , "url"-    , "location"-    , "description"-    , "profile_link_color"+type AccountUpdateProfile = '[+      "include_entities" ':= Bool+    , "skip_status" ':= Bool+    , "name" ':= T.Text+    , "url" ':= URIString+    , "location" ':= T.Text+    , "description" ':= T.Text+    , "profile_link_color" ':= T.Text     ] -data UsersLookup -- | Returns query data asks user objects. -- -- You can perform request by using 'call':@@ -572,11 +568,10 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/users/lookup.json" [("screen_name","thimura,twitterapi")] usersLookup :: UserListParam -> APIRequest UsersLookup [User] usersLookup q = APIRequest "GET" (endpoint ++ "users/lookup.json") (mkUserListParam q)-deriveHasParamInstances ''UsersLookup-    [ "include_entities"+type UsersLookup = '[+      "include_entities" ':= Bool     ] -data UsersShow -- | Returns query data asks the user specified by user id or screen name parameter. -- -- You can perform request by using 'call':@@ -589,11 +584,10 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/users/show.json" [("screen_name","thimura")] usersShow :: UserParam -> APIRequest UsersShow User usersShow q = APIRequest "GET" (endpoint ++ "users/show.json") (mkUserParam q)-deriveHasParamInstances ''UsersShow-    [ "include_entities"+type UsersShow = '[+      "include_entities" ':= Bool     ] -data FavoritesList -- | Returns the 20 most recent Tweets favorited by the specified user. -- -- You can perform request by using 'call':@@ -613,14 +607,13 @@   where     mkParam Nothing = []     mkParam (Just usr) = mkUserParam usr-deriveHasParamInstances ''FavoritesList-    [ "count"-    , "since_id"-    , "max_id"-    , "include_entities"+type FavoritesList = '[+      "count" ':= Integer+    , "since_id" ':= Integer+    , "max_id" ':= Integer+    , "include_entities" ':= Bool     ] -data FavoritesCreate -- | Returns post data which favorites the status specified in the ID parameter as the authenticating user. -- -- You can perform request by using 'call':@@ -633,11 +626,10 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/favorites/create.json" [("id","1234567890")] favoritesCreate :: StatusId -> APIRequest FavoritesCreate Status favoritesCreate sid = APIRequest "POST" (endpoint ++ "favorites/create.json") [("id", PVInteger sid)]-deriveHasParamInstances ''FavoritesCreate-    [ "include_entities"+type FavoritesCreate = '[+      "include_entities" ':= Bool     ] -data FavoritesDestroy -- | Returns post data unfavorites the status specified in the ID paramter as the authenticating user. -- -- You can perform request by using 'call':@@ -650,11 +642,10 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/favorites/destroy.json" [("id","1234567890")] favoritesDestroy :: StatusId -> APIRequest FavoritesDestroy Status favoritesDestroy sid = APIRequest "POST" (endpoint ++ "favorites/destroy.json") [("id", PVInteger sid)]-deriveHasParamInstances ''FavoritesDestroy-    [ "include_entities"+type FavoritesDestroy = '[+      "include_entities" ':= Bool     ] -data ListsStatuses -- | Returns the query parameter which fetches a timeline of tweets authored by members of the specified list. -- -- You can perform request by using 'call':@@ -665,7 +656,7 @@ -- -- If you need more statuses, you can obtain those by using 'sourceWithMaxId': -- @--- res <- sourceWithMaxId ('listsStatuses' ('ListNameParam' "thimura/haskell") & count ?~ 200) $$ CL.take 1000+-- res <- sourceWithMaxId ('listsStatuses' ('ListNameParam' "thimura/haskell") & #count ?~ 200) $$ CL.take 1000 -- @ -- -- >>> listsStatuses (ListNameParam "thimura/haskell")@@ -674,15 +665,14 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/statuses.json" [("list_id","20849097")] listsStatuses :: ListParam -> APIRequest ListsStatuses [Status] listsStatuses q = APIRequest "GET" (endpoint ++ "lists/statuses.json") (mkListParam q)-deriveHasParamInstances ''ListsStatuses-    [ "since_id"-    , "max_id"-    , "count"-    , "include_entities"-    , "include_rts"+type ListsStatuses = '[+      "since_id" ':= Integer+    , "max_id" ':= Integer+    , "count" ':= Integer+    , "include_entities" ':= Bool+    , "include_rts" ':= Bool     ] -data ListsMembersDestroy -- | Returns the post parameter which removes the specified member from the list. -- -- You can perform request by using 'call':@@ -697,8 +687,8 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/lists/members/destroy.json" [("list_id","20849097"),("user_id","69179963")] listsMembersDestroy :: ListParam -> UserParam -> APIRequest ListsMembersDestroy List listsMembersDestroy list user = APIRequest "POST" (endpoint ++ "lists/members/destroy.json") (mkListParam list ++ mkUserParam user)+type ListsMembersDestroy = EmptyParams -data ListsMemberships -- | Returns the request parameters which asks the lists the specified user has been added to. -- If 'UserParam' are not provided, the memberships for the authenticating user are returned. --@@ -716,13 +706,11 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/memberships.json" [("user_id","69179963")] listsMemberships :: Maybe UserParam -> APIRequest ListsMemberships (WithCursor Integer ListsCursorKey List) listsMemberships q = APIRequest "GET" (endpoint ++ "lists/memberships.json") $ maybe [] mkUserParam q-deriveHasParamInstances ''ListsMemberships-    [ "count"+type ListsMemberships = '[+      "count" ':= Integer+    , "cursor" ':= Integer     ]-instance HasCursorParam (APIRequest ListsMemberships a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data ListsSubscribers -- | Returns the request parameter which asks the subscribers of the specified list. -- -- You can perform request by using 'call':@@ -737,14 +725,12 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/subscribers.json" [("list_id","20849097")] listsSubscribers :: ListParam -> APIRequest ListsSubscribers (WithCursor Integer UsersCursorKey User) listsSubscribers q = APIRequest "GET" (endpoint ++ "lists/subscribers.json") (mkListParam q)-deriveHasParamInstances ''ListsSubscribers-    [ "count"-    , "skip_status"+type ListsSubscribers = '[+      "count" ':= Integer+    , "cursor" ':= Integer+    , "skip_status" ':= Bool     ]-instance HasCursorParam (APIRequest ListsSubscribers a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data ListsSubscriptions -- | Returns the request parameter which obtains a collection of the lists the specified user is subscribed to. -- -- You can perform request by using 'call':@@ -761,13 +747,11 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/subscriptions.json" [("user_id","69179963")] listsSubscriptions :: Maybe UserParam -> APIRequest ListsSubscriptions (WithCursor Integer ListsCursorKey List) listsSubscriptions q = APIRequest "GET" (endpoint ++ "lists/subscriptions.json") $ maybe [] mkUserParam q-deriveHasParamInstances ''ListsSubscriptions-    [ "count"+type ListsSubscriptions = '[+      "count" ':= Integer+    , "cursor" ':= Integer     ]-instance HasCursorParam (APIRequest ListsSubscriptions a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data ListsOwnerships -- | Returns the request parameter which asks the lists owned by the specified Twitter user. -- -- You can perform request by using 'call':@@ -784,13 +768,11 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/ownerships.json" [("user_id","69179963")] listsOwnerships :: Maybe UserParam -> APIRequest ListsOwnerships (WithCursor Integer ListsCursorKey List) listsOwnerships q = APIRequest "GET" (endpoint ++ "lists/ownerships.json") $ maybe [] mkUserParam q-deriveHasParamInstances ''ListsOwnerships-    [ "count"+type ListsOwnerships = '[+      "count" ':= Integer+    , "cursor" ':= Integer     ]-instance HasCursorParam (APIRequest ListsOwnerships a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data ListsMembersCreateAll -- | Adds multiple members to a list. -- -- You can perform request by using 'call':@@ -805,8 +787,8 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/lists/members/create_all.json" [("list_id","20849097"),("user_id","69179963,6253282")] listsMembersCreateAll :: ListParam -> UserListParam -> APIRequest ListsMembersCreateAll List listsMembersCreateAll list users = APIRequest "POST" (endpoint ++ "lists/members/create_all.json") (mkListParam list ++ mkUserListParam users)+type ListsMembersCreateAll = EmptyParams -data ListsMembersDestroyAll -- | Adds multiple members to a list. -- -- You can perform request by using 'call':@@ -821,8 +803,8 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/lists/members/destroy_all.json" [("list_id","20849097"),("user_id","69179963,6253282")] listsMembersDestroyAll :: ListParam -> UserListParam -> APIRequest ListsMembersDestroyAll List listsMembersDestroyAll list users = APIRequest "POST" (endpoint ++ "lists/members/destroy_all.json") (mkListParam list ++ mkUserListParam users)+type ListsMembersDestroyAll = EmptyParams -data ListsMembers -- | Returns query data asks the members of the specified list. -- -- You can perform request by using 'call':@@ -837,14 +819,12 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/members.json" [("list_id","20849097")] listsMembers :: ListParam -> APIRequest ListsMembers (WithCursor Integer UsersCursorKey User) listsMembers q = APIRequest "GET" (endpoint ++ "lists/members.json") (mkListParam q)-deriveHasParamInstances ''ListsMembers-    [ "count"-    , "skip_status"+type ListsMembers = '[+      "count" ':= Integer+    , "cursor" ':= Integer+    , "skip_status" ':= Bool     ]-instance HasCursorParam (APIRequest ListsMembers a) Integer where-    cursor = wrappedParam "cursor" PVInteger unPVInteger -data ListsMembersCreate -- | Returns the post parameter which adds a member to a list. -- -- You can perform request by using 'call':@@ -859,8 +839,8 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/lists/members/create.json" [("list_id","20849097"),("user_id","69179963")] listsMembersCreate :: ListParam -> UserParam -> APIRequest ListsMembersCreate List listsMembersCreate list user = APIRequest "POST" (endpoint ++ "lists/members/create.json") (mkListParam list ++ mkUserParam user)+type ListsMembersCreate = EmptyParams -data ListsDestroy -- | Returns the post parameter which deletes the specified list. -- -- You can perform request by using 'call':@@ -875,8 +855,8 @@ -- APIRequest "POST" "https://api.twitter.com/1.1/lists/destroy.json" [("list_id","20849097")] listsDestroy :: ListParam -> APIRequest ListsDestroy List listsDestroy list = APIRequest "POST" (endpoint ++ "lists/destroy.json") (mkListParam list)+type ListsDestroy = EmptyParams -data ListsUpdate -- | Returns the post parameter which updates the specified list. -- -- You can perform request by using 'call':@@ -897,8 +877,8 @@     p' = maybe id (\d -> (("description", PVString d):)) description p     mode True = "public"     mode False = "private"+type ListsUpdate = EmptyParams -data ListsCreate -- | Returns the post parameter which creates a new list for the authenticated user. -- -- You can perform request by using 'call':@@ -923,8 +903,8 @@     p' = maybe id (\d -> (("description", PVString d):)) description p     mode True = "public"     mode False = "private"+type ListsCreate = EmptyParams -data ListsShow -- | Returns the request parameter which asks the specified list. -- -- You can perform request by using 'call':@@ -939,8 +919,8 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/lists/show.json" [("list_id","20849097")] listsShow :: ListParam -> APIRequest ListsShow List listsShow q = APIRequest "GET" (endpoint ++ "lists/show.json") (mkListParam q)+type ListsShow = EmptyParams -data MediaUpload -- | Upload media and returns the media data. -- -- You can update your status with multiple media by calling 'mediaUpload' and 'update' successively.@@ -955,7 +935,7 @@ -- and then collect the resulting media IDs and update your status by calling 'update': -- -- @--- 'call' twInfo mgr '$' 'update' \"Hello World\" '&' 'mediaIds' '?~' ['mediaId' res1, 'mediaId' res2]+-- 'call' twInfo mgr '$' 'update' \"Hello World\" '&' #media_ids '?~' ['uploadedMediaId' res1, 'uploadedMediaId' res2] -- @ -- -- See: <https://dev.twitter.com/docs/api/multiple-media-extended-entities>@@ -970,3 +950,27 @@     uri = "https://upload.twitter.com/1.1/media/upload.json"     mediaBody (MediaFromFile fp) = partFileSource "media" fp     mediaBody (MediaRequestBody filename filebody) = partFileRequestBody "media" filename filebody+type MediaUpload = EmptyParams++statusesMentionsTimeline :: APIRequest Status.StatusesMentionsTimeline [Status]+statusesMentionsTimeline = Status.mentionsTimeline+statusesUserTimeline :: UserParam -> APIRequest Status.StatusesUserTimeline [Status]+statusesUserTimeline = Status.userTimeline+statusesHomeTimeline :: APIRequest Status.StatusesHomeTimeline [Status]+statusesHomeTimeline = Status.homeTimeline+statusesRetweetsOfMe :: APIRequest Status.StatusesRetweetsOfMe [Status]+statusesRetweetsOfMe = Status.retweetsOfMe+statusesRetweetsId :: StatusId -> APIRequest Status.StatusesRetweetsId [RetweetedStatus]+statusesRetweetsId = Status.retweetsId+statusesShowId :: StatusId -> APIRequest Status.StatusesShowId Status+statusesShowId = Status.showId+statusesDestroyId :: StatusId -> APIRequest Status.StatusesDestroyId Status+statusesDestroyId = Status.destroyId+statusesUpdate :: T.Text -> APIRequest Status.StatusesUpdate Status+statusesUpdate = Status.update+statusesRetweetId :: StatusId -> APIRequest Status.StatusesRetweetId RetweetedStatus+statusesRetweetId = Status.retweetId+statusesUpdateWithMedia :: T.Text -> MediaData -> APIRequest Status.StatusesUpdateWithMedia Status+statusesUpdateWithMedia = Status.updateWithMedia+statusesLookup :: [StatusId] -> APIRequest Status.StatusesLookup [Status]+statusesLookup = Status.lookup
Web/Twitter/Conduit/Base.hs view
@@ -1,8 +1,12 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-}  module Web.Twitter.Conduit.Base@@ -27,33 +31,35 @@        ) where  import Web.Twitter.Conduit.Cursor-import Web.Twitter.Conduit.Parameters hiding (url) import Web.Twitter.Conduit.Request+import Web.Twitter.Conduit.Request.Internal import Web.Twitter.Conduit.Response import Web.Twitter.Conduit.Types import Web.Twitter.Types.Lens  import Control.Lens import Control.Monad (void)-import Control.Monad.Base import Control.Monad.Catch (MonadThrow (..)) import Control.Monad.IO.Class import Control.Monad.Trans.Resource (MonadResource, ResourceT, runResourceT) import Data.Aeson import Data.Aeson.Lens import Data.ByteString (ByteString)+import Data.Coerce import qualified Data.Conduit as C import qualified Data.Conduit.Attoparsec as CA import qualified Data.Conduit.List as CL import qualified Data.Map as M-import Data.Monoid import qualified Data.Text.Encoding as T import Network.HTTP.Client.MultipartFormData import qualified Network.HTTP.Conduit as HTTP import qualified Network.HTTP.Types as HT-import Unsafe.Coerce import Web.Authenticate.OAuth (signOAuth) +#if __GLASGOW_HASKELL__ < 804+import Data.Monoid+#endif+ makeRequest :: APIRequest apiName responseType             -> IO HTTP.Request makeRequest (APIRequest m u pa) = makeRequest' m u (makeSimpleQuery pa)@@ -75,28 +81,16 @@              -> HT.SimpleQuery -- ^ Query              -> IO HTTP.Request makeRequest' m url query = do-#if MIN_VERSION_http_client(0,4,30)     req <- HTTP.parseRequest url-#else-    req <- HTTP.parseUrl url-#endif     let addParams =             if m == "POST"             then HTTP.urlEncodedBody query             else \r -> r { HTTP.queryString = HT.renderSimpleQuery False query }-    return $ addParams $ req { HTTP.method = m-#if !MIN_VERSION_http_client(0,4,30)-                             , HTTP.checkStatus = \_ _ _ -> Nothing-#endif-                             }+    return $ addParams $ req { HTTP.method = m }  class ResponseBodyType a where     parseResponseBody ::-#if MIN_VERSION_http_conduit(2,3,0)            Response (C.ConduitM () ByteString (ResourceT IO) ())-#else-           Response (C.ResumableSource m ByteString)-#endif         -> ResourceT IO (Response a)  type NoContent = ()@@ -115,11 +109,7 @@             => TWInfo             -> HTTP.Manager             -> HTTP.Request-#if MIN_VERSION_http_conduit(2,3,0)             -> m (Response (C.ConduitM () ByteString m ()))-#else-            -> m (Response (C.ResumableSource m ByteString))-#endif getResponse TWInfo{..} mgr req = do     signedReq <- signOAuth (twOAuth twToken) (twCredential twToken) $ req { HTTP.proxy = twProxy }     res <- HTTP.http signedReq mgr@@ -133,19 +123,11 @@ endpoint = "https://api.twitter.com/1.1/"  getValue ::-#if MIN_VERSION_http_conduit(2,3,0)             Response (C.ConduitM () ByteString (ResourceT IO) ())-#else-            Response (C.ResumableSource (ResourceT IO) ByteString)-#endif          -> ResourceT IO (Response Value) getValue res = do     value <--#if MIN_VERSION_http_conduit(2,3,0)       C.runConduit $ responseBody res C..| sinkJSON-#else-      responseBody res C.$$+- sinkJSON-#endif     return $ res { responseBody = value }  checkResponse :: Response Value@@ -166,11 +148,7 @@     sci = HT.statusCode responseStatus  getValueOrThrow :: FromJSON a-#if MIN_VERSION_http_conduit(2,3,0)                 => Response (C.ConduitM () ByteString (ResourceT IO) ())-#else-                => Response (C.ResumableSource (ResourceT IO) ByteString)-#endif                 -> ResourceT IO (Response a) getValueOrThrow res = do     res' <- getValue res@@ -255,12 +233,12 @@ sourceWithMaxId :: ( MonadIO m                    , FromJSON responseType                    , AsStatus responseType-                   , HasMaxIdParam (APIRequest apiName [responseType])+                   , HasParam "max_id" Integer supports                    )                 => TWInfo -- ^ Twitter Setting                 -> HTTP.Manager-                -> APIRequest apiName [responseType]-                -> C.Source m responseType+                -> APIRequest supports [responseType]+                -> C.ConduitT () responseType m () sourceWithMaxId info mgr = loop   where     loop req = do@@ -268,7 +246,7 @@         case getMinId res of             Just mid -> do                 CL.sourceList res-                loop $ req & maxId ?~ mid - 1+                loop $ req & #max_id ?~ mid - 1             Nothing -> CL.sourceList res     getMinId = minimumOf (traverse . status_id) @@ -278,22 +256,21 @@ -- -- This function cooperate with instances of 'HasMaxIdParam'. sourceWithMaxId' :: ( MonadIO m-                    , HasMaxIdParam (APIRequest apiName [responseType])+                    , HasParam "max_id" Integer supports                     )                  => TWInfo -- ^ Twitter Setting                  -> HTTP.Manager-                 -> APIRequest apiName [responseType]-                 -> C.Source m Value+                 -> APIRequest supports [responseType]+                 -> C.ConduitT () Value m () sourceWithMaxId' info mgr = loop   where     loop req = do-        res <- liftIO $ call' info mgr req-        case getMinId res of+        (res :: [Value]) <- liftIO $ call' info mgr req+        case minimumOf (traverse . key "id" . _Integer) res of             Just mid -> do                 CL.sourceList res-                loop $ req & maxId ?~ mid - 1+                loop $ req & #max_id ?~ mid - 1             Nothing -> CL.sourceList res-    getMinId = minimumOf (traverse . key "id" . _Integer)  -- | A wrapper function to perform multiple API request with changing @cursor@ parameter. --@@ -301,18 +278,18 @@ sourceWithCursor :: ( MonadIO m                     , FromJSON responseType                     , CursorKey ck-                    , HasCursorParam (APIRequest apiName (WithCursor Integer ck responseType)) Integer+                    , HasParam "cursor" Integer supports                     )                  => TWInfo -- ^ Twitter Setting                  -> HTTP.Manager-                 -> APIRequest apiName (WithCursor Integer ck responseType)-                 -> C.Source m responseType+                 -> APIRequest supports (WithCursor Integer ck responseType)+                 -> C.ConduitT () responseType m () sourceWithCursor info mgr req = loop (Just (-1))   where     loop Nothing = CL.sourceNull     loop (Just 0) = CL.sourceNull     loop (Just cur) = do-        res <- liftIO $ call info mgr $ req & cursor ?~ cur+        res <- liftIO $ call info mgr $ req & #cursor ?~ cur         CL.sourceList $ contents res         loop $ nextCursor res @@ -323,21 +300,21 @@ -- This function cooperate with instances of 'HasCursorParam'. sourceWithCursor' :: ( MonadIO m                      , CursorKey ck-                     , HasCursorParam (APIRequest apiName (WithCursor Integer ck responseType)) Integer+                     , HasParam "cursor" Integer supports                      )                   => TWInfo -- ^ Twitter Setting                   -> HTTP.Manager-                  -> APIRequest apiName (WithCursor Integer ck responseType)-                  -> C.Source m Value+                  -> APIRequest supports (WithCursor Integer ck responseType)+                  -> C.ConduitT () Value m () sourceWithCursor' info mgr req = loop (Just (-1))   where     relax :: APIRequest apiName (WithCursor Integer ck responseType)           -> APIRequest apiName (WithCursor Integer ck Value)-    relax = unsafeCoerce+    relax = coerce     loop Nothing = CL.sourceNull     loop (Just 0) = CL.sourceNull     loop (Just cur) = do-        res <- liftIO $ call info mgr $ relax $ req & cursor ?~ cur+        res <- liftIO $ call info mgr $ relax $ req & #cursor ?~ cur         CL.sourceList $ contents res         loop $ nextCursor res @@ -347,8 +324,8 @@                           )                        => TWInfo -- ^ Twitter Setting                        -> HTTP.Manager-                       -> APIRequest apiName (SearchResult [responseType])-                       -> m (SearchResult (C.Source m responseType))+                       -> APIRequest supports (SearchResult [responseType])+                       -> m (SearchResult (C.ConduitT () responseType m ())) sourceWithSearchResult info mgr req = do     res <- liftIO $ call info mgr req     let body = CL.sourceList (res ^. searchResultStatuses) <>@@ -369,8 +346,8 @@                            )                         => TWInfo -- ^ Twitter Setting                         -> HTTP.Manager-                        -> APIRequest apiName (SearchResult [responseType])-                        -> m (SearchResult (C.Source m Value))+                        -> APIRequest supports (SearchResult [responseType])+                        -> m (SearchResult (C.ConduitT () Value m ())) sourceWithSearchResult' info mgr req = do     res <- liftIO $ call info mgr $ relax req     let body = CL.sourceList (res ^. searchResultStatuses) <>@@ -380,7 +357,7 @@     origQueryMap = req ^. params . to M.fromList     relax :: APIRequest apiName (SearchResult [responseType])           -> APIRequest apiName (SearchResult [Value])-    relax = unsafeCoerce+    relax = coerce     loop Nothing = CL.sourceNull     loop (Just nextResultsStr) = do         let nextResults = nextResultsStr & HT.parseSimpleQuery . T.encodeUtf8 & traversed . _2 %~ (PVString . T.decodeUtf8)@@ -390,12 +367,12 @@         loop $ res ^. searchResultSearchMetadata . searchMetadataNextResults  sinkJSON :: ( MonadThrow m-            ) => C.Consumer ByteString m Value+            ) => C.ConduitT ByteString o m Value sinkJSON = CA.sinkParser json  sinkFromJSON :: ( FromJSON a                 , MonadThrow m-                ) => C.Consumer ByteString m a+                ) => C.ConduitT ByteString o m a sinkFromJSON = do     v <- sinkJSON     case fromJSON v of
Web/Twitter/Conduit/Cursor.hs view
@@ -1,7 +1,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE CPP #-}  module Web.Twitter.Conduit.Cursor        ( CursorKey (..)@@ -12,10 +11,6 @@        , WithCursor (..)        ) where -#if __GLASGOW_HASKELL__ < 710-import Control.Applicative-import Data.Monoid-#endif import Data.Aeson import Data.Text (Text) import Web.Twitter.Types (checkError)@@ -45,7 +40,6 @@ instance CursorKey EventsCursorKey where     cursorKey = const "events" -#if __GLASGOW_HASKELL__ >= 706 -- | A wrapper for API responses which have "next_cursor" field. -- -- The first type parameter of 'WithCursor' specifies the field name of contents.@@ -67,7 +61,6 @@ -- Just "hogehoge" -- >>> contents res -- [1000]-#endif data WithCursor cursorType cursorKey wrapped = WithCursor     { previousCursor :: Maybe cursorType     , nextCursor :: Maybe cursorType
Web/Twitter/Conduit/Lens.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE RankNTypes #-}  module Web.Twitter.Conduit.Lens@@ -27,9 +26,6 @@        , TT.ListsCursorKey        ) where -#if __GLASGOW_HASKELL__ < 710-import Control.Applicative-#endif import Control.Lens import Data.Text (Text) import Network.HTTP.Types (Status, ResponseHeaders)
Web/Twitter/Conduit/Parameters.hs view
@@ -1,51 +1,7 @@-{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}  module Web.Twitter.Conduit.Parameters-       ( Parameters(..)-       , PV(..)-       , APIQuery-       , APIQueryItem-       , makeSimpleQuery--       , HasSinceIdParam (..)-       , HasCountParam (..)-       , HasMaxIdParam (..)-       , HasPageParam (..)-       , HasCursorParam (..)-       , HasTrimUserParam (..)-       , HasExcludeRepliesParam (..)-       , HasContributorDetailsParam (..)-       , HasIncludeEntitiesParam (..)-       , HasIncludeEmailParam (..)-       , HasIncludeExtAltTextParam (..)-       , HasIncludeUserEntitiesParam (..)-       , HasIncludeRtsParam (..)-       , HasIncludeMyRetweetParam (..)-       , HasInReplyToStatusIdParam (..)-       , HasDisplayCoordinatesParam (..)-       , HasPossiblySensitiveParam (..)-       , HasLangParam (..)-       , HasLanguageParam (..)-       , HasLocaleParam (..)-       , HasFilterLevelParam (..)-       , HasStallWarningsParam (..)-       , HasRepliesParam (..)-       , HasUntilParam (..)-       , HasSkipStatusParam (..)-       , HasFollowParam (..)-       , HasMapParam (..)-       , HasMediaIdsParam (..)-       , HasDescriptionParam (..)-       , HasNameParam (..)-       , HasProfileLinkColorParam (..)-       , HasLocationParam (..)-       , HasUrlParam (..)-       , HasFullTextParam (..)-       , HasWithParam (..)--       , UserParam(..)+       ( UserParam(..)        , UserListParam(..)        , ListParam(..)        , MediaData(..)@@ -54,13 +10,14 @@        , mkListParam        ) where -import Control.Lens import qualified Data.Text as T import Network.HTTP.Client (RequestBody)-import Web.Twitter.Conduit.Parameters.TH-import Web.Twitter.Conduit.Request+import Web.Twitter.Conduit.Request.Internal (APIQuery, PV(..)) import Web.Twitter.Types +-- $setup+-- >>> import Web.Twitter.Conduit.Request.Internal+ data UserParam = UserIdParam UserId | ScreenNameParam String                deriving (Show, Eq) data UserListParam = UserIdListParam [UserId] | ScreenNameListParam [String]@@ -70,44 +27,6 @@ data MediaData = MediaFromFile FilePath                | MediaRequestBody FilePath RequestBody -defineHasParamClassInteger "count"-defineHasParamClassInteger "since_id"-defineHasParamClassInteger "max_id"-defineHasParamClassInteger "page"-defineHasParamClassBool "trim_user"-defineHasParamClassBool "exclude_replies"-defineHasParamClassBool "contributor_details"-defineHasParamClassBool "include_entities"-defineHasParamClassBool "include_email"-defineHasParamClassBool "include_user_entities"-defineHasParamClassBool "include_rts"-defineHasParamClassBool "include_my_retweet"-defineHasParamClassBool "include_ext_alt_text"-defineHasParamClassInteger "in_reply_to_status_id"-defineHasParamClassBool "display_coordinates"-defineHasParamClassBool "possibly_sensitive"-defineHasParamClassString "lang"-defineHasParamClassString "language"-defineHasParamClassString "locale"-defineHasParamClassString "filter_level"-defineHasParamClassBool "stall_warnings"-defineHasParamClassString "replies"-defineHasParamClassDay "until"-defineHasParamClassBool "skip_status"-defineHasParamClassBool "follow"-defineHasParamClassBool "map"-defineHasParamClassIntegerArray "media_ids"-defineHasParamClassString "description"-defineHasParamClassString "name"-defineHasParamClassString "profile_link_color"-defineHasParamClassString "location"-defineHasParamClassURI "url"-defineHasParamClassBool "full_text"-defineHasParamClassString "with"--class Parameters p => HasCursorParam p a | p -> a where-    cursor :: Lens' p (Maybe a)- -- | converts 'UserParam' to 'HT.SimpleQuery'. -- -- >>> makeSimpleQuery . mkUserParam $ UserIdParam 123456@@ -128,7 +47,7 @@ -- [("screen_name","thimura,NikaidouShinku")] mkUserListParam :: UserListParam -> APIQuery mkUserListParam (UserIdListParam uids) =  [("user_id", PVIntegerArray uids)]-mkUserListParam (ScreenNameListParam sns) = [("screen_name", PVStringArray (Prelude.map T.pack sns))]+mkUserListParam (ScreenNameListParam sns) = [("screen_name", PVStringArray (map T.pack sns))]  -- | converts 'ListParam' to 'HT.SimpleQuery'. --
− Web/Twitter/Conduit/Parameters/TH.hs
@@ -1,122 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE TemplateHaskell #-}--module Web.Twitter.Conduit.Parameters.TH-       ( defineHasParamClass-       , defineHasParamClass'-       , defineHasParamClassBool-       , defineHasParamClassDay-       , defineHasParamClassInteger-       , defineHasParamClassIntegerArray-       , defineHasParamClassString-       , defineHasParamClassStringArray-       , defineHasParamClassURI-       , deriveHasParamInstances-       , wrappedParam-       ) where--import Web.Twitter.Conduit.Request-import Language.Haskell.TH-import Control.Lens-import qualified Data.ByteString as S-import Data.Char-import Data.Text (Text)-import Data.Time.Calendar (Day)-import Web.Twitter.Types--snakeToLowerCamel :: String -> String-snakeToLowerCamel [] = []-snakeToLowerCamel "_" = []-snakeToLowerCamel ('_':x:xs) = toUpper x : snakeToLowerCamel xs-snakeToLowerCamel str = f ++ snakeToLowerCamel next-  where (f, next) = span (/= '_') str--snakeToUpperCamel :: String -> String-snakeToUpperCamel = upcase . snakeToLowerCamel-  where-    upcase [] = []-    upcase (x:xs) = toUpper x : xs--paramNameToClassName :: String -> String-paramNameToClassName paramName = "Has" ++ snakeToUpperCamel paramName ++ "Param"--wrappedParam :: Parameters p-             => S.ByteString-             -> (a -> PV)-             -> (PV -> a)-             -> Lens' p (Maybe a)-wrappedParam key wrap unwrap = lens getter setter-   where-     getter = preview $ params . to (lookup key) . _Just . to unwrap-     setter = flip (over params . replace key)-     replace k (Just v) = ((k, wrap v):) . dropAssoc k-     replace k Nothing = dropAssoc k-     dropAssoc k = filter ((/= k) . fst)--defineHasParamClass :: Name -- wrap function-                    -> Name -- unwrap function-                    -> TypeQ -- wrapped type-                    -> String -- ^ parameter name-                    -> Q [Dec]-defineHasParamClass wrap unwrap typ paramName =-    defineHasParamClass' cNameS fNameS wrap unwrap typ paramName -  where-    cNameS = paramNameToClassName paramName-    fNameS = snakeToLowerCamel paramName--defineHasParamClass' :: String -> String -> Name -> Name -> TypeQ -> String -> Q [Dec]-defineHasParamClass' cNameS fNameS wrap unwrap typ paramName = do-    a <- newName "a"-    cName <- newName cNameS-    fName <- newName fNameS-#if MIN_VERSION_template_haskell(2, 10, 0)-    let cCxt = cxt [conT ''Parameters `appT` varT a]-#else-    let cCxt = cxt [classP ''Parameters [varT a]]-#endif-    let tySig = sigD fName (appT (appT (conT ''Lens') (varT a)) (appT (conT ''Maybe) typ))-        valDef = valD (varP fName) (normalB (appE (appE (appE (varE 'wrappedParam) (litE (stringL paramName))) (conE wrap)) (varE unwrap))) []-    dec <- classD cCxt cName [PlainTV a] [] [tySig, valDef]-    return [dec]--deriveHasParamInstances :: Name -- ^ target data type name-                        -> [String] -- ^ parameter name-                        -> Q [Dec]-deriveHasParamInstances typName paramNameList =-    mapM mkInstance cNameStrList-  where-    cNameStrList = map paramNameToClassName paramNameList-    mkInstance cn = instanceD (return []) (appT (conT (mkName cn)) targetType) []-    targetType = do-        a <- newName "a"-        appT (appT (conT (mkName "APIRequest")) (conT typName)) (varT a)--defineHasParamClassInteger :: String -> Q [Dec]-defineHasParamClassInteger =-    defineHasParamClass 'PVInteger 'unPVInteger [t|Integer|]--defineHasParamClassBool :: String -> Q [Dec]-defineHasParamClassBool =-    defineHasParamClass 'PVBool 'unPVBool [t|Bool|]--defineHasParamClassString :: String -> Q [Dec]-defineHasParamClassString =-    defineHasParamClass 'PVString 'unPVString [t|Text|]--defineHasParamClassURI :: String -> Q [Dec]-defineHasParamClassURI =-    defineHasParamClass 'PVString 'unPVString [t|URIString|]--defineHasParamClassIntegerArray :: String -> Q [Dec]-defineHasParamClassIntegerArray =-    defineHasParamClass 'PVIntegerArray 'unPVIntegerArray [t|[Integer]|]--defineHasParamClassStringArray :: String -> Q [Dec]-defineHasParamClassStringArray =-    defineHasParamClass 'PVStringArray 'unPVStringArray [t|[Text]|]--defineHasParamClassDay :: String -> Q [Dec]-defineHasParamClassDay =-    defineHasParamClass 'PVDay 'unPVDay [t|Day|]
+ Web/Twitter/Conduit/ParametersDeprecated.hs view
@@ -0,0 +1,113 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeFamilies #-}++module Web.Twitter.Conduit.ParametersDeprecated where++import Data.Text (Text)+import Web.Twitter.Types+import Data.Time.Calendar (Day)+import Web.Twitter.Conduit.Request.Internal+import Control.Lens++count :: (Parameters p, HasParam "count" Integer (SupportParameters p)) => Lens' p (Maybe Integer)+count = rawParam "count"++sinceId :: (Parameters p, HasParam "since_id" Integer (SupportParameters p)) => Lens' p (Maybe Integer)+sinceId = rawParam "since_id"++maxId :: (Parameters p, HasParam "max_id" Integer (SupportParameters p)) => Lens' p (Maybe Integer)+maxId = rawParam "max_id"++page :: (Parameters p, HasParam "page" Integer (SupportParameters p)) => Lens' p (Maybe Integer)+page = rawParam "page"++trimUser :: (Parameters p, HasParam "trim_user" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+trimUser = rawParam "trim_user"++excludeReplies :: (Parameters p, HasParam "exclude_replies" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+excludeReplies = rawParam "exclude_replies"++contributorDetails :: (Parameters p, HasParam "contributor_details" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+contributorDetails = rawParam "contributor_details"++includeEntities :: (Parameters p, HasParam "include_entities" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+includeEntities = rawParam "include_entities"++includeEmail :: (Parameters p, HasParam "include_email" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+includeEmail = rawParam "include_email"++includeUserEntities :: (Parameters p, HasParam "include_user_entities" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+includeUserEntities = rawParam "include_user_entities"++includeRts :: (Parameters p, HasParam "include_rts" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+includeRts = rawParam "include_rts"++includeMyRetweet :: (Parameters p, HasParam "include_my_retweet" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+includeMyRetweet = rawParam "include_my_retweet"++includeExtAltText :: (Parameters p, HasParam "include_ext_alt_text" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+includeExtAltText = rawParam "include_ext_alt_text"++inReplyToStatusId :: (Parameters p, HasParam "in_reply_to_status_id" Integer (SupportParameters p)) => Lens' p (Maybe Integer)+inReplyToStatusId = rawParam "in_reply_to_status_id"++displayCoordinates :: (Parameters p, HasParam "display_coordinates" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+displayCoordinates = rawParam "display_coordinates"++possiblySensitive :: (Parameters p, HasParam "possibly_sensitive" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+possiblySensitive = rawParam "possibly_sensitive"++lang :: (Parameters p, HasParam "lang" Text (SupportParameters p)) => Lens' p (Maybe Text)+lang = rawParam "lang"++language :: (Parameters p, HasParam "language" Text (SupportParameters p)) => Lens' p (Maybe Text)+language = rawParam "language"++locale :: (Parameters p, HasParam "locale" Text (SupportParameters p)) => Lens' p (Maybe Text)+locale = rawParam "locale"++filterLevel :: (Parameters p, HasParam "filter_level" Text (SupportParameters p)) => Lens' p (Maybe Text)+filterLevel = rawParam "filter_level"++stallWarnings :: (Parameters p, HasParam "stall_warnings" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+stallWarnings = rawParam "stall_warnings"++replies :: (Parameters p, HasParam "replies" Text (SupportParameters p)) => Lens' p (Maybe Text)+replies = rawParam "replies"++until :: (Parameters p, HasParam "until" Day (SupportParameters p)) => Lens' p (Maybe Day)+until = rawParam "until"++skipStatus :: (Parameters p, HasParam "skip_status" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+skipStatus = rawParam "skip_status"++follow :: (Parameters p, HasParam "follow" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+follow = rawParam "follow"++map :: (Parameters p, HasParam "map" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+map = rawParam "map"++mediaIds :: (Parameters p, HasParam "media_ids" [Integer] (SupportParameters p)) => Lens' p (Maybe [Integer])+mediaIds = rawParam "media_ids"++description :: (Parameters p, HasParam "description" Text (SupportParameters p)) => Lens' p (Maybe Text)+description = rawParam "description"++name :: (Parameters p, HasParam "name" Text (SupportParameters p)) => Lens' p (Maybe Text)+name = rawParam "name"++profileLinkColor :: (Parameters p, HasParam "profile_link_color" Text (SupportParameters p)) => Lens' p (Maybe Text)+profileLinkColor = rawParam "profile_link_color"++location :: (Parameters p, HasParam "location" Text (SupportParameters p)) => Lens' p (Maybe Text)+location = rawParam "location"++url :: (Parameters p, HasParam "url" URIString (SupportParameters p)) => Lens' p (Maybe URIString)+url = rawParam "url"++fullText :: (Parameters p, HasParam "full_text" Bool (SupportParameters p)) => Lens' p (Maybe Bool)+fullText = rawParam "full_text"++with :: (Parameters p, HasParam "with" Text (SupportParameters p)) => Lens' p (Maybe Text)+with = rawParam "with"
Web/Twitter/Conduit/Request.hs view
@@ -1,61 +1,39 @@+{-# LANGUAGE DataKinds #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE Rank2Types #-}-{-# LANGUAGE CPP #-}+{-# LANGUAGE TypeFamilies #-}  module Web.Twitter.Conduit.Request-       ( Parameters(..)+       ( HasParam        , APIRequest(..)-       , APIQuery-       , APIQueryItem-       , PV(..)-       , makeSimpleQuery-       , paramValueBS        ) where -#if __GLASGOW_HASKELL__ < 710-import Control.Applicative-#endif-import Control.Lens import Data.Aeson-import Data.ByteString (ByteString)-import qualified Data.ByteString.Char8 as S8-import Data.Text (Text)-import qualified Data.Text.Encoding as T-import Data.Time.Calendar (Day)+import GHC.TypeLits (Symbol) import Network.HTTP.Client.MultipartFormData import qualified Network.HTTP.Types as HT--class Parameters a where-    params :: Lens' a APIQuery+import Web.Twitter.Conduit.Request.Internal --- In GHC 7.4.2, the following test fails with Overlapping instances error.--- It may be caused by #5820 "defining instance in GHCi leads to duplicated instances".--- So, we bypass below tests when GHC version older than 7.6.--- see details: https://ghc.haskell.org/trac/ghc/ticket/5820-#if __GLASGOW_HASKELL__ >= 706 -- $setup--- >>> :set -XOverloadedStrings -XRank2Types -XEmptyDataDecls -XFlexibleInstances+-- >>> :set -XOverloadedStrings -XDataKinds -XTypeOperators -- >>> import Control.Lens--- >>> import Data.Default -- >>> import Web.Twitter.Conduit.Parameters--- >>> data SampleApi -- >>> type SampleId = Integer--- >>> instance HasCountParam (APIRequest SampleApi [SampleId])--- >>> instance HasMaxIdParam (APIRequest SampleApi [SampleId])--- >>> let sampleApiRequest :: APIRequest SampleApi [SampleId]; sampleApiRequest = APIRequest "GET" "https://api.twitter.com/sample/api.json" def+-- >>> type SampleApi = '["count" ':= Integer, "max_id" ':= Integer]+-- >>> let sampleApiRequest :: APIRequest SampleApi [SampleId]; sampleApiRequest = APIRequest "GET" "https://api.twitter.com/sample/api.json" []  -- | API request. You should use specific builder functions instead of building this directly. -- -- For example, if there were a @SampleApi@ type and a builder function which named @sampleApiRequest@.--- In addition, @'APIRequest' SampleApi [SampleId]@ is a instance of both of 'HasCountParam' and 'HasMaxIdParam'. -- -- @--- data 'SampleApi'--- type 'SampleId' = 'Integer'--- instance 'HasCountParam' ('APIRequest' 'SampleApi' ['SampleId'])--- instance 'HasMaxIdParam' ('APIRequest' 'SampleApi' ['SampleId'])--- 'sampleApiRequest' :: 'APIRequest' 'SampleApi' ['SampleId']--- 'sampleApiRequest' = 'APIRequest' \"GET\" \"https:\/\/api.twitter.com\/sample\/api.json\" 'def'+-- type SampleId = 'Integer'+-- sampleApiRequest :: 'APIRequest' SampleApi [SampleId]+-- sampleApiRequest = 'APIRequest' \"GET\" \"https:\/\/api.twitter.com\/sample\/api.json\" []+-- type SampleApi = '[ "count" ':= Integer+--                   , "max_id" ':= Integer+--                   ]+-- -- @ -- -- We can obtain request params from @'APIRequest' SampleApi [SampleId]@ :@@ -63,14 +41,15 @@ -- >>> sampleApiRequest ^. params -- [] ----- And update request parameters.+-- The second type parameter of the APIRequest represents the allowed parameters for the APIRequest.+-- For example, @sampleApiRequest@ has 2 @Integer@ parameters, that is "count" and "max_id".+-- You can update those parameters by label lenses (@#count@ and @#max_id@ respectively) ----- >>> (sampleApiRequest & count ?~ 100 & maxId ?~ 1234567890) ^. params+-- >>> (sampleApiRequest & #count ?~ 100 & #max_id ?~ 1234567890) ^. params -- [("max_id",PVInteger {unPVInteger = 1234567890}),("count",PVInteger {unPVInteger = 100})]--- >>> (sampleApiRequest & count ?~ 100 & maxId ?~ 1234567890 & count .~ Nothing) ^. params+-- >>> (sampleApiRequest & #count ?~ 100 & #max_id ?~ 1234567890 & #count .~ Nothing) ^. params -- [("max_id",PVInteger {unPVInteger = 1234567890})]-#endif-data APIRequest apiName responseType+data APIRequest (supports :: [Param Symbol *]) responseType     = APIRequest       { _method :: HT.Method       , _url :: String@@ -88,7 +67,9 @@       , _params :: APIQuery       , _body :: Value       }-instance Parameters (APIRequest apiName responseType) where+instance Parameters (APIRequest supports responseType) where+    type SupportParameters (APIRequest supports responseType) = supports+     params f (APIRequest m u pa) = APIRequest m u <$> f pa     params f (APIRequestMultipart m u pa prt) =         (\p -> APIRequestMultipart m u p prt) <$> f pa@@ -97,27 +78,3 @@     show (APIRequest m u p) = "APIRequest " ++ show m ++ " " ++ show u ++ " " ++ show (makeSimpleQuery p)     show (APIRequestMultipart m u p _) = "APIRequestMultipart " ++ show m ++ " " ++ show u ++ " " ++ show (makeSimpleQuery p)     show (APIRequestJSON m u p _) = "APIRequestJSON " ++ show m ++ " " ++ show u ++ " " ++ show (makeSimpleQuery p)--type APIQuery = [APIQueryItem]-type APIQueryItem = (ByteString, PV)--data PV-    = PVInteger { unPVInteger :: Integer }-    | PVBool { unPVBool :: Bool }-    | PVString { unPVString :: Text }-    | PVIntegerArray { unPVIntegerArray :: [Integer] }-    | PVStringArray { unPVStringArray :: [Text] }-    | PVDay { unPVDay :: Day }-    deriving (Show, Eq)--makeSimpleQuery :: APIQuery -> HT.SimpleQuery-makeSimpleQuery = traversed . _2 %~ paramValueBS--paramValueBS :: PV -> ByteString-paramValueBS (PVInteger i) = S8.pack . show $ i-paramValueBS (PVBool True) = "true"-paramValueBS (PVBool False) = "false"-paramValueBS (PVString txt) = T.encodeUtf8 txt-paramValueBS (PVIntegerArray iarr) = S8.intercalate "," $ map (S8.pack . show) iarr-paramValueBS (PVStringArray iarr) = S8.intercalate "," $ map T.encodeUtf8 iarr-paramValueBS (PVDay day) = S8.pack . show $ day
+ Web/Twitter/Conduit/Request/Internal.hs view
@@ -0,0 +1,111 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Web.Twitter.Conduit.Request.Internal where++import Control.Lens+import Data.ByteString (ByteString)+import qualified Data.ByteString.Char8 as S8+import Data.Proxy+import Data.Text (Text)+import qualified Data.Text.Encoding as T+import Data.Time.Calendar (Day)+import GHC.OverloadedLabels+import GHC.TypeLits+import qualified Network.HTTP.Types as HT++data Param label t = label := t++type EmptyParams = ('[] :: [Param Symbol *])++type HasParam (label :: Symbol) (paramType :: *) (params :: [Param Symbol *]) = ParamType label params ~ paramType+type family ParamType (label :: Symbol) (params :: [Param Symbol *]) :: * where+    ParamType label ((label ':= paramType) ': ks) = paramType+    ParamType label ((label' ':= paramType') ': ks) = ParamType label ks++type APIQuery = [APIQueryItem]+type APIQueryItem = (ByteString, PV)++data PV+    = PVInteger { unPVInteger :: Integer }+    | PVBool { unPVBool :: Bool }+    | PVString { unPVString :: Text }+    | PVIntegerArray { unPVIntegerArray :: [Integer] }+    | PVStringArray { unPVStringArray :: [Text] }+    | PVDay { unPVDay :: Day }+    deriving (Show, Eq)++class Parameters req where+    type SupportParameters req :: [Param Symbol *]+    params :: Lens' req APIQuery++class ParameterValue a where+    wrap :: a -> PV+    unwrap :: PV -> a+instance ParameterValue Integer where+    wrap = PVInteger+    unwrap = unPVInteger+instance ParameterValue Bool where+    wrap = PVBool+    unwrap = unPVBool+instance ParameterValue Text where+    wrap = PVString+    unwrap = unPVString+instance ParameterValue [Integer] where+    wrap = PVIntegerArray+    unwrap = unPVIntegerArray+instance ParameterValue [Text] where+    wrap = PVStringArray+    unwrap = unPVStringArray+instance ParameterValue Day where+    wrap = PVDay+    unwrap = unPVDay++makeSimpleQuery :: APIQuery -> HT.SimpleQuery+makeSimpleQuery = traversed . _2 %~ paramValueBS++paramValueBS :: PV -> ByteString+paramValueBS (PVInteger i) = S8.pack . show $ i+paramValueBS (PVBool True) = "true"+paramValueBS (PVBool False) = "false"+paramValueBS (PVString txt) = T.encodeUtf8 txt+paramValueBS (PVIntegerArray iarr) = S8.intercalate "," $ map (S8.pack . show) iarr+paramValueBS (PVStringArray iarr) = S8.intercalate "," $ map T.encodeUtf8 iarr+paramValueBS (PVDay day) = S8.pack . show $ day++rawParam ::+       (Parameters p, ParameterValue a)+    => ByteString -- ^ key+    -> Lens' p (Maybe a)+rawParam key = lens getter setter+   where+     getter = preview $ params . to (lookup key) . _Just . to unwrap+     setter = flip (over params . replace key)+     replace k (Just v) = ((k, wrap v):) . dropAssoc k+     replace k Nothing = dropAssoc k+     dropAssoc k = filter ((/= k) . fst)++instance ( Parameters req+         , ParameterValue a+         , KnownSymbol label+         , HasParam label a (SupportParameters req)+         , Functor f+         , lens ~ ((Maybe a -> f (Maybe a)) -> req -> f req)) =>+         IsLabel label lens where+#if MIN_VERSION_base(4, 10, 0)+    fromLabel = rawParam key+#else+    fromLabel _ = rawParam key+#endif+      where+        key = S8.pack (symbolVal (Proxy :: Proxy label))
Web/Twitter/Conduit/Response.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-}@@ -11,11 +10,6 @@        , TwitterErrorMessage (..)        ) where -#if __GLASGOW_HASKELL__ < 710-import Control.Applicative-import Data.Foldable (Foldable)-import Data.Traversable (Traversable)-#endif import Control.Exception import Data.Aeson import Data.Data
Web/Twitter/Conduit/Status.hs view
@@ -1,8 +1,6 @@+{-# LANGUAGE DataKinds #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE TypeOperators #-}  module Web.Twitter.Conduit.Status        (@@ -38,8 +36,8 @@ import Prelude hiding ( lookup ) import Web.Twitter.Conduit.Base import Web.Twitter.Conduit.Request+import Web.Twitter.Conduit.Request.Internal import Web.Twitter.Conduit.Parameters-import Web.Twitter.Conduit.Parameters.TH import Web.Twitter.Types  import qualified Data.Text as T@@ -47,12 +45,11 @@ import Data.Default  -- $setup--- >>> :set -XOverloadedStrings+-- >>> :set -XOverloadedStrings -XOverloadedLabels -- >>> import Control.Lens  -- * Timelines -data StatusesMentionsTimeline -- | Returns query data asks the most recent mentions for the authenticating user. -- -- You can perform a query using 'call':@@ -65,16 +62,16 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/mentions_timeline.json" [] mentionsTimeline :: APIRequest StatusesMentionsTimeline [Status] mentionsTimeline = APIRequest "GET" (endpoint ++ "statuses/mentions_timeline.json") def-deriveHasParamInstances ''StatusesMentionsTimeline-    [ "count"-    , "since_id"-    , "max_id"-    , "trim_user"-    , "contributor_details"-    , "include_entities"+type StatusesMentionsTimeline = '[+      "count" ':= Integer+    , "since_id" ':= Integer+    , "max_id" ':= Integer+    , "trim_user" ':= Bool+    , "contributor_details" ':= Bool+    , "include_entities" ':= Bool+    , "tweet_mode" ':= T.Text     ] -data StatusesUserTimeline -- | Returns query data asks a collection of the most recent Tweets posted by the user indicated by the screen_name or user_id parameters. -- -- You can perform a search query using 'call':@@ -85,21 +82,21 @@ -- -- >>> userTimeline (ScreenNameParam "thimura") -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/user_timeline.json" [("screen_name","thimura")]--- >>> userTimeline (ScreenNameParam "thimura") & includeRts ?~ True & count ?~ 200+-- >>> userTimeline (ScreenNameParam "thimura") & #include_rts ?~ True & #count ?~ 200 -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/user_timeline.json" [("count","200"),("include_rts","true"),("screen_name","thimura")] userTimeline :: UserParam -> APIRequest StatusesUserTimeline [Status] userTimeline q = APIRequest "GET" (endpoint ++ "statuses/user_timeline.json") (mkUserParam q)-deriveHasParamInstances ''StatusesUserTimeline-    [ "count"-    , "since_id"-    , "max_id"-    , "trim_user"-    , "exclude_replies"-    , "contributor_details"-    , "include_rts"+type StatusesUserTimeline = '[+      "count" ':= Integer+    , "since_id" ':= Integer+    , "max_id" ':= Integer+    , "trim_user" ':= Bool+    , "exclude_replies" ':= Bool+    , "contributor_details" ':= Bool+    , "include_rts" ':= Bool+    , "tweet_mode" ':= T.Text     ] -data StatusesHomeTimeline -- | Returns query data asks a collection of the most recentTweets and retweets posted by the authenticating user and the users they follow. -- -- You can perform a search query using 'call':@@ -110,21 +107,21 @@ -- -- >>> homeTimeline -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/home_timeline.json" []--- >>> homeTimeline & count ?~ 200+-- >>> homeTimeline & #count ?~ 200 -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/home_timeline.json" [("count","200")] homeTimeline :: APIRequest StatusesHomeTimeline [Status] homeTimeline = APIRequest "GET" (endpoint ++ "statuses/home_timeline.json") def-deriveHasParamInstances ''StatusesHomeTimeline-    [ "count"-    , "since_id"-    , "max_id"-    , "trim_user"-    , "exclude_replies"-    , "contributor_details"-    , "include_entities"+type StatusesHomeTimeline = '[+      "count" ':= Integer+    , "since_id" ':= Integer+    , "max_id" ':= Integer+    , "trim_user" ':= Bool+    , "exclude_replies" ':= Bool+    , "contributor_details" ':= Bool+    , "include_entities" ':= Bool+    , "tweet_mode" ':= T.Text     ] -data StatusesRetweetsOfMe -- | Returns query data asks the most recent tweets authored by the authenticating user that have been retweeted by others. -- -- You can perform a search query using 'call':@@ -135,22 +132,22 @@ -- -- >>> retweetsOfMe -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/retweets_of_me.json" []--- >>> retweetsOfMe & count ?~ 100+-- >>> retweetsOfMe & #count ?~ 100 -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/retweets_of_me.json" [("count","100")] retweetsOfMe :: APIRequest StatusesRetweetsOfMe [Status] retweetsOfMe = APIRequest "GET" (endpoint ++ "statuses/retweets_of_me.json") def-deriveHasParamInstances ''StatusesRetweetsOfMe-    [ "count"-    , "since_id"-    , "max_id"-    , "trim_user"-    , "include_entities"-    , "include_user_entities"+type StatusesRetweetsOfMe = '[+      "count" ':= Integer+    , "since_id" ':= Integer+    , "max_id" ':= Integer+    , "trim_user" ':= Bool+    , "include_entities" ':= Bool+    , "include_user_entities" ':= Bool+    , "tweet_mode" ':= T.Text     ]  -- * Tweets -data StatusesRetweetsId -- | Returns query data that asks for the most recent retweets of the specified tweet -- -- You can perform a search query using 'call':@@ -161,17 +158,16 @@ -- -- >>> retweetsId 1234567890 -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/retweets/1234567890.json" []--- >>> retweetsId 1234567890 & count ?~ 100+-- >>> retweetsId 1234567890 & #count ?~ 100 -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/retweets/1234567890.json" [("count","100")] retweetsId :: StatusId -> APIRequest StatusesRetweetsId [RetweetedStatus] retweetsId status_id = APIRequest "GET" uri def   where uri = endpoint ++ "statuses/retweets/" ++ show status_id ++ ".json"-deriveHasParamInstances ''StatusesRetweetsId-    [ "count"-    , "trim_user"+type StatusesRetweetsId = '[+      "count" ':= Integer+    , "trim_user" ':= Bool     ] -data StatusesShowId -- | Returns query data asks a single Tweet, specified by the id parameter. -- -- You can perform a search query using 'call':@@ -182,19 +178,19 @@ -- -- >>> showId 1234567890 -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/show/1234567890.json" []--- >>> showId 1234567890 & includeMyRetweet ?~ True+-- >>> showId 1234567890 & #include_my_retweet ?~ True -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/show/1234567890.json" [("include_my_retweet","true")] showId :: StatusId -> APIRequest StatusesShowId Status showId status_id = APIRequest "GET" uri def   where uri = endpoint ++ "statuses/show/" ++ show status_id ++ ".json"-deriveHasParamInstances ''StatusesShowId-    [ "trim_user"-    , "include_my_retweet"-    , "include_entities"-    , "include_ext_alt_text"+type StatusesShowId = '[+      "trim_user" ':= Bool+    , "include_my_retweet" ':= Bool+    , "include_entities" ':= Bool+    , "include_ext_alt_text" ':= Bool+    , "tweet_mode" ':= T.Text     ] -data StatusesDestroyId -- | Returns post data which destroys the status specified by the require ID parameter. -- -- You can perform a search query using 'call':@@ -208,11 +204,11 @@ destroyId :: StatusId -> APIRequest StatusesDestroyId Status destroyId status_id = APIRequest "POST" uri def   where uri = endpoint ++ "statuses/destroy/" ++ show status_id ++ ".json"-deriveHasParamInstances ''StatusesDestroyId-    [ "trim_user"+type StatusesDestroyId = '[+      "trim_user" ':= Bool+    , "tweet_mode" ':= T.Text     ] -data StatusesUpdate -- | Returns post data which updates the authenticating user's current status. -- To upload an image to accompany the tweet, use 'updateWithMedia'. --@@ -224,21 +220,21 @@ -- -- >>> update "Hello World" -- APIRequest "POST" "https://api.twitter.com/1.1/statuses/update.json" [("status","Hello World")]--- >>> update "Hello World" & inReplyToStatusId ?~ 1234567890+-- >>> update "Hello World" & #in_reply_to_status_id ?~ 1234567890 -- APIRequest "POST" "https://api.twitter.com/1.1/statuses/update.json" [("in_reply_to_status_id","1234567890"),("status","Hello World")] update :: T.Text -> APIRequest StatusesUpdate Status update status = APIRequest "POST" uri [("status", PVString status)]   where uri = endpoint ++ "statuses/update.json"-deriveHasParamInstances ''StatusesUpdate-    [ "in_reply_to_status_id"+type StatusesUpdate = '[+      "in_reply_to_status_id" ':= Integer     -- , "lat_long"     -- , "place_id"-    , "display_coordinates"-    , "trim_user"-    , "media_ids"+    , "display_coordinates" ':= Bool+    , "trim_user" ':= Bool+    , "media_ids" ':= [Integer]+    , "tweet_mode" ':= T.Text     ] -data StatusesRetweetId -- | Returns post data which retweets a tweet, specified by ID. -- -- You can perform a search query using 'call':@@ -252,11 +248,10 @@ retweetId :: StatusId -> APIRequest StatusesRetweetId RetweetedStatus retweetId status_id = APIRequest "POST" uri def   where uri = endpoint ++ "statuses/retweet/" ++ show status_id ++ ".json"-deriveHasParamInstances ''StatusesRetweetId-    [ "trim_user"+type StatusesRetweetId = '[+      "trim_user" ':= Bool     ] -data StatusesUpdateWithMedia -- | Returns post data which updates the authenticating user's current status and attaches media for upload. -- -- You can perform a search query using 'call':@@ -276,15 +271,15 @@     uri = endpoint ++ "statuses/update_with_media.json"     mediaBody (MediaFromFile fp) = partFileSource "media[]" fp     mediaBody (MediaRequestBody filename filebody) = partFileRequestBody "media[]" filename filebody-deriveHasParamInstances ''StatusesUpdateWithMedia-    [ "possibly_sensitive"-    , "in_reply_to_status_id"+type StatusesUpdateWithMedia = '[+      "possibly_sensitive" ':= Bool+    , "in_reply_to_status_id" ':= Integer     -- , "lat_long"     -- , "place_id"-    , "display_coordinates"+    , "display_coordinates" ':= Bool+    , "tweet_mode" ':= T.Text     ] -data StatusesLookup -- | Returns fully-hydrated tweet objects for up to 100 tweets per request, as specified by comma-separated values passed to the id parameter. -- -- You can perform a request using 'call':@@ -297,12 +292,13 @@ -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/lookup.json" [("id","10")] -- >>> lookup [10, 432656548536401920] -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/lookup.json" [("id","10,432656548536401920")]--- >>> lookup [10, 432656548536401920] & includeEntities ?~ True+-- >>> lookup [10, 432656548536401920] & #include_entities ?~ True -- APIRequest "GET" "https://api.twitter.com/1.1/statuses/lookup.json" [("include_entities","true"),("id","10,432656548536401920")] lookup :: [StatusId] -> APIRequest StatusesLookup [Status] lookup ids = APIRequest "GET" (endpoint ++ "statuses/lookup.json") [("id", PVIntegerArray ids)]-deriveHasParamInstances ''StatusesLookup-    [ "include_entities"-    , "trim_user"-    , "map"+type StatusesLookup = '[+      "include_entities" ':= Bool+    , "trim_user" ':= Bool+    , "map" ':= Bool+    , "tweet_mode" ':= T.Text     ]
Web/Twitter/Conduit/Stream.hs view
@@ -1,9 +1,8 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE EmptyDataDecls #-}-{-# LANGUAGE CPP #-}-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeOperators #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE OverloadedStrings #-}  module Web.Twitter.Conduit.Stream        (@@ -27,9 +26,8 @@ import Web.Twitter.Conduit.Types import Web.Twitter.Conduit.Base import Web.Twitter.Types-import Web.Twitter.Conduit.Parameters-import Web.Twitter.Conduit.Parameters.TH import Web.Twitter.Conduit.Request+import Web.Twitter.Conduit.Request.Internal import Web.Twitter.Conduit.Response  import Control.Monad.Catch@@ -39,77 +37,44 @@ import qualified Data.ByteString.Char8 as S8 import Data.Char import qualified Data.Conduit as C-import qualified Data.Conduit.Internal as CI import qualified Data.Conduit.List as CL import qualified Data.List as L import qualified Data.Text as T import qualified Network.HTTP.Conduit as HTTP -#if MIN_VERSION_conduit(1,3,0)-#else-#if MIN_VERSION_conduit(1,0,16)-($=+) :: MonadIO m-      => CI.ResumableSource m a-      -> CI.Conduit a m o-      -> m (CI.ResumableSource m o)-($=+) = (return .) . (C.$=+)-#else-rsrc $=+ cndt = do-    (src, finalizer) <- C.unwrapResumable rsrc-    return $ CI.ResumableSource (src C.$= cndt) finalizer-#endif-#endif- stream ::           ( MonadResource m           , FromJSON responseType-#if MIN_VERSION_conduit(1,3,0)           , MonadThrow m-#endif           )        => TWInfo        -> HTTP.Manager        -> APIRequest apiName responseType-#if MIN_VERSION_http_conduit(2,3,0)         -> m (C.ConduitM () responseType m ())-#else-       -> m (C.ResumableSource m responseType)-#endif stream = stream'  stream' ::            ( MonadResource m            , FromJSON value-#if MIN_VERSION_conduit(1,3,0)            , MonadThrow m-#endif            )         => TWInfo         -> HTTP.Manager         -> APIRequest apiName responseType-#if MIN_VERSION_http_conduit(2,3,0)         -> m (C.ConduitM () value m ())-#else-        -> m (C.ResumableSource m value)-#endif stream' info mgr req = do     rsrc <- getResponse info mgr =<< liftIO (makeRequest req)-#if MIN_VERSION_http_conduit(2,3,0)     return $ responseBody rsrc C..| CL.sequence sinkFromJSONIgnoreSpaces-#else-    responseBody rsrc $=+ CL.sequence sinkFromJSONIgnoreSpaces-#endif   where-    sinkFromJSONIgnoreSpaces = CL.filter (not . S8.all isSpace) C.=$ sinkFromJSON+    sinkFromJSONIgnoreSpaces = CL.filter (not . S8.all isSpace) C..| sinkFromJSON -data Userstream userstream :: APIRequest Userstream StreamingAPI userstream = APIRequest "GET" "https://userstream.twitter.com/1.1/user.json" []-deriveHasParamInstances ''Userstream-    [ "language"-    , "filter_level"-    , "stall_warnings"-    , "replies"+type Userstream = '[+      "language" ':= T.Text+    , "filter_level" ':= T.Text+    , "stall_warnings" ':= Bool+    , "replies" ':= T.Text     ]  -- https://dev.twitter.com/streaming/overview/request-parameters@@ -134,8 +99,6 @@ statusesFilterEndpoint :: String statusesFilterEndpoint = "https://stream.twitter.com/1.1/statuses/filter.json" -data StatusesFilter- -- | Returns statuses/filter.json API query data. -- -- >>> statusesFilterByFollow [1,2,3]@@ -150,9 +113,8 @@ statusesFilterByTrack :: T.Text -- ^ keyword                       -> APIRequest StatusesFilter StreamingAPI statusesFilterByTrack keyword = statusesFilter [Track [keyword]]--deriveHasParamInstances ''StatusesFilter-    [ "language"-    , "filter_level"-    , "stall_warnings"+type StatusesFilter = '[+      "language" ':= T.Text+    , "filter_level" ':= T.Text+    , "stall_warnings" ':= Bool     ]
sample/fav.hs view
@@ -15,7 +15,7 @@     mgr <- newManager tlsManagerSettings     let sId = read statusIdStr -    targetStatus <- call twInfo mgr $ showId sId+    targetStatus <- call twInfo mgr $ statusesShowId sId     putStrLn $ "Favorite Tweet: " ++ targetStatus ^. to show     res <- call twInfo mgr $ favoritesCreate sId     print res
sample/oauth_callback.hs view
@@ -9,14 +9,13 @@  import Web.Scotty import qualified Network.HTTP.Types as HT-import Web.Twitter.Conduit hiding (lookup,url)+import Web.Twitter.Conduit import qualified Web.Authenticate.OAuth as OA import qualified Data.Text.Lazy as LT import qualified Data.ByteString as S import qualified Data.ByteString.Char8 as S8 import qualified Data.Map as M import Data.Maybe-import Data.Monoid import Data.IORef import Control.Monad.IO.Class import System.Environment
sample/oauth_pin.hs view
@@ -8,11 +8,10 @@  module Main where -import Web.Twitter.Conduit hiding (lookup,url)+import Web.Twitter.Conduit hiding (lookup) import Web.Authenticate.OAuth as OA import qualified Data.ByteString.Char8 as S8 import Data.Maybe-import Data.Monoid import System.Environment import System.IO (hFlush, stdout) 
sample/oslist.hs view
@@ -1,10 +1,10 @@ {-# LANGUAGE OverloadedStrings #-} module Main where -import Web.Twitter.Conduit hiding (map)+import Web.Twitter.Conduit import Common -import qualified Data.Conduit as C+import Data.Conduit import qualified Data.Conduit.List as CL import qualified Data.Map as M import System.Environment@@ -16,8 +16,8 @@     mgr <- newManager tlsManagerSettings     let sn = ScreenNameParam screenName -    folids <- sourceWithCursor twInfo mgr (followersIds sn) C.$$ CL.consume-    friids <- sourceWithCursor twInfo mgr (friendsIds sn) C.$$ CL.consume+    folids <- runConduit $ sourceWithCursor twInfo mgr (followersIds sn) .| CL.consume+    friids <- runConduit $ sourceWithCursor twInfo mgr (friendsIds sn) .| CL.consume      let folmap = M.fromList $ map (flip (,) True) folids         os = filter (\uid -> M.notMember uid folmap) friids
sample/post.hs view
@@ -1,11 +1,9 @@ {-# LANGUAGE OverloadedStrings #-} module Main where -import Web.Twitter.Conduit hiding (map)+import Web.Twitter.Conduit import Common -import Control.Applicative-import Data.Monoid import qualified Data.Text as T import qualified Data.Text.IO as T import System.Environment@@ -16,5 +14,5 @@     T.putStrLn $ "Post message: " <> status     twInfo <- getTWInfoFromEnv     mgr <- newManager tlsManagerSettings-    res <- call twInfo mgr $ update status+    res <- call twInfo mgr $ statusesUpdate status     print res
sample/postWithMedia.hs view
@@ -13,5 +13,5 @@     putStrLn $ "Post message: " ++ status     twInfo <- getTWInfoFromEnv     mgr <- newManager tlsManagerSettings-    res <- call twInfo mgr $ updateWithMedia (T.pack status) (MediaFromFile filepath)+    res <- call twInfo mgr $ statusesUpdateWithMedia (T.pack status) (MediaFromFile filepath)     print res
sample/postWithMultipleMedia.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedLabels #-}+ module Main where  import Web.Twitter.Conduit-import qualified Web.Twitter.Conduit.Parameters as P import Web.Twitter.Types.Lens import Common @@ -27,5 +28,5 @@         putStrLn $ "Upload completed: media_id: " ++ ret ^. uploadedMediaId . to show ++ ", filepath: " ++ filepath         return ret     putStrLn $ "Post message: " ++ status-    res <- call twInfo mgr $ update (T.pack status) & P.mediaIds ?~ (uploadedMediaList ^.. traversed .  uploadedMediaId)+    res <- call twInfo mgr $ statusesUpdate (T.pack status) & #media_ids ?~ (uploadedMediaList ^.. traversed .  uploadedMediaId)     print res
sample/searchSource.hs view
@@ -22,4 +22,4 @@     let metadata = res ^. searchResultSearchMetadata     putStrLn $ "search completed in: " ++ metadata ^. searchMetadataCompletedIn . to show     putStrLn $ "search result max id: " ++ metadata ^. searchMetadataMaxId . to show-    res ^. searchResultStatuses $$ CL.isolate (read num) =$ CL.mapM_ print+    runConduit $ res ^. searchResultStatuses .| CL.isolate (read num) .| CL.mapM_ print
sample/simple.hs view
@@ -1,15 +1,15 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE FlexibleContexts #-}  module Main where  import Web.Twitter.Conduit-import qualified Web.Twitter.Conduit.Parameters as P import Web.Twitter.Types.Lens  import Control.Lens import qualified Data.ByteString.Char8 as B8-import qualified Data.Conduit as C+import Data.Conduit import qualified Data.Conduit.List as CL import qualified Data.Text as T import qualified Data.Text.IO as T@@ -49,12 +49,15 @@     mgr <- newManager tlsManagerSettings     twInfo <- getTWInfo mgr     putStrLn $ "# your home timeline (up to 800 tweets):"-    sourceWithMaxId twInfo mgr (homeTimeline & P.count ?~ 200)-        C.$= CL.isolate 800-        C.$$ CL.mapM_ $ \status -> do-            T.putStrLn $ T.concat [ T.pack . show $ status ^. statusId-                                  , ": "-                                  , status ^. statusUser . userScreenName-                                  , ": "-                                  , status ^. statusText-                                  ]+    runConduit $ sourceWithMaxId twInfo mgr (statusesHomeTimeline & #count ?~ 200)+        .| CL.isolate 800+        .| CL.mapM_+            (\status -> do+                 T.putStrLn $+                     T.concat+                         [ T.pack . show $ status ^. statusId+                         , ": "+                         , status ^. statusUser . userScreenName+                         , ": "+                         , status ^. statusText+                         ])
sample/twitter-conduit-sample.cabal view
@@ -28,7 +28,7 @@     , containers     , directory     , filepath-    , http-conduit+    , http-conduit >= 2.3.0     , lens     , process     , resourcet
sample/userstream.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternGuards #-} @@ -6,13 +5,11 @@ import Web.Twitter.Types.Lens import Common -import Control.Applicative import Control.Lens import Control.Monad import Control.Monad.IO.Class import Control.Monad.Trans.Resource import Data.Conduit-import qualified Data.Conduit as C import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.List as CL import qualified Data.Text as T@@ -39,11 +36,7 @@     mgr <- newManager tlsManagerSettings     runResourceT $ do         src <- stream twInfo mgr userstream-#if MIN_VERSION_http_conduit(2,3,0)-        C.runConduit $ src C..| CL.mapM_ (liftIO . printTL)-#else-        src C.$$+- CL.mapM_ (liftIO . printTL)-#endif+        runConduit $ src .| CL.mapM_ (liftIO . printTL)  showStatus :: AsStatus s => s -> T.Text showStatus s = T.concat [ s ^. user . userScreenName@@ -85,13 +78,9 @@     let fname = ipath </> sn ++ "__" ++ takeFileName url     exists <- doesFileExist fname     unless exists $ do-        req <- parseUrl url+        req <- parseRequest url         mgr <- newManager tlsManagerSettings         runResourceT $ do             body <- http req mgr-#if MIN_VERSION_http_conduit(2,3,0)-            C.runConduit $ HTTP.responseBody body C..| CB.sinkFile fname-#else-            HTTP.responseBody body $$+- CB.sinkFile fname-#endif+            runConduit $ HTTP.responseBody body .| CB.sinkFile fname     return fname
tests/StatusSpec.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE CPP #-}  module StatusSpec where@@ -56,11 +57,11 @@         it "returns the recent tweets which include RTs when specified include_rts option" $ do             res <- call twInfo mgr                    $ userTimeline (Param.ScreenNameParam "thimura")-                   & Param.count ?~ 100 & Param.includeRts ?~ True+                   & #count ?~ 100 & #include_rts ?~ True             res `shouldSatisfy` (anyOf (folded . statusRetweetedStatus . _Just . statusUser . userScreenName) (/= "thimura"))         it "iterate with sourceWithMaxId" $ do             let src = sourceWithMaxId twInfo mgr $-                      userTimeline (Param.ScreenNameParam "thimura") & Param.count ?~ 200+                      userTimeline (Param.ScreenNameParam "thimura") & #count ?~ 200             tl <- src $$ CL.isolate 600 =$ CL.consume             length tl `shouldSatisfy` (== 600) 
tests/TestUtils.hs view
@@ -1,20 +1,10 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE CPP #-}  module TestUtils (getTWInfo) where -import Web.Twitter.Conduit--import qualified Network.URI as URI-import Network.HTTP.Conduit-import qualified Data.Map as M import qualified Data.ByteString.Char8 as S8-import qualified Data.CaseInsensitive as CI-import Control.Applicative import System.Environment-import Control.Lens+import Web.Twitter.Conduit  getOAuthTokens :: IO (OAuth, Credential) getOAuthTokens = do@@ -34,21 +24,7 @@   where     getEnv' = (S8.pack <$>) . getEnv -getProxyEnv :: IO (Maybe Proxy)-getProxyEnv = do-    env <- M.fromList . over (mapped . _1) CI.mk <$> getEnvironment-    let u = M.lookup "https_proxy" env <|>-            M.lookup "http_proxy" env <|>-            M.lookup "proxy" env >>= URI.parseURI >>= URI.uriAuthority-    return $ Proxy <$> (S8.pack . URI.uriRegName <$> u) <*> (parsePort . URI.uriPort <$> u)-  where-    parsePort :: String -> Int-    parsePort []       = 8080-    parsePort (':':xs) = read xs-    parsePort xs       = error $ "port number parse failed " ++ xs- getTWInfo :: IO TWInfo getTWInfo = do-    pr <- getProxyEnv     (oa, cred) <- getOAuthTokens-    return $ (setCredential oa cred def) { twProxy = pr }+    return $ setCredential oa cred def
twitter-conduit.cabal view
@@ -1,5 +1,5 @@ name:              twitter-conduit-version:           0.4.0+version:           0.5.0 license:           BSD3 license-file:      LICENSE author:            HATTORI Hiroki, Hideyuki Tanaka, Takahiro HIMURA@@ -39,10 +39,6 @@   type: git   location: git://github.com/himura/twitter-conduit.git -flag network-uri-  description: Get Network.URI from the network-uri package-  default: True- flag run-integrated-test   description: use debug output when running testsuites   default: False@@ -56,22 +52,21 @@     , attoparsec >= 0.10     , authenticate-oauth >= 1.3     , bytestring >= 0.10.2-    , conduit >= 1.1-    , conduit-extra >= 1.1+    , conduit >= 1.3+    , conduit-extra >= 1.3     , containers     , data-default >= 0.3     , exceptions >= 0.5-    , http-client >= 0.3.0-    , http-conduit >= 2.0 && < 2.4+    , ghc-prim+    , http-client >= 0.5.0+    , http-conduit >= 2.3 && < 2.4     , http-types     , lens >= 4.4     , lens-aeson >= 1     , resourcet >= 1.0-    , template-haskell     , text >= 0.11     , time     , transformers >= 0.2.2-    , transformers-base     , twitter-types >= 0.9     , twitter-types-lens >= 0.9 @@ -84,10 +79,11 @@     Web.Twitter.Conduit.Status     Web.Twitter.Conduit.Base     Web.Twitter.Conduit.Request+    Web.Twitter.Conduit.Request.Internal     Web.Twitter.Conduit.Response     Web.Twitter.Conduit.Cursor     Web.Twitter.Conduit.Parameters-    Web.Twitter.Conduit.Parameters.TH+    Web.Twitter.Conduit.ParametersDeprecated    default-language: Haskell2010 @@ -128,7 +124,6 @@     , attoparsec     , authenticate-oauth     , bytestring-    , case-insensitive     , conduit     , conduit-extra     , containers@@ -140,18 +135,11 @@     , lens     , lens-aeson     , resourcet-    , template-haskell     , text     , time     , twitter-conduit     , twitter-types     , twitter-types-lens--  if flag(network-uri)-    build-depends: network-uri >= 2.6-  else-    build-depends: network < 2.6-    other-modules:     Spec