packages feed

fb 0.15.2 → 1.0

raw patch · 16 files changed

+97/−80 lines, 16 filesdep +conduit-extradep ~conduitdep ~hspecdep ~http-conduit

Dependencies added: conduit-extra

Dependency ranges changed: conduit, hspec, http-conduit

Files

fb.cabal view
@@ -1,5 +1,5 @@ name:              fb-version:           0.15.2+version:           1.0 license:           BSD3 license-file:      LICENSE author:            Felipe Lessa@@ -40,6 +40,8 @@   default: False   description: Print debugging info. +flag conduit11+  description: Use conduit >= 1.1.  library   hs-source-dirs: src@@ -71,12 +73,10 @@     , transformers-base     , monad-control     , resourcet-    , conduit              == 1.0.*     , data-default     , http-types-    , http-conduit         == 2.0.*+    , http-conduit         >= 2.0     && < 2.2     , attoparsec           >= 0.10.4  && < 0.12-    , attoparsec-conduit   == 1.0.*     , unordered-containers     , aeson                >= 0.5     && < 0.8     , base16-bytestring    >= 0.1@@ -88,6 +88,14 @@     , cryptohash           >= 0.7     , cryptohash-cryptoapi == 0.1.*     , monad-logger         >= 0.3+  if flag(conduit11)+    build-depends:+        conduit              == 1.1.*+      , conduit-extra        == 1.1.*+  else+    build-depends:+        conduit              == 1.0.*+      , attoparsec-conduit   == 1.0.*   extensions:     DeriveDataTypeable     EmptyDataDecls@@ -111,7 +119,7 @@   build-depends:       -- Library dependencies used on the tests.  No need to       -- specify versions since they'll use the same as above.-      base, lifted-base, transformers, bytestring,+      base, lifted-base, transformers, bytestring, resourcet,       conduit, http-conduit, text, time, aeson, monad-control        -- Test-only dependencies@@ -119,7 +127,7 @@     , data-default     , HUnit     , QuickCheck-    , hspec == 1.8.*+    , hspec == 1.9.*     , fb   extensions:     TypeFamilies
src/Facebook/Auth.hs view
@@ -32,6 +32,7 @@ import Data.String (IsString(..))  import qualified Control.Exception.Lifted as E+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as AE import qualified Data.Aeson.Types as AE import qualified Data.Attoparsec.Char8 as AB@@ -58,7 +59,7 @@  -- | Get an app access token from Facebook using your -- credentials.-getAppAccessToken :: (C.MonadResource m, MonadBaseControl IO m) =>+getAppAccessToken :: (R.MonadResource m, MonadBaseControl IO m) =>                      FacebookT Auth m AppAccessToken getAppAccessToken =   runResourceInFb $ do@@ -104,7 +105,7 @@ -- request query parameters passed to your 'RedirectUrl' and give -- to this function that will complete the user authentication -- flow and give you an @'UserAccessToken'@.-getUserAccessTokenStep2 :: (MonadBaseControl IO m, C.MonadResource m) =>+getUserAccessTokenStep2 :: (MonadBaseControl IO m, R.MonadResource m) =>                            RedirectUrl -- ^ Should be exactly the same                                        -- as in 'getUserAccessTokenStep1'.                         -> [Argument]  -- ^ Query parameters.@@ -236,7 +237,7 @@ -- access token may not be valid as well.  For example, in the -- case of an user access token, they may have changed their -- password, logged out from Facebook or blocked your app.-isValid :: (MonadBaseControl IO m, C.MonadResource m) =>+isValid :: (MonadBaseControl IO m, R.MonadResource m) =>            AccessToken anyKind         -> FacebookT anyAuth m Bool isValid token = do@@ -270,7 +271,7 @@ -- have the same data and expiration time as before, but you -- can't assume this).  Note that expired access tokens can't be -- extended, only valid tokens.-extendUserAccessToken :: (MonadBaseControl IO m, C.MonadResource m) =>+extendUserAccessToken :: (MonadBaseControl IO m, R.MonadResource m) =>                          UserAccessToken                       -> FacebookT Auth m (Either FacebookException UserAccessToken) extendUserAccessToken token@(UserAccessToken uid data_ _)@@ -354,7 +355,7 @@   -- | Get detailed information about an access token.-debugToken :: (MonadBaseControl IO m, C.MonadResource m) =>+debugToken :: (MonadBaseControl IO m, R.MonadResource m) =>               AppAccessToken  -- ^ Your app access token.            -> AccessTokenData -- ^ The access token you want to debug.            -> FacebookT Auth m DebugToken
src/Facebook/Base.hs view
@@ -22,6 +22,7 @@ import qualified Control.Exception.Lifted as E import Control.Monad.Trans.Class (MonadTrans) import Control.Monad.Trans.Control (MonadBaseControl)+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A import qualified Data.Attoparsec.Char8 as AT import qualified Data.ByteString as B@@ -86,12 +87,12 @@  -- | Converts a plain 'H.Response' coming from 'H.http' into a -- JSON value.-asJson :: (MonadIO m, MonadTrans t, C.MonadThrow m, A.FromJSON a) =>+asJson :: (MonadIO m, MonadTrans t, R.MonadThrow m, A.FromJSON a) =>           H.Response (C.ResumableSource m ByteString)        -> t m a asJson = lift . asJsonHelper -asJsonHelper :: (MonadIO m, C.MonadThrow m, A.FromJSON a) =>+asJsonHelper :: (MonadIO m, R.MonadThrow m, A.FromJSON a) =>                 H.Response (C.ResumableSource m ByteString)              -> m a asJsonHelper response = do@@ -140,14 +141,14 @@  -- | Same as 'H.http', but tries to parse errors and throw -- meaningful 'FacebookException'@s@.-fbhttp :: (MonadBaseControl IO m, C.MonadResource m) =>+fbhttp :: (MonadBaseControl IO m, R.MonadResource m) =>           H.Request        -> FacebookT anyAuth m (H.Response (C.ResumableSource m ByteString)) fbhttp req = do   manager <- getManager   lift (fbhttpHelper manager req) -fbhttpHelper :: (MonadBaseControl IO m, C.MonadResource m) =>+fbhttpHelper :: (MonadBaseControl IO m, R.MonadResource m) =>                 H.Manager              -> H.Request              -> m (H.Response (C.ResumableSource m ByteString))@@ -192,7 +193,7 @@  -- | Send a @HEAD@ request just to see if the resposne status -- code is 2XX (returns @True@) or not (returns @False@).-httpCheck :: (MonadBaseControl IO m, C.MonadResource m) =>+httpCheck :: (MonadBaseControl IO m, R.MonadResource m) =>              H.Request           -> FacebookT anyAuth m Bool 
src/Facebook/FQL.hs view
@@ -13,8 +13,8 @@ import Data.Time (UTCTime) import Data.Time.Clock.POSIX (posixSecondsToUTCTime) +import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A-import qualified Data.Conduit as C import qualified Data.HashMap.Strict as HMS  import Facebook.Types@@ -25,7 +25,7 @@   -- | Query the Facebook Graph using FQL.-fqlQuery :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+fqlQuery :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>             Text                        -- ^ FQL Query          -> Maybe (AccessToken anyKind) -- ^ Optional access token          -> FacebookT anyAuth m (Pager a)
src/Facebook/Graph.hs view
@@ -24,10 +24,10 @@ import Data.Word (Word, Word8, Word16, Word32, Word64) import System.Locale (defaultTimeLocale) +import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A import qualified Data.Aeson.Encode as AE (fromValue) import qualified Data.ByteString.Char8 as B-import qualified Data.Conduit as C import qualified Data.Text.Encoding as TE import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Builder as TLB@@ -44,7 +44,7 @@   -- | Make a raw @GET@ request to Facebook's Graph API.-getObject :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+getObject :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>              Text           -- ^ Path (should begin with a slash @\/@)           -> [Argument]     -- ^ Arguments to be passed to Facebook           -> Maybe (AccessToken anyKind) -- ^ Optional access token@@ -55,7 +55,7 @@   -- | Make a raw @POST@ request to Facebook's Graph API.-postObject :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+postObject :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>               Text                -- ^ Path (should begin with a slash @\/@)            -> [Argument]          -- ^ Arguments to be passed to Facebook            -> AccessToken anyKind -- ^ Access token@@ -64,7 +64,7 @@   -- | Make a raw @DELETE@ request to Facebook's Graph API.-deleteObject :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+deleteObject :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>                 Text                -- ^ Path (should begin with a slash @\/@)              -> [Argument]          -- ^ Arguments to be passed to Facebook              -> AccessToken anyKind -- ^ Access token@@ -73,7 +73,7 @@   -- | Helper function used by 'postObject' and 'deleteObject'.-methodObject :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+methodObject :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>                 HT.Method              -> Text                -- ^ Path (should begin with a slash @\/@)              -> [Argument]          -- ^ Arguments to be passed to Facebook@@ -87,7 +87,7 @@  -- | Make a raw @GET@ request to the /search endpoint of Facebook’s -- Graph API.  Returns a raw JSON 'A.Value'.-searchObjects :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a)+searchObjects :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a)               => Text                  -- ^ A Facebook object type to search for               -> Text                  -- ^ The keyword to search for               -> [Argument]            -- ^ Additional arguments to pass
src/Facebook/Monad.hs view
@@ -1,4 +1,11 @@-{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, TypeFamilies, UndecidableInstances #-}+{-# LANGUAGE DeriveDataTypeable,+             FlexibleContexts,+             FlexibleInstances,+             GeneralizedNewtypeDeriving,+             MultiParamTypeClasses,+             StandaloneDeriving,+             TypeFamilies,+             UndecidableInstances #-} module Facebook.Monad     ( FacebookT     , Auth@@ -33,7 +40,6 @@ import Data.Typeable (Typeable) import qualified Control.Monad.Trans.Resource as R -import qualified Data.Conduit as C import qualified Network.HTTP.Conduit as H  import Facebook.Types@@ -45,10 +51,11 @@ -- have supplied your 'Credentials') or 'NoAuth' (you have not -- supplied any 'Credentials'). newtype FacebookT auth m a = F { unF :: ReaderT FbData m a }-    deriving ( Functor, Applicative, Alternative, Monad-             , MonadFix, MonadPlus, MonadIO, MonadTrans-             , R.MonadThrow, R.MonadActive, R.MonadResource )+    deriving ( Functor, Applicative, Alternative, Monad, MonadFix+             , MonadPlus, MonadIO, MonadTrans, R.MonadThrow ) +deriving instance (R.MonadResource m, MonadBase IO m) => R.MonadResource (FacebookT auth m)+ instance MonadBase b m => MonadBase b (FacebookT auth m) where     liftBase = lift . liftBase @@ -136,10 +143,10 @@   -- | Run a 'ResourceT' inside a 'FacebookT'.-runResourceInFb :: (C.MonadResource m, MonadBaseControl IO m) =>-                   FacebookT anyAuth (C.ResourceT m) a+runResourceInFb :: (R.MonadResource m, MonadBaseControl IO m) =>+                   FacebookT anyAuth (R.ResourceT m) a                 -> FacebookT anyAuth m a-runResourceInFb (F inner) = F $ ask >>= lift . C.runResourceT . runReaderT inner+runResourceInFb (F inner) = F $ ask >>= lift . R.runResourceT . runReaderT inner   -- | Transform the computation inside a 'FacebookT'.
src/Facebook/Object/Action.hs view
@@ -10,7 +10,7 @@ import Data.String (IsString(..)) import Data.Text (Text) -import qualified Data.Conduit as C+import qualified Control.Monad.Trans.Resource as R  import Facebook.Types import Facebook.Monad@@ -25,7 +25,7 @@ -- >              [ "recipe" #= "http://example.com/cookie.html" -- >              , "when"   #= now ] -- >              token-createAction :: (C.MonadResource m, MonadBaseControl IO m)  =>+createAction :: (R.MonadResource m, MonadBaseControl IO m)  =>                 Action     -- ^ Action kind to be created.              -> [Argument] -- ^ Arguments of the action.              -> Maybe AppAccessToken@@ -37,7 +37,7 @@              -> FacebookT Auth m Id createAction (Action action) query mapptoken usertoken = do   creds <- getCreds-  let post :: (C.MonadResource m, MonadBaseControl IO m)  => Text -> AccessToken anyKind -> FacebookT Auth m Id+  let post :: (R.MonadResource m, MonadBaseControl IO m)  => Text -> AccessToken anyKind -> FacebookT Auth m Id       post prepath = postObject (prepath <> appName creds <> ":" <> action) query   case mapptoken of     Nothing       -> post "/me/" usertoken
src/Facebook/Object/Checkin.hs view
@@ -14,8 +14,8 @@ import Data.Time (UTCTime) import Data.Typeable (Typeable) +import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A-import qualified Data.Conduit as C   import Facebook.Types@@ -68,7 +68,7 @@ -- | Get a checkin from its ID.  The user access token is -- optional, but when provided more information can be returned -- back by Facebook.-getCheckin :: (C.MonadResource m, MonadBaseControl IO m) =>+getCheckin :: (R.MonadResource m, MonadBaseControl IO m) =>               Id                    -- ^ Checkin ID.            -> [Argument]            -- ^ Arguments to be passed to Facebook.            -> Maybe UserAccessToken -- ^ Optional user access token.@@ -78,7 +78,7 @@  -- | Creates a 'check-in' and returns its ID. Place and -- coordinates are both required by Facebook.-createCheckin :: (C.MonadResource m, MonadBaseControl IO m)  =>+createCheckin :: (R.MonadResource m, MonadBaseControl IO m)  =>                  Id               -- ^ Place ID.               -> GeoCoordinates   -- ^ Coordinates.               -> [Argument]       -- ^ Other arguments of the action.
src/Facebook/Object/FriendList.hs view
@@ -13,9 +13,8 @@ import Data.Text (Text) import Data.Typeable (Typeable) --- import qualified Control.Exception.Lifted as E+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A-import qualified Data.Conduit as C   import Facebook.Types@@ -71,7 +70,7 @@  -- | Get the friend lists of the given user. getUserFriendLists ::-     (C.MonadResource m, MonadBaseControl IO m) =>+     (R.MonadResource m, MonadBaseControl IO m) =>      UserId          -- ^ User ID or @\"me\"@.   -> [Argument]      -- ^ Arguments to be passed to Facebook.   -> UserAccessToken -- ^ User access token.@@ -81,11 +80,10 @@  -- | Get the members of a friend list. getFriendListMembers ::-     (C.MonadResource m, MonadBaseControl IO m) =>+     (R.MonadResource m, MonadBaseControl IO m) =>      Id              -- ^ List ID.   -> [Argument]      -- ^ Arguments to be passed to Facebook.   -> UserAccessToken -- ^ User access token.   -> FacebookT anyAuth m (Pager Friend) getFriendListMembers id_ query token =   getObject ("/" <> idCode id_ <> "/members") query (Just token)-
src/Facebook/Object/Order.hs view
@@ -15,8 +15,8 @@ import Data.Typeable (Typeable) import Data.Time.LocalTime (ZonedTime) +import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A-import qualified Data.Conduit as C  import Facebook.Types import Facebook.Monad@@ -84,7 +84,7 @@  -- | Get an 'Order' using its 'OrderId'.  The user access token -- is mandatory.-getOrder :: (C.MonadResource m, MonadBaseControl IO m) =>+getOrder :: (R.MonadResource m, MonadBaseControl IO m) =>            OrderId         -- ^ Order ID.         -> UserAccessToken -- ^ User access token.         -> FacebookT anyAuth m Order
src/Facebook/Object/Page.hs view
@@ -12,8 +12,8 @@ import Control.Monad (mzero) import Control.Monad.Trans.Control (MonadBaseControl) import Data.Aeson ((.:), (.:?))+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A-import qualified Data.Conduit as C import Data.Text (Text) import Data.Typeable (Typeable) @@ -61,7 +61,7 @@   -- | Get a page using its ID. The user access token is optional.-getPage :: (C.MonadResource m, MonadBaseControl IO m)+getPage :: (R.MonadResource m, MonadBaseControl IO m)         => Id                    -- ^ Page ID         -> [Argument]            -- ^ Arguments to be passed to Facebook         -> Maybe UserAccessToken -- ^ Optional user access token@@ -70,7 +70,7 @@   -- | Search pages by keyword. The user access token is optional.-searchPages :: (C.MonadResource m, MonadBaseControl IO m)+searchPages :: (R.MonadResource m, MonadBaseControl IO m)             => Text                  -- ^ Keyword to search for             -> [Argument]            -- ^ Arguments to pass to Facebook             -> Maybe UserAccessToken -- ^ Optional user access token
src/Facebook/Object/User.hs view
@@ -16,9 +16,8 @@ import Data.Text (Text) import Data.Typeable (Typeable) --- import qualified Control.Exception.Lifted as E+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A-import qualified Data.Conduit as C   import Facebook.Types@@ -86,7 +85,7 @@ -- back by Facebook.  The user ID may be @\"me\"@, in which -- case you must provide an user access token and information -- about the token's owner is given.-getUser :: (C.MonadResource m, MonadBaseControl IO m) =>+getUser :: (R.MonadResource m, MonadBaseControl IO m) =>            UserId         -- ^ User ID or @\"me\"@.         -> [Argument]     -- ^ Arguments to be passed to Facebook.         -> Maybe UserAccessToken -- ^ Optional user access token.@@ -95,7 +94,7 @@   -- | Search users by keyword.-searchUsers :: (C.MonadResource m, MonadBaseControl IO m)+searchUsers :: (R.MonadResource m, MonadBaseControl IO m)             => Text             -> [Argument]             -> Maybe UserAccessToken@@ -105,7 +104,7 @@  -- | Get a list of check-ins made by a given user. getUserCheckins ::-     (C.MonadResource m, MonadBaseControl IO m) =>+     (R.MonadResource m, MonadBaseControl IO m) =>      UserId          -- ^ User ID or @\"me\"@.   -> [Argument]      -- ^ Arguments to be passed to Facebook.   -> UserAccessToken -- ^ User access token.@@ -130,7 +129,7 @@  -- | Get the list of friends of the given user. getUserFriends ::-     (C.MonadResource m, MonadBaseControl IO m) =>+     (R.MonadResource m, MonadBaseControl IO m) =>      UserId          -- ^ User ID or @\"me\"@.   -> [Argument]      -- ^ Arguments to be passed to Facebook.   -> UserAccessToken -- ^ User access token.
src/Facebook/Pager.hs view
@@ -15,6 +15,7 @@ import Control.Monad.Trans.Resource (MonadResourceBase) import Data.Typeable (Typeable) +import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A import qualified Data.Conduit as C import qualified Network.HTTP.Conduit as H@@ -66,7 +67,7 @@ -- | Tries to fetch the next page of a 'Pager'.  Returns -- 'Nothing' whenever the current @Pager@ does not have a -- 'pagerNext'.-fetchNextPage :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+fetchNextPage :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>                  Pager a -> FacebookT anyAuth m (Maybe (Pager a)) fetchNextPage = fetchHelper pagerNext @@ -74,13 +75,13 @@ -- | Tries to fetch the previous page of a 'Pager'.  Returns -- 'Nothing' whenever the current @Pager@ does not have a -- 'pagerPrevious'.-fetchPreviousPage :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+fetchPreviousPage :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>                      Pager a -> FacebookT anyAuth m (Maybe (Pager a)) fetchPreviousPage = fetchHelper pagerPrevious   -- | (Internal) See 'fetchNextPage' and 'fetchPreviousPage'.-fetchHelper :: (C.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>+fetchHelper :: (R.MonadResource m, MonadBaseControl IO m, A.FromJSON a) =>                (Pager a -> Maybe String) -> Pager a -> FacebookT anyAuth m (Maybe (Pager a)) fetchHelper pagerRef pager =   case pagerRef pager of@@ -121,6 +122,6 @@       go [] (Just next) = do         req <- liftIO (H.parseUrl next)         let get = fbhttpHelper manager req { H.redirectCount = 3 }-        start =<< lift (C.runResourceT $ asJsonHelper =<< get)+        start =<< lift (R.runResourceT $ asJsonHelper =<< get)       start p = go (pagerData p) $! pagerRef p   return (start pager)
src/Facebook/RealTime.hs view
@@ -22,6 +22,7 @@ import Data.Text.Encoding (encodeUtf8) import Data.Typeable (Typeable) +import qualified Control.Monad.Trans.Resource as R import qualified Crypto.Classes as Crypto import qualified Crypto.HMAC as Crypto import qualified Data.Aeson as A@@ -92,7 +93,7 @@ -- If there was any previous subscription for the given -- 'RealTimeUpdateObject', it's overriden by this one (even if -- the other subscription had a different callback URL).-modifySubscription :: (C.MonadResource m, MonadBaseControl IO m) =>+modifySubscription :: (R.MonadResource m, MonadBaseControl IO m) =>                       RealTimeUpdateObject                       -- ^ Type of objects whose subscription you                       -- and to add or modify.@@ -148,7 +149,7 @@  -- | List current real-time update subscriptions. listSubscriptions ::-  (C.MonadResource m, MonadBaseControl IO m) =>+  (R.MonadResource m, MonadBaseControl IO m) =>   AppAccessToken -> FacebookT Auth m [RealTimeUpdateSubscription] listSubscriptions apptoken = do   path <- getSubscriptionsPath
src/Facebook/TestUsers.hs view
@@ -21,9 +21,9 @@   import qualified Control.Exception.Lifted as E+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A import qualified Data.ByteString.Char8 as B-import qualified Data.Conduit as C   import Facebook.Auth@@ -98,7 +98,7 @@   -- | Create a new test user.-createTestUser :: (C.MonadResource m, MonadBaseControl IO m)+createTestUser :: (R.MonadResource m, MonadBaseControl IO m)                   => CreateTestUser -- ^ How the test user should be                                     -- created.                   -> AppAccessToken -- ^ Access token for your app.@@ -110,7 +110,7 @@   -- | Get a list of test users.-getTestUsers :: (C.MonadResource m, MonadBaseControl IO m)+getTestUsers :: (R.MonadResource m, MonadBaseControl IO m)                 => AppAccessToken      -- ^ Access token for your app.                 -> FacebookT Auth m (Pager TestUser) getTestUsers token = do@@ -119,7 +119,7 @@   -- | Remove an existing test user.-removeTestUser :: (C.MonadResource m, MonadBaseControl IO m)+removeTestUser :: (R.MonadResource m, MonadBaseControl IO m)                   => TestUser       -- ^ The TestUser to be removed.                   -> AppAccessToken -- ^ Access token for your app (ignored since fb 0.14.7).                   -> FacebookT Auth m Bool@@ -136,7 +136,7 @@ -- format: \"\/userB_id\/friends\/userA_id\" with the access token of -- user B as query parameter. The first call creates a friend request -- and the second call accepts the friend request.-makeFriendConn :: (C.MonadResource m, MonadBaseControl IO m)+makeFriendConn :: (R.MonadResource m, MonadBaseControl IO m)                   => TestUser                   -> TestUser                   -> FacebookT Auth m ()@@ -171,7 +171,7 @@ -- | Same as 'getObject', but instead of parsing the result -- as a JSON, it tries to parse either as "true" or "false". -- Used only by the Test User API bindings.-getObjectBool :: (C.MonadResource m, MonadBaseControl IO m)+getObjectBool :: (R.MonadResource m, MonadBaseControl IO m)                  => Text                  -- ^ Path (should begin with a slash @\/@).                  -> [Argument]
tests/Main.hs view
@@ -22,6 +22,7 @@   import qualified Control.Exception.Lifted as E+import qualified Control.Monad.Trans.Resource as R import qualified Data.Aeson as A import qualified Data.Aeson.Types as A import qualified Data.ByteString.Char8 as B@@ -100,14 +101,14 @@     facebookTests "Production tier: "                   creds                   manager-                  (C.runResourceT . FB.runFacebookT creds manager)-                  (C.runResourceT . FB.runNoAuthFacebookT manager)+                  (R.runResourceT . FB.runFacebookT creds manager)+                  (R.runResourceT . FB.runNoAuthFacebookT manager)     -- ...and the other in Facebook's beta tier.     facebookTests "Beta tier: "                   creds                   manager-                  (C.runResourceT . FB.beta_runFacebookT creds manager)-                  (C.runResourceT . FB.beta_runNoAuthFacebookT manager)+                  (R.runResourceT . FB.beta_runFacebookT creds manager)+                  (R.runResourceT . FB.beta_runNoAuthFacebookT manager)      -- Tests that don't depend on which tier is chosen.     libraryTests manager@@ -115,8 +116,8 @@ facebookTests :: String               -> FB.Credentials               -> H.Manager-              -> (forall a. FB.FacebookT FB.Auth   (C.ResourceT IO) a -> IO a)-              -> (forall a. FB.FacebookT FB.NoAuth (C.ResourceT IO) a -> IO a)+              -> (forall a. FB.FacebookT FB.Auth   (R.ResourceT IO) a -> IO a)+              -> (forall a. FB.FacebookT FB.NoAuth (R.ResourceT IO) a -> IO a)               -> Spec facebookTests pretitle creds manager runAuth runNoAuth = do   let describe' = describe . (pretitle ++)@@ -127,7 +128,7 @@         token <- FB.getAppAccessToken         FB.isValid token #?= True     it "throws a FacebookException on invalid credentials" $-      C.runResourceT $+      R.runResourceT $       FB.runFacebookT invalidCredentials manager $ do         ret <- E.try $ FB.getAppAccessToken         case ret  of@@ -162,7 +163,7 @@           case FB.dtAccessToken ret of             Nothing -> fail "dtAccessToken is Nothing"             Just t -> do-              let f :: FB.UserAccessToken -> FB.FacebookT FB.Auth (C.ResourceT IO) ()+              let f :: FB.UserAccessToken -> FB.FacebookT FB.Auth (R.ResourceT IO) ()                   f (FB.UserAccessToken uid dt exps) = do                     uid &?= FB.tuId testUser                     dt  &?= testUserAccessTokenData@@ -220,7 +221,7 @@         length val `seq` return ()    describe' "fetchNextPage" $ do-    let fetchNextPageWorks :: FB.Pager A.Value -> FB.FacebookT anyAuth (C.ResourceT IO) ()+    let fetchNextPageWorks :: FB.Pager A.Value -> FB.FacebookT anyAuth (R.ResourceT IO) ()         fetchNextPageWorks pager           | isNothing (FB.pagerNext pager) = return ()           | otherwise = FB.fetchNextPage pager >>= maybe not_ (\_ -> return ())@@ -234,7 +235,7 @@         fetchNextPageWorks =<< FB.getObject "/app/insights" [] (Just token)    describe' "fetchNextPage/fetchPreviousPage" $ do-    let backAndForthWorks :: FB.Pager A.Value -> FB.FacebookT anyAuth (C.ResourceT IO) ()+    let backAndForthWorks :: FB.Pager A.Value -> FB.FacebookT anyAuth (R.ResourceT IO) ()         backAndForthWorks pager = do           Just pager2 <- FB.fetchNextPage     pager           Just pager3 <- FB.fetchPreviousPage pager2@@ -323,7 +324,7 @@         token   <- FB.getAppAccessToken         pager   <- FB.getTestUsers token         src     <- FB.fetchAllNextPages pager-        oldList <- liftIO $ C.runResourceT $ src C.$$ CL.consume+        oldList <- liftIO $ R.runResourceT $ src C.$$ CL.consume         withTestUser D.def $ \testUser -> do           let (%?=) = (&?=) `on` fmap FB.tuId               (//)  = S.difference `on` S.fromList@@ -395,8 +396,8 @@         exampleSig  = "vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso"         exampleData = "eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0"         exampleCreds = FB.Credentials "name" "id" "secret"-        runExampleAuth :: FB.FacebookT FB.Auth (C.ResourceT IO) a -> IO a-        runExampleAuth = C.runResourceT . FB.runFacebookT exampleCreds manager+        runExampleAuth :: FB.FacebookT FB.Auth (R.ResourceT IO) a -> IO a+        runExampleAuth = R.runResourceT . FB.runFacebookT exampleCreds manager     it "works for Facebook example" $ do       runExampleAuth $ do         ret <- FB.parseSignedRequest (B.concat [exampleSig, ".", exampleData])@@ -481,7 +482,7 @@  -- | Perform an action with a new test user. Remove the new test user -- after the action is performed.-withTestUser :: (C.MonadResource m, MonadBaseControl IO m)+withTestUser :: (R.MonadResource m, MonadBaseControl IO m)                 => FB.CreateTestUser                 -> (FB.TestUser -> FB.FacebookT FB.Auth m a)                 -> FB.FacebookT FB.Auth m a