wd      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Nonenewtype for  that follows Facebook's  conventions of JSON parsing.  As a string, while aeson expects a format of %FT%T%Q, , Facebook gives time values formatted as %FT%T%z.  As a number, # accepts a number of seconds since  the Unix epoch. "An argument given to an API call. Phantom type used mark an   as an app access  token. Phantom type used mark an   as an user access  token. A Facebook user ID such as  1008905713901. &The identification code of an object. 0The access token data that is passed to Facebook's API  calls. Type synonym for   . Type synonym for   . <An access token. While you can make some API calls without = an access token, many require an access token and some will = give you more information with an appropriate access token. &There are two kinds of access tokens:  User access token( An access token obtained after an user  accepts your application. Let's you access more information = about that user and act on their behalf (depending on which  permissions you've asked for). App access token) An access token that allows you to take . administrative actions for your application. :These two kinds of access tokens are distinguished by the  phantom type on  , which can be  or  . ;Credentials that you get for your app when you register on  Facebook. 3Your application name (e.g. for Open Graph calls). Your application ID. Your application secret key.  for .  for . Get the access token data. 9Expire time of an access token. It may never expire, in  which case it will be Nothing. )Get the user ID of an user access token.  Synonym for .    None(Which Facebook tier should be used (see   2https://developers.facebook.com/support/beta-tier/). Internal data kept inside . Can be ! #Phantom type stating that you have not provided your  . This means that you'll be limited about which  APIs you'll be able use. 1Phantom type stating that you have provided your  ( and thus have access to the whole API. FacebookT auth m a is this library's monad transformer. > Contains information needed to issue commands and queries to  Facebook. The phantom type auth may be either  (you  have supplied your ) or  (you have not  supplied any ). Run a computation in the  monad transformer with  your credentials. Run a computation in the  monad without  credentials. Same as , but uses Facebook's beta tier (see   2https://developers.facebook.com/support/beta-tier/). Same as , but uses Facebook' s beta tier  (see  2https://developers.facebook.com/support/beta-tier/).  Get the user's credentials. Get the . Get the . (Run a pure function that depends on the  being used. Run a  ResourceT inside a . #Transform the computation inside a . Your app's credentials. Connection manager (see ). None 5An exception that may be thrown by functions on this : package. Includes any information provided by Facebook. An exception coming from the fb package's code. #An exception coming from Facebook. :Internal class for types that may be passed on queries to  Facebook's API. 7Prepend to the given query the parameters necessary to " pass this data type to Facebook. A plain ) to a Facebook API. Use this instead of   when creating new s for Facebook.  Converts a plain   coming from   into a  JSON value.  Converts a plain   into a string .  Same as  &, but tries to parse errors and throw  meaningful s. Try to parse the WWW-Authenticate header of a Facebook  response. Send a HEAD, request just to see if the resposne status  code is 2XX (returns True) or not (returns False). True if the the Status is ok (i.e. 2XX).  !Path. Access token.  Parameters.     !    !!   None":Many Graph API results are returned as a JSON object with  the following structure:    {  "data": [  ...item 1...,  :  ...item n...  ],  "paging": {  "previous": "http:...link to previous page...",  "next": "http:...link to next page..."  }  }  Only the "data"* field is required, the others may or may  not appear. A Pager a2 datatype encodes such result where each item has  type a. You may use functions ' and  (" to navigate through the results. '"Tries to fetch the next page of a " . Returns   whenever the current Pager does not have a  &. (&Tries to fetch the previous page of a " . Returns   whenever the current Pager does not have a  %. (Internal) See ' and (. ),Tries to fetch all next pages and returns a  with  all results. The  will include the results from < this page as well. Previous pages will not be considered. ' Next pages will be fetched on-demand. *0Tries to fetch all previous pages and returns a   with all results. The  will include the results 1 from this page as well. Next pages will not be 8 considered. Previous pages will be fetched on-demand. (Internal) See ) and *. "#$%&'()* "#$%&'()*"#$%&'()*None+0Detailed information about an access token (cf. @). Helper used in @. Unfortunately, we can't use Pager here. 5;A permission that is asked for the user when he authorizes $ your app. Please refer to Facebook's documentation at   ?https://developers.facebook.com/docs/reference/api/permissions/ ) to see which permissions are available.  This is a newtype of  that supports only .  This means that to create a 5 you should use the  OverloadedStrings# language extension. For example, $ {-# LANGUAGE OverloadedStrings #-}   perms :: [Permission] 6 perms = ["user_about_me", "email", "offline_access"] 6Retrieves the  back from a 5 . Most of  the time you won')t need to use this function, but you may  need it if you're a library author. 73URL where the user is redirected to after Facebook ? authenticates the user authorizes your application. This URL : should be inside the domain registered for your Facebook  application. 81Get an app access token from Facebook using your  credentials. 99The first step to get an user access token. Returns the > Facebook URL you should redirect you user to. Facebook will = authenticate the user, authorize your app and then redirect ! the user back into the provider 7. :=The second step to get an user access token. If the user is @ successfully authenticate and they authorize your application,  then they'll be redirected back to the 7 you've  passed to 9. You should take the ) request query parameters passed to your 7 and give = to this function that will complete the user authentication  flow and give you an  . 5Attoparsec parser for user access tokens returned by @ Facebook as a query string. Returns an user access token with  a broken . ;=The URL an user should be redirected to in order to log them = out of their Facebook session. Facebook will then redirect < the user to the provided URL after logging them out. Note , that, at the time of this writing, Facebook's policies require > you to log the user out of Facebook when they ask to log out  of your site. ?Note also that Facebook may refuse to redirect the user to the ? provided URL if their user access token is invalid. In order . to prevent this bug, we suggest that you use = before - redirecting the user to the URL provided by ;  since this function doesn't do any validity checks. <True, if the access token has expired, otherwise False. =True2 if the access token is valid. An expired access  token is not valid (see <). However, a non-expired = access token may not be valid as well. For example, in the ; case of an user access token, they may have changed their 9 password, logged out from Facebook or blocked your app. >8Extend the expiration time of an user access token (see   @https://developers.facebook.com/docs/offline-access-deprecation/,   ?https://developers.facebook.com/roadmap/offline-access-removal/). 7 Only short-lived user access tokens may extended into ? long-lived user access tokens, you must get a new short-lived 6 user access token if you need to extend a long-lived  one. Returns Left exc' if there is an error while extending,  or  Right token- with the new user access token (which could ; have the same data and expiration time as before, but you  can'4t assume this). Note that expired access tokens can't be  extended, only valid tokens. ?!Parses a Facebook signed request  ( Chttps://developers.facebook.com/docs/authentication/signed_request/), : verifies its authencity and integrity using the HMAC and  decodes its JSON object.  The base64-bytestring package provides two different  decoding functions for  base64url: ! and  "#. The former is too strict for us = since Facebook does add padding to its signed requests, but 7 the latter is too lenient and will accept *anything*. <Instead of being too lenient, we just use this function add 7 the padding base to the encoded string, thus allowing  ! to chew it. @0Get detailed information about an access token. # Note: this instance always sets 4 to  , but @ will update this field before  returning the final +. This is done because we  need the  , which is not part of FB's  response. #+,-./01234$%&'5(6789:Should be exactly the same  as in 9. Query parameters. ) ;The user's access token. &URL the user should be directed to in  your site domain. Logout URL in  https://www.facebook.com/ (or on  https://www.beta.facebook.com/ when  using the beta tier). <=>? Encoded Facebook signed request  @Your app access token. $The access token you want to debug. #*+,-+,-./0123456789:;<=>?@+ ,-./01234$%&'5(6789:;<=>? @#*+,-None$A A tag (i.e. "I'll tag you on my post"). CWho is tagged. DName of the tagged person. EGeographical coordinates. IA geographical location. Q8Information about a place. This is not a Graph Object,  instead it'1s just a field of a Object. (Not to be confused  with the Page object.) SPage ID. TPage name. V;Class for data types that may be represented as a Facebook  simple type. (see   ;https://developers.facebook.com/docs/opengraph/simpletypes/). X Make a raw GET request to Facebook' s Graph API. Y Make a raw POST request to Facebook' s Graph API. Z Make a raw DELETE request to Facebook' s Graph API. .Helper function used by Y and Z. [ Make a raw GET request to the /search endpoint of Facebook s  Graph API. Returns a raw JSON /. \ Create an  with a V. See the docs on   createAction for an example. 09A comma-separated list of simple types. This definition  doesn'4t work everywhere, just for a few combinations that  Facebook uses (e.g. [Int]#). Also, encoding a list of lists = is the same as encoding the concatenation of all lists. In > other words, this instance is here more for your convenience ) than to make sure your code is correct. 15 is a newtype of  2 An object's  code. 3Facebook's simple type String. 4Facebook's simple type String. 5Facebook's simple type Integer. 6Facebook's simple type Integer. 7Facebook's simple type Integer. 8Facebook's simple type Integer. 9Facebook's simple type Integer. :Facebook's simple type Integer. ;Facebook's simple type Integer. <Facebook's simple type Integer. =Facebook's simple type Integer. >Facebook's simple type Integer. ?Facebook's simple type Float. @Facebook's simple type Float% with less precision than supported. AFacebook's simple type DateTime. BFacebook's simple type DateTime. CFacebook's simple type DateTime with only the date. DFacebook's simple type Boolean. 8ABCDEFGHIJKLMNOPQRSTUVWX Path (should begin with a slash /) #Arguments to be passed to Facebook Optional access token Y Path (should begin with a slash /) #Arguments to be passed to Facebook  Access token Z Path (should begin with a slash /) #Arguments to be passed to Facebook  Access token . Path (should begin with a slash /) #Arguments to be passed to Facebook  Access token [%A Facebook object type to search for The keyword to search for Additional arguments to pass Optional access token \EFGHIJ0123456789:;<=>?@ABCDABCDEFGHIJKLMNOPQRSTUVWXYZ[\&ABCDEFGHIJKLMNOPQRSTUVWXYZ.[\EFGHIJ0123456789:;<=>?@ABCDNone]A Facebook page (see   8https://developers.facebook.com/docs/reference/api/page/). NOTE:: Does not yet support all fields. Please file an issue if  you need any other fields. l<Get a page using its ID. The user access token is optional. m<Search pages by keyword. The user access token is optional. ]^_`abcdefghijklPage ID #Arguments to be passed to Facebook Optional user access token mKeyword to search for Arguments to pass to Facebook Optional user access token K]^_`abcdefghijklm]^_`abcdefghijklmK Nonen0An action of your app. Please refer to Facebook's  documentation at   Khttps://developers.facebook.com/docs/opengraph/keyconcepts/#actions-objects $ to see how you can create actions.  This is a newtype of  that supports only .  This means that to create an n you should use the  OverloadedStrings# language extension. For example, $ {-# LANGUAGE OverloadedStrings #-}   foo token = do  ... # createAction "cook" [...] token o(Creates an Open Graph action on the user's timeline. Returns  the , of the newly created action. For example:  now <- liftIO getCurrentTime  createAction "cook" = [ "recipe" #= "http://example.com/cookie.html" " , "when" #= now ]  token L Since 0.7.1 M Since 0.7.1 N Since 0.7.1 nOPoAction kind to be created. Arguments of the action. )Optional app access token (optional with ' respect to this library, since you can't make , this mandatory by changing the settings of  your action on Facebook). Required user access token. QLMNRnOPonOPoQLMNR Nonep2Information about the user who made the check-in. tA Facebook check-in (see   ;https://developers.facebook.com/docs/reference/api/checkin/). NOTE: We still don'"t support all fields supported by @ Facebook. Please fill an issue if you need access to any other  fields. |5Get a checkin from its ID. The user access token is > optional, but when provided more information can be returned  back by Facebook. } Creates a  'check-in' and returns its ID. Place and , coordinates are both required by Facebook. pqrstuvwxyz{| Checkin ID. $Arguments to be passed to Facebook. Optional user access token. } Place ID.  Coordinates. Other arguments of the action. Required user access token. STpqrstuvwxyz{|}pqrstuvwxyz{|}ST None~A friend connection of a . An user' s gender. A Facebook user profile (see   8https://developers.facebook.com/docs/reference/api/user/). NOTE: We still don'"t support all fields supported by @ Facebook. Please fill an issue if you need access to any other  fields. 9Get an user using his user ID. The user access token is > optional, but when provided more information can be returned ' 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. Search users by keyword. .Get a list of check-ins made by a given user. +Get the list of friends of the given user. ~ User ID or "me". $Arguments to be passed to Facebook. Optional user access token.  User ID or "me". $Arguments to be passed to Facebook. User access token.  User ID or "me". $Arguments to be passed to Facebook. User access token. UVWX~ ~ UVWX None@A trimmed down version of Facebook Application as it is used in .  A Facebook  status type.  A Facebook Order oject.  Id type. Get an  using its . The user access token  is mandatory. YZ[\]^_` Order ID. User access token. abcYZ[\]^_`YZ[`_^]\ abc None A notification for the  object. When data changes and there'!s a valid subscription, Facebook  will POST to your  with a JSON-encoded ) object containing the notifications. A  'RealTimeUpdateNotification a' represents such object where  a is type of the entries (e.g.,  ). If you have a single  for different kinds # of notifications, you may parse a RealTimeUpdateNotification  / and then manually parse the / depending on  the value of . We recommend using . :Information returned by Facebook about a real-time update  notification subscription. %A token that is sent back by Facebook's servers to your : server in order to verify that you really were trying to  modify your subscription. 7The URL on your server that will receive the real-time # updates. Please refer to Facebook's documentation in order to ' see what this URL needs to implement.  A field of a  that you would like to % receive notifications when changed. 7The type of objects that a real-time update refers to. 8Add or modify a subscription for real-time updates. If 4 there were no previous subscriptions for the given  &, then a new subscription is created. 6 If there was any previous subscription for the given  , it'!s overriden by this one (even if 7 the other subscription had a different callback URL). d (Internal) Get the subscription's path. -List current real-time update subscriptions. Verifies the input'#s authenticity (i.e. it comes from = Facebook) and integrity by calculating its HMAC-SHA1 (using ; your application secret as the key) and verifying that it ( matches the value from the HTTP request's X-Hub-Signature  header's value. If it' s not valid, Nothing is returned,  otherwise  Just data is returned where data is the original  data. Same as  but also parses  the response as JSON. Returns Nothing if either the % signature is invalid or the data can't be parsed (use   if you need to distinguish & between these two error conditions). #e'Type of objects whose subscription you  and to add or modify. "Fields that you are interested in  receiving updates. Your callback URL. A verification token. Access token for your app. dX-Hub-Signature HTTP header' s value. .Request body with JSON-encoded notifications. X-Hub-Signature HTTP header' s value. .Request body with JSON-encoded notifications. fghijedfghijNonenewtype0 wrapper around any object that works around FQL's  strange objects. For example, if you fetch the app_data field from stream,  you'7ll find that empty objects are actually represented as  empty lists []" instead of a proper empty object {}. Also  note that FQL's documentation says that app_data is an ) array, which it clear is not. See also . newtype+ wrapper around lists that works around FQL's  strange lists. For example, if you fetch the  tagged_uids field from   location_post, you'll find that Facebook's FQL represents an 0 empty list of tagged UIDs as plain JSON array ([]). 6 However, it represents a singleton list as an object  {"1234": 1234}" instead of the much more correct [1234]. >On the other hand, not all FQL arrays are represented in this 2 bogus manner. Also, some so-called arrays by FQL's ) documentation are actually objects, see . newtype wrapper around  that is able to parse  FQL'7s time representation as seconds since the Unix epoch. $Query the Facebook Graph using FQL.  FQL Query Optional access token klm klmNone @Specify if the app is to be installed on the new test user. If = it is, then you must tell what permissions should be given.  Uses Facebook'/s default. It seems that this is equivalent to  CreateTestUserInstalled [], but Facebook's documentation is  not clear about it. AData type used to hold information of a new test user. This type $ also accepts a Data.Default value. A Facebook test user. nConstruct a query from a . Create a new test user. Get a list of test users. Remove an existing test user. 1Make a friend connection between two test users. This is how Facebook'.s API work: two calls must be made. The first  call has the format: "/userA_id/friends/userB_id" with the D access token of user A as query parameter. The second call has the  format: "/userB_id/friends/userA_id" with the access token of D user B as query parameter. The first call creates a friend request 1 and the second call accepts the friend request.  Create an   from a . It' s incomplete 5 because it will not have the right expiration time. oSame as X$, 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. pDefault instance for . qDefault instance for . nHow the test user should be  created. Access token for your app. Access token for your app. The TestUser to be removed. 5Access token for your app (ignored since fb 0.14.7). o Path (should begin with a slash /). $Arguments to be passed to Facebook. Optional access token. pqr nopqrNone  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  <=87569:;>@+,-./01234?~]^_`abcdefghijklmnotuvwxyz{pqrs|}\VWQRSTUIJKLMNOPEFGHABCD"#$%&'()*XYZ[  !!6s !"#$%&'()(*+,,-./01234456789:;<=>?@ABCDEFGHIIJKLLMNOOPQRSTUVVWXYZ[\]^_`aabcdefghijklmnop q r s s t u v v w x y z { | } ~                                  !"#$%&'()*+,*+-."/00=123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV W X Y q Z [ \ ] ^ _ ` a b    c d e f g h i j k l m n o p qrstuvwxyz fb-0.14.7FacebookFacebook.TypesFacebook.Monad Facebook.BaseFacebook.Pager Facebook.AuthFacebook.GraphFacebook.Object.PageFacebook.Object.ActionFacebook.Object.CheckinFacebook.Object.UserFacebook.Object.OrderFacebook.RealTime Facebook.FQLFacebook.TestUsers FbUTCTime unFbUTCTimeArgumentAppKindUserKindUserIdIdidCodeAccessTokenDataAppAccessTokenUserAccessToken AccessToken CredentialsappNameappId appSecretNoAuthAuth FacebookT runFacebookTrunNoAuthFacebookTbeta_runFacebookTbeta_runNoAuthFacebookT mapFacebookTFacebookExceptionFbLibraryExceptionfbeType fbeMessagePager pagerData pagerPrevious pagerNext fetchNextPagefetchPreviousPagefetchAllNextPagesfetchAllPreviousPages DebugTokendtAppId dtAppName dtExpiresAt dtIsValid dtIssuedAtdtScopesdtUserId dtAccessToken Permission unPermission RedirectUrlgetAppAccessTokengetUserAccessTokenStep1getUserAccessTokenStep2getUserLogoutUrl hasExpiredisValidextendUserAccessTokenparseSignedRequest debugTokenTagtagIdtagNameGeoCoordinateslatitude longitudeLocationlocationStreet locationCity locationStatelocationCountry locationZiplocationCoordsPlaceplaceId placeName placeLocation SimpleType encodeFbParam getObject postObject deleteObject searchObjects#=PagepageIdpageNamepageLink pageCategorypageIsPublished pageCanPost pageLikes pageLocation pagePhone pageCheckins pagePicture pageWebsitepageTalkingAboutCountgetPage searchPagesAction createAction CheckinFrom checkinFromIdcheckinFromNameCheckin checkinId checkinFrom checkinPlacecheckinCreatedTime checkinTagscheckinMessage getCheckin createCheckinFriendfriendId friendNameGenderFemaleMaleUseruserIduserName userFirstNameuserMiddleName userLastName userGender userLocale userUsername userVerified userEmail userLocationgetUser searchUsersgetUserCheckinsgetUserFriendsOrderApplication OrderStatusOrderorderId orderFromorderTo orderAmount orderStatusorderApplication orderCountryorderRefundCodeorderCreatedTimeorderUpdatedTimeOrderIdgetOrder#RealTimeUpdateNotificationUserEntry rtuneUserIdrtuneChangedFields rtuneTimeRealTimeUpdateNotification rtunObject rtunEntriesRealTimeUpdateSubscription rtusObjectrtusCallbackUrl rtusFields rtusActiveRealTimeUpdateTokenRealTimeUpdateUrlRealTimeUpdateFieldRealTimeUpdateObject OtherRTUO ErrorsRTUOPageRTUOPermissionsRTUOUserRTUOmodifySubscriptionlistSubscriptions!verifyRealTimeUpdateNotificationsgetRealTimeUpdateNotifications FQLObject unFQLObjectFQLList unFQLListFQLTime unFQLTimefqlQueryCreateTestUserInstalledCreateTestUserFbDefaultctuiPermissionsCreateTestUserNotInstalledCreateTestUser ctuInstalledctuName ctuLocaleTestUsertuId tuAccessToken tuLoginUrltuEmail tuPasswordcreateTestUser getTestUsersremoveTestUsermakeFriendConnincompleteTestUserAccessToken time-1.4.0.1Data.Time.Clock.UTCUTCTimeappIdBSbytestring-0.10.0.2Data.ByteString.Internal ByteString appSecretBSaccessTokenDataaccessTokenExpiresaccessTokenUserId<>base Data.Monoidmappend$fFromJSONFbUTCTime $fToJSONId $fFromJSONIdFbTierFbDatafbdCredsGHC.Err undefinedgetCreds getManagerhttp-conduit-1.9.4.1Network.HTTP.Conduit.ManagerManagergetTierwithTierrunResourceInFbBeta Production fbdManagerfbdTierFunF withManager$fMonadBaseControlbFacebookT$fMonadTransControlFacebookT$fMonadBasebFacebookTtransformers-0.3.0.0Control.Monad.Trans.Classlift ToSimpleQuerytsqfbreqNetwork.HTTP.Conduit.TypesRequestdata-default-class-0.0.1Data.Default.ClassdefasJsonResponseNetwork.HTTP.ConduithttpasBSfbhttpwwwAuthenticateParser httpCheckisOkay asJsonHelper fbhttpHelper$fExceptionFacebookException$fFromJSONFacebookException$fToSimpleQueryAccessToken$fToSimpleQueryCredentials Data.MaybeNothing fetchHelper conduit-1.0.7Data.Conduit.InternalSourcefetchAllHelper$fFromJSONPagerUndata text-0.11.3.1Data.Text.InternalText Data.StringIsStringuserAccessTokenParseraddBase64Paddingbase64-bytestring-1.0.0.1Data.ByteString.Base64.URLdecode decodeLenient$fFromJSONDebugTokenundataSignedRequestAlgorithmData.Time.ClockgetCurrentTime$fFromJSONUndata $fFromJSONSignedRequestAlgorithm$fIsStringPermission$fShowPermission methodObject aeson-0.6.1.0Data.Aeson.Types.InternalValue$fSimpleType[]$fSimpleTypePermission$fSimpleTypeId$fSimpleTypeByteString$fSimpleTypeText$fSimpleTypeWord64$fSimpleTypeInt64$fSimpleTypeWord32$fSimpleTypeInt32$fSimpleTypeWord16$fSimpleTypeInt16$fSimpleTypeWord8$fSimpleTypeInt8$fSimpleTypeWord$fSimpleTypeInt$fSimpleTypeDouble$fSimpleTypeFloat$fSimpleTypeZonedTime$fSimpleTypeUTCTime$fSimpleTypeDay$fSimpleTypeBoolshowBS $fFromJSONTag$fSimpleTypeGeoCoordinates$fFromJSONGeoCoordinates$fFromJSONLocation$fFromJSONPlace$fFromJSONPage $fReadAction $fOrdAction $fEqActionunAction$fIsStringAction $fShowAction$fFromJSONCheckinFrom$fFromJSONCheckin$fFromJSONFriend$fToJSONGender$fFromJSONGender$fFromJSONUserOrderCancelled OrderDisputed OrderRefunded OrderSettled OrderPlaced$fFromJSONOrderStatus$fFromJSONOrder$fFromJSONOrderApplicationgetSubscriptionsPathrtuoToBS-$fFromJSONRealTimeUpdateNotificationUserEntry$$fFromJSONRealTimeUpdateNotification$$fFromJSONRealTimeUpdateSubscription$fToJSONRealTimeUpdateObject$fFromJSONRealTimeUpdateObject$fFromJSONFQLObject$fFromJSONFQLList$fFromJSONFQLTimecreateTestUserQueryArgs getObjectBool $fDefaultCreateTestUserInstalled$fDefaultCreateTestUser$fFromJSONTestUser