-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A client implementing the Algolia search API -- -- A client implementing the Algolia search API @package algolia @version 0.1.0.0 -- | Algolia is not based on traditional search solutions like Lucene or -- Solr. Algolia was built from the ground up specifically for searching -- through semi-structured data to power user-facing search. -- -- Speed In order to provide the best user experience, we focus on -- performance - milliseconds matter, and we developed an engine capable -- of delivering results in a few milliseconds, fast enough to power a -- seamless, “as-you-type” experience - the de facto consumer-grade -- search experience. -- -- Our ability to achieve unparalleled speed relies on a multitude of -- factors, many of which are outlined in this blog post. For instance, -- the Algolia engine handles the vast majority of computation at -- indexing time, as opposed to at query time. Beyond this, we control -- the full stack end-to-end. We’ve obsessed over every detail, from -- obtaining high quality infrastructure (bare-metal servers!) to -- crafting our own Ubuntu-based OS painstakingly modified for search -- engine performance. -- -- Beyond speed, we focus on providing all the features necessary to -- build a full-fledged search experience out-of-the-box: prefix search, -- typo-tolerance, faceting, highlighting, and more. -- -- Relevance -- -- Performance is important; however, in order for search to be -- successful, results need to be relevant to the user. Varying from the -- traditional TF-IDF approach to relevancy, we built a modern -- tie-breaking algorithm tuned specifically for semi-structured data. -- Rather than calculating one “score” per result and sorting based -- solely off a magic number, Algolia calculates N scores and then -- applies N successive sorting. In layman’s terms, this means “buckets” -- of results are sorted by a cascade of varying criteria. When matches -- occur in the first criterion, the second criterion is considered to -- help break the tie, and so on in succession. This approach is meant to -- mimic how our brains naturally search for information - and as a -- consequence, is far easier to debug. -- -- The Algolia engine provides various criteria for building stellar -- textual relevancy. On top of these, additional rules can be set to -- further hone the relevancy for a specific dataset. For example, a -- numeric “popularity” attribute could be leveraged as a potential -- tie-breaker rule to help more popular items rank higher. By enabling -- business relevance metrics to be added at will and via API, this forms -- the foundation for handling advanced search experiences like -- personalization, merchandising and more. module Network.Algolia.Search -- | Make an algolia client from the provided API key and application id. mkAlgoliaClient :: ApiKey -> ApplicationId -> AlgoliaClient data AlgoliaClient newtype ApiKey ApiKey :: ByteString -> ApiKey [fromApiKey] :: ApiKey -> ByteString newtype ApplicationId ApplicationId :: ByteString -> ApplicationId [fromApplicationId] :: ApplicationId -> ByteString -- | Given a data type c that implements Has AlgoliaClient -- c, perform an algolia request. simpleAlgolia :: (MonadIO m, Has AlgoliaClient c) => c -> ReaderT c m a -> m a -- | Create an algolia client from ALGOLIA_APP_ID and -- ALGOLIA_KEY environment variables. algoliaFromEnv :: (MonadIO m) => ReaderT AlgoliaClient m a -> m a withApiKey :: MonadReader AlgoliaClient m => ApiKey -> m a -> m a type Result a = forall c m. (Has AlgoliaClient c, MonadReader c m, MonadThrow m, MonadIO m) => m a -- | Convert a coercible type f class Reconstrain f reconstrain :: Reconstrain f => f a -> f b reconstrain :: (Reconstrain f, Coercible (f a) (f b)) => f a -> f b newtype IndexName a IndexName :: ByteString -> IndexName a [fromIndexName] :: IndexName a -> ByteString newtype ObjectId a ObjectId :: ByteString -> ObjectId a [fromObjectId] :: ObjectId a -> ByteString newtype TaskId TaskId :: Int -> TaskId [fromTaskId] :: TaskId -> Int data IndexInfo IndexInfo :: IndexName Object -> Int -> Int -> Int -> Int -> Int -> Bool -> IndexInfo [indexInfoName] :: IndexInfo -> IndexName Object [indexInfoEntries] :: IndexInfo -> Int [indexInfoDataSize] :: IndexInfo -> Int [indexInfoFileSize] :: IndexInfo -> Int [indexInfoLastBuildTimeS] :: IndexInfo -> Int [indexInfoNumberOfPendingTask] :: IndexInfo -> Int [indexInfoPendingTask] :: IndexInfo -> Bool data ListIndicesResponse ListIndicesResponse :: [IndexInfo] -> Int -> ListIndicesResponse [listIndicesResponseItems] :: ListIndicesResponse -> [IndexInfo] [listIndicesResponseNbPages] :: ListIndicesResponse -> Int -- | List existing indexes. listIndices :: Maybe Int -> Result ListIndicesResponse data SearchParameters SearchParameters :: Text -> [Text] -> [Text] -> Maybe Int -> [Text] -> [Text] -> Text -> Text -> Maybe Text -> Bool -> Int -> Int -> Maybe Int -> Maybe Int -> Int -> Int -> Bool -> [Text] -> Bool -> Bool -> Int -> Int -> Bool -> SearchParameters [query] :: SearchParameters -> Text [attributesToRetrieve] :: SearchParameters -> [Text] [facets] :: SearchParameters -> [Text] [maxValuesPerFacet] :: SearchParameters -> Maybe Int [attributesToHighlight] :: SearchParameters -> [Text] [attributesToSnippet] :: SearchParameters -> [Text] [highlightPreTag] :: SearchParameters -> Text [highlightPostTag] :: SearchParameters -> Text [snippetEllipsisText] :: SearchParameters -> Maybe Text [restrictHighlightAndSnippetArrays] :: SearchParameters -> Bool [page] :: SearchParameters -> Int [hitsPerPage] :: SearchParameters -> Int [offset] :: SearchParameters -> Maybe Int [length] :: SearchParameters -> Maybe Int [minWordSizeFor1Typo] :: SearchParameters -> Int [minWordSizeFor2Typos] :: SearchParameters -> Int [analytics] :: SearchParameters -> Bool [analyticsTags] :: SearchParameters -> [Text] [synonyms] :: SearchParameters -> Bool [replaceSynonymsInHighlight] :: SearchParameters -> Bool [minProximity] :: SearchParameters -> Int [maxFacetHits] :: SearchParameters -> Int [percentileComputation] :: SearchParameters -> Bool defaultQuery :: SearchParameters data SearchResult a SearchResult :: a -> Maybe Object -> Maybe Object -> Maybe Object -> SearchResult a [searchResultValue] :: SearchResult a -> a [searchResultHighlightResult] :: SearchResult a -> Maybe Object [searchResultSnippetResult] :: SearchResult a -> Maybe Object [searchResultRankingInfo] :: SearchResult a -> Maybe Object -- | You may have a single index containing per-user data. In that case, -- you may wish to restrict access to the records of one particular user. -- Typically, all your records would be tagged with their associated -- user_id, and you would add a filter at query time like -- filters=user_id:${requested_id} to retrieve only what the querying -- user has access to. -- -- Adding that filter directly from the frontend (browser or mobile -- application) will result in a security breach, because the user would -- be able to modify the filters you’ve set, e.g. by modifying the -- JavaScript code. -- -- In order to keep sending the query from the browser (which is -- recommended for optimal latency) but only target secured records, you -- can generate secured API keys from your backend and use them in your -- frontend code. The backend will then automatically enforce the -- security filters contained in the key; the user will not be able to -- alter them. -- -- A secured API key is used like any other API key via the -- X-Algolia-API-Key request header. -- -- Generate a secured API key Secured API keys are generated by hashing -- (HMAC SHA-256) the following criteria together: -- -- a private API key (can be any API Key that is not the admin API Key), -- used as the secret for HMAC SHA-256; -- -- a URL-encoded list of query parameters defining the security filters. -- -- The result of the hashing is concatenated to the URL-encoded query -- parameters, and this content is encoded in Base64 to generate the -- final secured API key. generateSecuredApiKey :: ApiKey -> Query -> Maybe ByteString -> ByteString data FacetStat FacetStat :: Scientific -> Scientific -> Scientific -> Scientific -> FacetStat [facetStatMin] :: FacetStat -> Scientific [facetStatMax] :: FacetStat -> Scientific [facetStatAvg] :: FacetStat -> Scientific [facetStatSum] :: FacetStat -> Scientific data SearchResults a SearchResults :: [SearchResult a] -> Int -> Int -> Int -> Int -> Int -> Text -> Maybe Text -> Text -> Bool -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe (HashMap FacetName Int) -> Maybe (HashMap FacetName FacetStat) -> Maybe Bool -> SearchResults a [searchResultsHits] :: SearchResults a -> [SearchResult a] [searchResultsPage] :: SearchResults a -> Int [searchResultsNbHits] :: SearchResults a -> Int [searchResultsNbPages] :: SearchResults a -> Int [searchResultsHitsPerPage] :: SearchResults a -> Int [searchResultsProcessingtimeMs] :: SearchResults a -> Int [searchResultsQuery] :: SearchResults a -> Text [searchResultsParsedQuery] :: SearchResults a -> Maybe Text [searchResultsParams] :: SearchResults a -> Text [searchResultsExhaustiveNbHits] :: SearchResults a -> Bool [searchResultsQueryAfterRemoval] :: SearchResults a -> Maybe Text [searchResultsMessage] :: SearchResults a -> Maybe Text [searchResultsAroundLatLng] :: SearchResults a -> Maybe Text [searchResultsAutomaticRadius] :: SearchResults a -> Maybe Text [searchResultsServerUsed] :: SearchResults a -> Maybe Text [searchResultsFacets] :: SearchResults a -> Maybe (HashMap FacetName Int) [searchResultsFacetsStats] :: SearchResults a -> Maybe (HashMap FacetName FacetStat) [searchResultsExhaustiveFacetCount] :: SearchResults a -> Maybe Bool -- | Return objects that match the query. -- -- You can find the list of parameters that you can use in the POST body -- in the Search Parameters section. -- -- Alternatively, parameters may be specified as a URL-encoded query -- string inside the params attribute. searchIndex :: FromJSON a => IndexName a -> SearchParameters -> Result (SearchResults a) data MultiIndexSearchStrategy None :: MultiIndexSearchStrategy StopIfEnoughMatches :: MultiIndexSearchStrategy searchMultipleIndices :: [(IndexName Object, Query)] -> Maybe MultiIndexSearchStrategy -> Result [SearchResults Object] data DeleteIndexResponse DeleteIndexResponse :: UTCTime -> TaskId -> DeleteIndexResponse [deleteIndexResponseDeletedAt] :: DeleteIndexResponse -> UTCTime [deleteIndexResponseTaskId] :: DeleteIndexResponse -> TaskId -- | Delete an existing index. deleteIndex :: IndexName a -> Result DeleteIndexResponse -- | Delete an index’s content, but leave settings and index-specific API -- keys untouched. clearIndex :: IndexName a -> Result IndexOperationResponse data AddObjectWithoutIdResponse a AddObjectWithoutIdResponse :: UTCTime -> TaskId -> ObjectId a -> AddObjectWithoutIdResponse a [addObjectWithoutIdResponseCreatedAt] :: AddObjectWithoutIdResponse a -> UTCTime [addObjectWithoutIdResponseTaskId] :: AddObjectWithoutIdResponse a -> TaskId [addObjectWithoutIdResponseObjectId] :: AddObjectWithoutIdResponse a -> ObjectId a -- | Add an object to the index, automatically assigning it an object ID. addObjectWithoutId :: ToJSON a => IndexName a -> a -> Result (AddObjectWithoutIdResponse a) data AddObjectByIdResponse a AddObjectByIdResponse :: UTCTime -> TaskId -> ObjectId a -> AddObjectByIdResponse a [addObjectByIdResponseUpdatedAt] :: AddObjectByIdResponse a -> UTCTime [addObjectByIdResponseTaskId] :: AddObjectByIdResponse a -> TaskId [addObjectByIdResponseObjectId] :: AddObjectByIdResponse a -> ObjectId a -- | Add or replace an object with a given object ID. If the object does -- not exist, it will be created. If it already exists, it will be -- replaced. -- -- Be careful: when an object already exists for the specified object ID, -- the whole object is replaced: existing attributes that are not -- replaced are deleted. -- -- If you want to update only part of an object, use a partial update -- instead. addObjectById :: ToJSON a => IndexName a -> ObjectId a -> a -> Result (AddObjectByIdResponse a) data UpdateOp Increment :: Scientific -> UpdateOp Decrement :: Scientific -> UpdateOp Add :: (Either Scientific Text) -> UpdateOp Remove :: (Either Scientific Text) -> UpdateOp AddUnique :: (Either Scientific Text) -> UpdateOp data ObjectResponse ObjectResponse :: ObjectResponse partiallyUpdateObject :: IndexName a -> HashMap Text UpdateOp -> Result ObjectResponse data RetrieveObjectResponse a RetrieveObjectResponse :: !(ObjectId a) -> a -> RetrieveObjectResponse a [retrieveObjectResponseObjectId] :: RetrieveObjectResponse a -> !(ObjectId a) [retrieveObjectResponseObject] :: RetrieveObjectResponse a -> a retrieveObject :: FromJSON a => IndexName a -> ObjectId a -> [Text] -> Result (Maybe (RetrieveObjectResponse a)) retrieveObjects :: [(IndexName Object, ObjectId Object, [Text])] -> Result [Object] data DeleteObjectResponse DeleteObjectResponse :: UTCTime -> TaskId -> DeleteObjectResponse [deleteObjectResponseDeletedAt] :: DeleteObjectResponse -> UTCTime [deleteObjectResponseTaskId] :: DeleteObjectResponse -> TaskId deleteObject :: IndexName a -> ObjectId a -> Result DeleteObjectResponse data BatchOp a AddObjectOp :: a -> BatchOp a UpdateObjectOp :: (ObjectId a) -> a -> BatchOp a PartialUpdateObjectOp :: (ObjectId a) -> (HashMap Text UpdateOp) -> BatchOp a PartialUpdateObjectNoCreateOp :: (ObjectId a) -> (HashMap Text UpdateOp) -> BatchOp a DeleteObjectOp :: (ObjectId a) -> BatchOp a DeleteIndexOp :: BatchOp a ClearIndexOp :: BatchOp a data BatchResponse BatchResponse :: TaskId -> [Maybe (ObjectId Object)] -> BatchResponse [batchResponseTaskId] :: BatchResponse -> TaskId [batchResponseObjectIds] :: BatchResponse -> [Maybe (ObjectId Object)] batch :: ToJSON a => IndexName a -> [BatchOp a] -> Result BatchResponse data BatchMultipleIndicesResponse BatchMultipleIndicesResponse :: HashMap (IndexName Object) TaskId -> [Maybe (ObjectId Object)] -> BatchMultipleIndicesResponse [batchMultipleIndicesResponseTaskId] :: BatchMultipleIndicesResponse -> HashMap (IndexName Object) TaskId [batchMultipleIndicesResponseObjectIds] :: BatchMultipleIndicesResponse -> [Maybe (ObjectId Object)] batchMultipleIndices :: [(IndexName Object, BatchOp Object)] -> Result BatchMultipleIndicesResponse data BrowseIndexResponse a BrowseIndexResponse :: Maybe (Cursor a) -> !(Vector (RetrieveObjectResponse a)) -> !Int -> !Int -> !Int -> !Int -> !Int -> !Text -> !Text -> BrowseIndexResponse a [browseIndexResponseCursor] :: BrowseIndexResponse a -> Maybe (Cursor a) [browseIndexResponseHits] :: BrowseIndexResponse a -> !(Vector (RetrieveObjectResponse a)) [browseIndexResponsePage] :: BrowseIndexResponse a -> !Int [browseIndexResponseNumberOfHits] :: BrowseIndexResponse a -> !Int [browseIndexResponseNumberOfPages] :: BrowseIndexResponse a -> !Int [browseIndexResponseHitsPerPage] :: BrowseIndexResponse a -> !Int [browseIndexResponseProcessingTimeMs] :: BrowseIndexResponse a -> !Int [browseIndexResponseQuery] :: BrowseIndexResponse a -> !Text [browseIndexResponseParams] :: BrowseIndexResponse a -> !Text browseAllIndexContent :: FromJSON a => IndexName a -> Result (BrowseIndexResponse a) data IndexOperation MoveIndex :: IndexOperation CopyIndex :: IndexOperation data IndexOperationResponse IndexOperationResponse :: UTCTime -> TaskId -> IndexOperationResponse [indexOperationResponseUpdatedAt] :: IndexOperationResponse -> UTCTime [indexOperationResponseTaskId] :: IndexOperationResponse -> TaskId copyOrMoveIndex :: IndexOperation -> IndexName a -> IndexName a -> Result IndexOperationResponse data TaskStatus Published :: TaskStatus NotPublished :: TaskStatus data TaskStatusResult TaskStatusResult :: TaskStatus -> Bool -> TaskStatusResult [taskStatusResultStatus] :: TaskStatusResult -> TaskStatus [taskStatusResultPendingTask] :: TaskStatusResult -> Bool -- | Wait for a task to be processed by Algolia waitTask :: IndexName a -> TaskId -> Result () -- | Get the status of a task. This can be used to wait for a task to be -- processed via polling. -- -- See waitTask for an implementation of this behavior. getTaskStatus :: IndexName a -> TaskId -> Result TaskStatusResult newtype FacetName FacetName :: Text -> FacetName [fromFacetName] :: FacetName -> Text newtype FacetQuery FacetQuery :: Text -> FacetQuery [fromFacetQuery] :: FacetQuery -> Text data FacetHit FacetHit :: Text -> Text -> Int -> FacetHit [facetHitValue] :: FacetHit -> Text [facetHitHighlighted] :: FacetHit -> Text [facetHitCount] :: FacetHit -> Int newtype FacetHits FacetHits :: [FacetHit] -> FacetHits [facetHits] :: FacetHits -> [FacetHit] searchFacetValues :: IndexName a -> FacetName -> FacetQuery -> Result FacetHits newtype SynonymId SynonymId :: Text -> SynonymId [fromSynonymId] :: SynonymId -> Text data Synonym MultiWaySynonym :: [Text] -> Synonym OneWaySynonym :: Text -> [Text] -> Synonym AlternativeCorrection1 :: Correction -> Synonym AlternativeCorrection2 :: Correction -> Synonym Placeholder :: Text -> [Text] -> Synonym data Correction Correction :: Text -> [Text] -> Correction [correctionWord] :: Correction -> Text [correctionCorrections] :: Correction -> [Text] data SynonymType -- | Multi-way synonyms (a.k.a. “regular synonyms”). A set of words or -- phrases that are all substitutable to one another. Any query -- containing one of them can match records containing any of them. SynonymTy :: SynonymType -- | One-way synonym. Alternative matches for a given input. If the input -- appears inside a query, it will match records containing any of the -- defined synonyms. The opposite is not true: if a synonym appears in a -- query, it will not match records containing the input, nor the other -- synonyms. OneWaySynonymTy :: SynonymType -- | Alternative corrections. Same as a one-way synonym, except that when -- matched, they will count as 1 (respectively 2) typos in the ranking -- formula. AltCorrection1Ty :: SynonymType AltCorrection2Ty :: SynonymType -- | A placeholder is a special text token that is placed inside records -- and can match many inputs. For more information on synonyms, please -- read our Synonyms guide. -- https://www.algolia.com/doc/guides/textual-relevance/synonyms/ PlaceholderTy :: SynonymType data SynonymSearch SynonymSearch :: Maybe Text -> [SynonymType] -> Maybe Int -> Maybe Int -> SynonymSearch -- | Search for specific synonyms matching this string. [synonymSearchQuery] :: SynonymSearch -> Maybe Text -- | Only search for specific types of synonyms. [synonymSearchType] :: SynonymSearch -> [SynonymType] -- | Number of the page to retrieve (zero-based). [synonymSearchPage] :: SynonymSearch -> Maybe Int -- | Maximum number of synonym objects to retrieve. [synonymSearchHitsPerPage] :: SynonymSearch -> Maybe Int data SynonymSearchResponse SynonymSearchResponse :: Object -> SynonymSearchResponse -- | Search or browse all synonyms, optionally filtering them by type. searchSynonyms :: IndexName a -> SynonymSearch -> Result SynonymSearchResponse data LogType AllLogs :: LogType QueryLogs :: LogType BuildLogs :: LogType ErrorLogs :: LogType data LogsResponse LogsResponse :: [Object] -> LogsResponse [logsResponseResults] :: LogsResponse -> [Object] getLogs :: Maybe Int -> Maybe Int -> Maybe (IndexName a) -> Maybe LogType -> Result LogsResponse data AlgoliaError -- | The response was a JSON value, but the library does not know how to -- handle it properly. JsonParseError :: String -> AlgoliaError -- | The response was not JSON. NonConformingResult :: Request -> (Response ()) -> Value -> String -> AlgoliaError -- | A JSON object was expected as the response, but it was some other JSON -- type. ToJsonInstanceMustProduceAnObject :: AlgoliaError instance GHC.Show.Show Network.Algolia.Search.LogsResponse instance GHC.Show.Show Network.Algolia.Search.LogType instance Data.Aeson.Types.FromJSON.FromJSONKey Network.Algolia.Search.SynonymId instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.SynonymId instance Data.Aeson.Types.ToJSON.ToJSON Network.Algolia.Search.SynonymId instance GHC.Classes.Eq Network.Algolia.Search.SynonymId instance GHC.Show.Show Network.Algolia.Search.SynonymId instance GHC.Classes.Eq Network.Algolia.Search.FacetHits instance GHC.Show.Show Network.Algolia.Search.FacetHits instance GHC.Classes.Eq Network.Algolia.Search.FacetHit instance GHC.Show.Show Network.Algolia.Search.FacetHit instance GHC.Classes.Eq Network.Algolia.Search.FacetQuery instance GHC.Show.Show Network.Algolia.Search.FacetQuery instance GHC.Show.Show a => GHC.Show.Show (Network.Algolia.Search.SearchResults a) instance Data.Hashable.Class.Hashable Network.Algolia.Search.FacetName instance Data.Aeson.Types.FromJSON.FromJSONKey Network.Algolia.Search.FacetName instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.FacetName instance GHC.Classes.Eq Network.Algolia.Search.FacetName instance GHC.Show.Show Network.Algolia.Search.FacetName instance GHC.Show.Show Network.Algolia.Search.TaskStatusResult instance GHC.Classes.Eq Network.Algolia.Search.TaskStatus instance GHC.Show.Show Network.Algolia.Search.TaskStatus instance GHC.Classes.Eq Network.Algolia.Search.IndexOperationResponse instance GHC.Show.Show Network.Algolia.Search.IndexOperationResponse instance GHC.Classes.Eq Network.Algolia.Search.IndexOperation instance GHC.Show.Show Network.Algolia.Search.IndexOperation instance Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.Cursor a) instance Data.Aeson.Types.ToJSON.ToJSON (Network.Algolia.Search.Cursor a) instance GHC.Classes.Eq (Network.Algolia.Search.Cursor a) instance GHC.Show.Show (Network.Algolia.Search.Cursor a) instance GHC.Show.Show Network.Algolia.Search.BatchMultipleIndicesResponse instance GHC.Show.Show Network.Algolia.Search.BatchResponse instance GHC.Classes.Eq Network.Algolia.Search.RetrieveObjectResults instance GHC.Show.Show Network.Algolia.Search.RetrieveObjectResults instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.Algolia.Search.RetrieveObjectResponse a) instance GHC.Show.Show a => GHC.Show.Show (Network.Algolia.Search.RetrieveObjectResponse a) instance GHC.Classes.Eq (Network.Algolia.Search.AddObjectWithoutIdResponse a) instance GHC.Show.Show (Network.Algolia.Search.AddObjectWithoutIdResponse a) instance GHC.Show.Show Network.Algolia.Search.DeleteIndexResponse instance GHC.Classes.Eq Network.Algolia.Search.MultiIndexSearchStrategy instance GHC.Show.Show Network.Algolia.Search.MultiIndexSearchStrategy instance GHC.Show.Show Network.Algolia.Search.FacetStat instance GHC.Show.Show a => GHC.Show.Show (Network.Algolia.Search.SearchResult a) instance GHC.Show.Show Network.Algolia.Search.SearchParameters instance GHC.Classes.Eq Network.Algolia.Search.ListIndicesResponse instance GHC.Show.Show Network.Algolia.Search.ListIndicesResponse instance GHC.Classes.Eq Network.Algolia.Search.IndexInfo instance GHC.Show.Show Network.Algolia.Search.IndexInfo instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.TaskId instance Data.Aeson.Types.ToJSON.ToJSON Network.Algolia.Search.TaskId instance GHC.Classes.Eq Network.Algolia.Search.TaskId instance GHC.Show.Show Network.Algolia.Search.TaskId instance Data.String.IsString (Network.Algolia.Search.ObjectId a) instance GHC.Classes.Eq (Network.Algolia.Search.ObjectId a) instance GHC.Show.Show (Network.Algolia.Search.ObjectId a) instance Data.Hashable.Class.Hashable (Network.Algolia.Search.IndexName a) instance GHC.Classes.Eq (Network.Algolia.Search.IndexName a) instance GHC.Show.Show (Network.Algolia.Search.IndexName a) instance GHC.Show.Show Network.Algolia.Search.AlgoliaError instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.LogsResponse instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.SynonymSearchResponse instance Data.Aeson.Types.ToJSON.ToJSON Network.Algolia.Search.SynonymSearch instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.FacetHits instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.FacetHit instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.SearchResults a) instance Network.URI.Template.Types.ToTemplateValue Network.Algolia.Search.FacetName instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.TaskStatusResult instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.TaskStatus instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.IndexOperationResponse instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.BrowseIndexResponse a) instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.BatchMultipleIndicesResponse instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.BatchResponse instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.DeleteObjectResponse instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.RetrieveObjectResults instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.RetrieveObjectResponse a) instance Data.Aeson.Types.ToJSON.ToJSON Network.Algolia.Search.UpdateOp instance Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.AddObjectByIdResponse a) instance Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.AddObjectWithoutIdResponse a) instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.DeleteIndexResponse instance Data.Aeson.Types.ToJSON.ToJSON Network.Algolia.Search.MultiIndexSearchStrategy instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.FacetStat instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.SearchResult a) instance Data.Aeson.Types.ToJSON.ToJSON Network.Algolia.Search.SearchParameters instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.ListIndicesResponse instance Data.Aeson.Types.FromJSON.FromJSON Network.Algolia.Search.IndexInfo instance Network.Algolia.Search.Reconstrain Network.Algolia.Search.ObjectId instance Network.Algolia.Search.Reconstrain Network.Algolia.Search.IndexName instance Network.Algolia.Search.Reconstrain Data.Proxy.Proxy instance Network.URI.Template.Types.ToTemplateValue Network.Algolia.Search.TaskId instance Data.Aeson.Types.ToJSON.ToJSON (Network.Algolia.Search.ObjectId a) instance Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.ObjectId a) instance Network.URI.Template.Types.ToTemplateValue (Network.Algolia.Search.ObjectId a) instance Data.Aeson.Types.ToJSON.ToJSON (Network.Algolia.Search.IndexName a) instance Data.Aeson.Types.FromJSON.FromJSON (Network.Algolia.Search.IndexName a) instance Data.Aeson.Types.FromJSON.FromJSONKey (Network.Algolia.Search.IndexName a) instance Network.URI.Template.Types.ToTemplateValue (Network.Algolia.Search.IndexName a) instance GHC.Exception.Exception Network.Algolia.Search.AlgoliaError