diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -63,6 +63,100 @@
 
 See the [examples](htts://github.com/bitemyapp/bloodhound/tree/master/examples) directory for example code.
 
+Index a document
+----------------
+
+```haskell
+indexDocument testIndex defaultIndexDocumentSettings exampleTweet (DocId "1")
+{-
+IndexedDocument
+  { idxDocIndex = "twitter"
+  , idxDocType = "_doc"
+  , idxDocId = "1"
+  , idxDocVersion = 3
+  , idxDocResult = "updated"
+  , idxDocShards =
+      ShardResult
+        { shardTotal = 1
+        , shardsSuccessful = 1
+        , shardsSkipped = 0
+        , shardsFailed = 0
+        }
+  , idxDocSeqNo = 2
+  , idxDocPrimaryTerm = 1
+  }
+-}
+```
+
+Fetch documents
+---------------
+
+```haskell
+let query = TermQuery (Term "user" "bitemyapp") boost
+let search = mkSearch (Just query) boost
+searchByIndex @_ @Tweet testIndex search
+{-
+SearchResult
+    { took = 1
+    , timedOut = False
+    , shards =
+            ShardResult
+                { shardTotal = 1
+                , shardsSuccessful = 1
+                , shardsSkipped = 0
+                , shardsFailed = 0
+                }
+    , searchHits =
+            SearchHits
+                { hitsTotal = HitsTotal { value = 2 , relation = HTR_EQ }
+                , maxScore = Just 0.18232156
+                , hits =
+                        [ Hit
+                                { hitIndex = IndexName "twitter"
+                                , hitDocId = DocId "1"
+                                , hitScore = Just 0.18232156
+                                , hitSource =
+                                        Just
+                                            Tweet
+                                                { user = "bitemyapp"
+                                                , postDate = 2009-06-18 00:00:10 UTC
+                                                , message = "Use haskell!"
+                                                , age = 10000
+                                                , location = LatLon { lat = 40.12 , lon = -71.3 }
+                                                }
+                                , hitSort = Nothing
+                                , hitFields = Nothing
+                                , hitHighlight = Nothing
+                                , hitInnerHits = Nothing
+                                }
+                        , Hit
+                                { hitIndex = IndexName "twitter"
+                                , hitDocId = DocId "2"
+                                , hitScore = Just 0.18232156
+                                , hitSource =
+                                        Just
+                                            Tweet
+                                                { user = "bitemyapp"
+                                                , postDate = 2009-06-18 00:00:10 UTC
+                                                , message = "Use haskell!"
+                                                , age = 10000
+                                                , location = LatLon { lat = 40.12 , lon = -71.3 }
+                                                }
+                                , hitSort = Nothing
+                                , hitFields = Nothing
+                                , hitHighlight = Nothing
+                                , hitInnerHits = Nothing
+                                }
+                        ]
+                }
+    , aggregations = Nothing
+    , scrollId = Nothing
+    , suggest = Nothing
+    , pitId = Nothing
+    }
+-}
+```
+
 
 Contributors
 ============
diff --git a/bloodhound.cabal b/bloodhound.cabal
--- a/bloodhound.cabal
+++ b/bloodhound.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           bloodhound
-version:        0.20.0.2
+version:        0.21.0.0
 synopsis:       Elasticsearch client library for Haskell
 description:    Elasticsearch made awesome for Haskell hackers
 category:       Database, Search
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,9 @@
+0.21.0.0
+========
+- @blackheaven
+  - Fix `indexDocument` `Response` type
+  - Fix `Acknowledged` and `Accepted` `FromJSON`
+
 0.20.0.0
 ========
 - @blackheaven
diff --git a/src/Database/Bloodhound/Client.hs b/src/Database/Bloodhound/Client.hs
--- a/src/Database/Bloodhound/Client.hs
+++ b/src/Database/Bloodhound/Client.hs
@@ -328,7 +328,8 @@
     where
       parse = fmap GSRs . mapM (uncurry go) . X.toList
       go rawName = withObject "GenericSnapshotRepo" $ \o ->
-        GenericSnapshotRepo (SnapshotRepoName $ toText rawName) <$> o .: "type"
+        GenericSnapshotRepo (SnapshotRepoName $ toText rawName)
+          <$> o .: "type"
           <*> o .: "settings"
 
 -- | Create or update a snapshot repo
@@ -525,8 +526,8 @@
         object
           [ "settings"
               .= deepMerge
-                ( X.singleton "index.number_of_shards" (toJSON shards) :
-                    [u | Object u <- toJSON <$> updates]
+                ( X.singleton "index.number_of_shards" (toJSON shards)
+                    : [u | Object u <- toJSON <$> updates]
                 )
           ]
 
@@ -839,7 +840,7 @@
 --
 -- >>> resp <- runBH' $ indexDocument testIndex defaultIndexDocumentSettings exampleTweet (DocId "1")
 -- >>> print resp
--- Response {responseStatus = Status {statusCode = 200, statusMessage = "OK"}, responseVersion = HTTP/1.1, responseHeaders = [("content-type","application/json; charset=UTF-8"),("content-encoding","gzip"),("content-length","152")], responseBody = "{\"_index\":\"bloodhound-tests-twitter-1\",\"_type\":\"_doc\",\"_id\":\"1\",\"_version\":2,\"result\":\"updated\",\"_shards\":{\"total\":1,\"successful\":1,\"failed\":0},\"_seq_no\":1,\"_primary_term\":1}", responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose}
+-- Response {responseStatus = Status {statusCode = 200, statusMessage = "OK"}, responseVersion = HTTP/1.1, responseHeaders = [("content-type","application/json; charset=UTF-8"),("content-encoding","gzip"),("content-length","152")], responseBody = "{\"_index\":\"twitter\",\"_type\":\"_doc\",\"_id\":\"1\",\"_version\":2,\"result\":\"updated\",\"_shards\":{\"total\":1,\"successful\":1,\"failed\":0},\"_seq_no\":1,\"_primary_term\":1}", responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose}
 indexDocument ::
   (ToJSON doc, MonadBH m) =>
   IndexName ->
@@ -859,7 +860,7 @@
     idxDocId :: Text,
     idxDocVersion :: Int,
     idxDocResult :: Text,
-    idxDocShards :: ShardCount,
+    idxDocShards :: ShardResult,
     idxDocSeqNo :: Int,
     idxDocPrimaryTerm :: Int
   }
diff --git a/src/Database/Bloodhound/Common/Script.hs b/src/Database/Bloodhound/Common/Script.hs
--- a/src/Database/Bloodhound/Common/Script.hs
+++ b/src/Database/Bloodhound/Common/Script.hs
@@ -146,9 +146,12 @@
 
 parseFunctionScoreFunction :: Object -> Parser FunctionScoreFunction
 parseFunctionScoreFunction o =
-  singleScript `taggedWith` "script_score"
-    <|> singleRandom `taggedWith` "random_score"
-    <|> singleFieldValueFactor `taggedWith` "field_value_factor"
+  singleScript
+    `taggedWith` "script_score"
+    <|> singleRandom
+    `taggedWith` "random_score"
+    <|> singleFieldValueFactor
+    `taggedWith` "field_value_factor"
   where
     taggedWith parser k = parser =<< o .: k
     singleScript = pure . FunctionScoreFunctionScript
diff --git a/src/Database/Bloodhound/Internal/Analysis.hs b/src/Database/Bloodhound/Internal/Analysis.hs
--- a/src/Database/Bloodhound/Internal/Analysis.hs
+++ b/src/Database/Bloodhound/Internal/Analysis.hs
@@ -100,7 +100,9 @@
             _ -> fail "mapping is not of the format key => value"
       "pattern_replace" ->
         CharFilterDefinitionPatternReplace
-          <$> m .: "pattern" <*> m .: "replacement" <*> m .:? "flags"
+          <$> m .: "pattern"
+          <*> m .: "replacement"
+          <*> m .:? "flags"
       _ -> fail ("unrecognized character filter type: " ++ T.unpack t)
 
 data TokenizerDefinition
diff --git a/src/Database/Bloodhound/Internal/Client.hs b/src/Database/Bloodhound/Internal/Client.hs
--- a/src/Database/Bloodhound/Internal/Client.hs
+++ b/src/Database/Bloodhound/Internal/Client.hs
@@ -157,7 +157,8 @@
       parse o = do
         s <- o .: "settings"
         i <- s .: "index"
-        IndexSettings <$> i .: "number_of_shards"
+        IndexSettings
+          <$> i .: "number_of_shards"
           <*> i .: "number_of_replicas"
           <*> i .:? "mapping" .!= defaultIndexMappingsLimits
 
@@ -342,38 +343,70 @@
   parseJSON = withObject "UpdatableIndexSetting" parse
     where
       parse o =
-        numberOfReplicas `taggedAt` ["index", "number_of_replicas"]
-          <|> autoExpandReplicas `taggedAt` ["index", "auto_expand_replicas"]
-          <|> refreshInterval `taggedAt` ["index", "refresh_interval"]
-          <|> indexConcurrency `taggedAt` ["index", "concurrency"]
-          <|> failOnMergeFailure `taggedAt` ["index", "fail_on_merge_failure"]
-          <|> translogFlushThresholdOps `taggedAt` ["index", "translog", "flush_threshold_ops"]
-          <|> translogFlushThresholdSize `taggedAt` ["index", "translog", "flush_threshold_size"]
-          <|> translogFlushThresholdPeriod `taggedAt` ["index", "translog", "flush_threshold_period"]
-          <|> translogDisableFlush `taggedAt` ["index", "translog", "disable_flush"]
-          <|> cacheFilterMaxSize `taggedAt` ["index", "cache", "filter", "max_size"]
-          <|> cacheFilterExpire `taggedAt` ["index", "cache", "filter", "expire"]
-          <|> gatewaySnapshotInterval `taggedAt` ["index", "gateway", "snapshot_interval"]
-          <|> routingAllocationInclude `taggedAt` ["index", "routing", "allocation", "include"]
-          <|> routingAllocationExclude `taggedAt` ["index", "routing", "allocation", "exclude"]
-          <|> routingAllocationRequire `taggedAt` ["index", "routing", "allocation", "require"]
-          <|> routingAllocationEnable `taggedAt` ["index", "routing", "allocation", "enable"]
-          <|> routingAllocationShardsPerNode `taggedAt` ["index", "routing", "allocation", "total_shards_per_node"]
-          <|> recoveryInitialShards `taggedAt` ["index", "recovery", "initial_shards"]
-          <|> gcDeletes `taggedAt` ["index", "gc_deletes"]
-          <|> ttlDisablePurge `taggedAt` ["index", "ttl", "disable_purge"]
-          <|> translogFSType `taggedAt` ["index", "translog", "fs", "type"]
-          <|> compressionSetting `taggedAt` ["index", "codec"]
-          <|> compoundFormat `taggedAt` ["index", "compound_format"]
-          <|> compoundOnFlush `taggedAt` ["index", "compound_on_flush"]
-          <|> warmerEnabled `taggedAt` ["index", "warmer", "enabled"]
-          <|> blocksReadOnly `taggedAt` ["blocks", "read_only"]
-          <|> blocksRead `taggedAt` ["blocks", "read"]
-          <|> blocksWrite `taggedAt` ["blocks", "write"]
-          <|> blocksMetaData `taggedAt` ["blocks", "metadata"]
-          <|> mappingTotalFieldsLimit `taggedAt` ["index", "mapping", "total_fields", "limit"]
-          <|> analysisSetting `taggedAt` ["index", "analysis"]
-          <|> unassignedNodeLeftDelayedTimeout `taggedAt` ["index", "unassigned", "node_left", "delayed_timeout"]
+        numberOfReplicas
+          `taggedAt` ["index", "number_of_replicas"]
+          <|> autoExpandReplicas
+          `taggedAt` ["index", "auto_expand_replicas"]
+          <|> refreshInterval
+          `taggedAt` ["index", "refresh_interval"]
+          <|> indexConcurrency
+          `taggedAt` ["index", "concurrency"]
+          <|> failOnMergeFailure
+          `taggedAt` ["index", "fail_on_merge_failure"]
+          <|> translogFlushThresholdOps
+          `taggedAt` ["index", "translog", "flush_threshold_ops"]
+          <|> translogFlushThresholdSize
+          `taggedAt` ["index", "translog", "flush_threshold_size"]
+          <|> translogFlushThresholdPeriod
+          `taggedAt` ["index", "translog", "flush_threshold_period"]
+          <|> translogDisableFlush
+          `taggedAt` ["index", "translog", "disable_flush"]
+          <|> cacheFilterMaxSize
+          `taggedAt` ["index", "cache", "filter", "max_size"]
+          <|> cacheFilterExpire
+          `taggedAt` ["index", "cache", "filter", "expire"]
+          <|> gatewaySnapshotInterval
+          `taggedAt` ["index", "gateway", "snapshot_interval"]
+          <|> routingAllocationInclude
+          `taggedAt` ["index", "routing", "allocation", "include"]
+          <|> routingAllocationExclude
+          `taggedAt` ["index", "routing", "allocation", "exclude"]
+          <|> routingAllocationRequire
+          `taggedAt` ["index", "routing", "allocation", "require"]
+          <|> routingAllocationEnable
+          `taggedAt` ["index", "routing", "allocation", "enable"]
+          <|> routingAllocationShardsPerNode
+          `taggedAt` ["index", "routing", "allocation", "total_shards_per_node"]
+          <|> recoveryInitialShards
+          `taggedAt` ["index", "recovery", "initial_shards"]
+          <|> gcDeletes
+          `taggedAt` ["index", "gc_deletes"]
+          <|> ttlDisablePurge
+          `taggedAt` ["index", "ttl", "disable_purge"]
+          <|> translogFSType
+          `taggedAt` ["index", "translog", "fs", "type"]
+          <|> compressionSetting
+          `taggedAt` ["index", "codec"]
+          <|> compoundFormat
+          `taggedAt` ["index", "compound_format"]
+          <|> compoundOnFlush
+          `taggedAt` ["index", "compound_on_flush"]
+          <|> warmerEnabled
+          `taggedAt` ["index", "warmer", "enabled"]
+          <|> blocksReadOnly
+          `taggedAt` ["blocks", "read_only"]
+          <|> blocksRead
+          `taggedAt` ["blocks", "read"]
+          <|> blocksWrite
+          `taggedAt` ["blocks", "write"]
+          <|> blocksMetaData
+          `taggedAt` ["blocks", "metadata"]
+          <|> mappingTotalFieldsLimit
+          `taggedAt` ["index", "mapping", "total_fields", "limit"]
+          <|> analysisSetting
+          `taggedAt` ["index", "analysis"]
+          <|> unassignedNodeLeftDelayedTimeout
+          `taggedAt` ["index", "unassigned", "node_left", "delayed_timeout"]
         where
           taggedAt f ks = taggedAt' f (Object o) ks
       taggedAt' f v [] =
@@ -438,7 +471,8 @@
       parseText t = case T.splitOn "-" t of
         [a, "all"] -> ReplicasLowerBounded <$> parseReadText a
         [a, b] ->
-          ReplicasBounded <$> parseReadText a
+          ReplicasBounded
+            <$> parseReadText a
             <*> parseReadText b
         _ -> fail ("Could not parse ReplicaBounds: " <> show t)
       parseBool False = pure ReplicasUnbounded
@@ -830,7 +864,8 @@
   parseJSON v = withObject "IndexAliasCreate" parse v
     where
       parse o =
-        IndexAliasCreate <$> optional (parseJSON v)
+        IndexAliasCreate
+          <$> optional (parseJSON v)
           <*> o .:? "filter"
 
 -- | 'IndexAliasSummary' is a summary of an index alias configured for a server.
@@ -861,7 +896,7 @@
 -- | 'IndexSelection' is used for APIs which take a single index, a list of
 --    indexes, or the special @_all@ index.
 
---TODO: this does not fully support <https://www.elastic.co/guide/en/elasticsearch/reference/1.7/multi-index.html multi-index syntax>. It wouldn't be too hard to implement but you'd have to add the optional parameters (ignore_unavailable, allow_no_indices, expand_wildcards) to any APIs using it. Also would be a breaking API.
+-- TODO: this does not fully support <https://www.elastic.co/guide/en/elasticsearch/reference/1.7/multi-index.html multi-index syntax>. It wouldn't be too hard to implement but you'd have to add the optional parameters (ignore_unavailable, allow_no_indices, expand_wildcards) to any APIs using it. Also would be a breaking API.
 data IndexSelection
   = IndexList (NonEmpty IndexName)
   | AllIndexes
@@ -1577,13 +1612,14 @@
           ]
   fromGSnapshotRepo GenericSnapshotRepo {..}
     | gSnapshotRepoType == fsRepoType = do
-      let o = gSnapshotRepoSettingsObject gSnapshotRepoSettings
-      parseRepo $
-        FsSnapshotRepo gSnapshotRepoName <$> o .: "location"
-          <*> o .:? "compress" .!= False
-          <*> o .:? "chunk_size"
-          <*> o .:? "max_restore_bytes_per_sec"
-          <*> o .:? "max_snapshot_bytes_per_sec"
+        let o = gSnapshotRepoSettingsObject gSnapshotRepoSettings
+        parseRepo $
+          FsSnapshotRepo gSnapshotRepoName
+            <$> o .: "location"
+            <*> o .:? "compress" .!= False
+            <*> o .:? "chunk_size"
+            <*> o .:? "max_restore_bytes_per_sec"
+            <*> o .:? "max_snapshot_bytes_per_sec"
     | otherwise = Left (RepoTypeMismatch fsRepoType gSnapshotRepoType)
 
 parseRepo :: Parser a -> Either SnapshotRepoConversionError a
@@ -1675,7 +1711,8 @@
   parseJSON = withObject "SnapshotInfo" parse
     where
       parse o =
-        SnapshotInfo <$> o .: "shards"
+        SnapshotInfo
+          <$> o .: "shards"
           <*> o .: "failures"
           <*> (unMS <$> o .: "duration_in_millis")
           <*> (posixMS <$> o .: "end_time_in_millis")
@@ -1696,7 +1733,8 @@
   parseJSON = withObject "SnapshotShardFailure" parse
     where
       parse o =
-        SnapshotShardFailure <$> o .: "index"
+        SnapshotShardFailure
+          <$> o .: "index"
           <*> o .:? "node_id"
           <*> o .: "reason"
           <*> o .: "shard_id"
@@ -1732,7 +1770,7 @@
 mkRRGroupRefNum i
   | i >= rrGroupRefNum minBound
       && i <= rrGroupRefNum maxBound =
-    Just $ RRGroupRefNum i
+      Just $ RRGroupRefNum i
   | otherwise = Nothing
 
 -- | Reasonable defaults for snapshot restores
@@ -1801,7 +1839,8 @@
   parseJSON = withObject "NodeBreakerStats" parse
     where
       parse o =
-        NodeBreakerStats <$> o .: "tripped"
+        NodeBreakerStats
+          <$> o .: "tripped"
           <*> o .: "overhead"
           <*> o .: "estimated_size_in_bytes"
           <*> o .: "limit_size_in_bytes"
@@ -1810,14 +1849,16 @@
   parseJSON = withObject "NodeHTTPStats" parse
     where
       parse o =
-        NodeHTTPStats <$> o .: "total_opened"
+        NodeHTTPStats
+          <$> o .: "total_opened"
           <*> o .: "current_open"
 
 instance FromJSON NodeTransportStats where
   parseJSON = withObject "NodeTransportStats" parse
     where
       parse o =
-        NodeTransportStats <$> o .: "tx_size_in_bytes"
+        NodeTransportStats
+          <$> o .: "tx_size_in_bytes"
           <*> o .: "tx_count"
           <*> o .: "rx_size_in_bytes"
           <*> o .: "rx_count"
@@ -1827,7 +1868,8 @@
   parseJSON = withObject "NodeFSStats" parse
     where
       parse o =
-        NodeFSStats <$> o .: "data"
+        NodeFSStats
+          <$> o .: "data"
           <*> o .: "total"
           <*> (posixMS <$> o .: "timestamp")
 
@@ -1835,7 +1877,8 @@
   parseJSON = withObject "NodeDataPathStats" parse
     where
       parse o =
-        NodeDataPathStats <$> (fmap unStringlyTypedDouble <$> o .:? "disk_service_time")
+        NodeDataPathStats
+          <$> (fmap unStringlyTypedDouble <$> o .:? "disk_service_time")
           <*> (fmap unStringlyTypedDouble <$> o .:? "disk_queue")
           <*> o .:? "disk_io_size_in_bytes"
           <*> o .:? "disk_write_size_in_bytes"
@@ -1855,7 +1898,8 @@
   parseJSON = withObject "NodeFSTotalStats" parse
     where
       parse o =
-        NodeFSTotalStats <$> (fmap unStringlyTypedDouble <$> o .:? "disk_service_time")
+        NodeFSTotalStats
+          <$> (fmap unStringlyTypedDouble <$> o .:? "disk_service_time")
           <*> (fmap unStringlyTypedDouble <$> o .:? "disk_queue")
           <*> o .:? "disk_io_size_in_bytes"
           <*> o .:? "disk_write_size_in_bytes"
@@ -1872,7 +1916,8 @@
     where
       parse o = do
         tcp <- o .: "tcp"
-        NodeNetworkStats <$> tcp .: "out_rsts"
+        NodeNetworkStats
+          <$> tcp .: "out_rsts"
           <*> tcp .: "in_errs"
           <*> tcp .: "attempt_fails"
           <*> tcp .: "estab_resets"
@@ -1887,7 +1932,8 @@
   parseJSON = withObject "NodeThreadPoolStats" parse
     where
       parse o =
-        NodeThreadPoolStats <$> o .: "completed"
+        NodeThreadPoolStats
+          <$> o .: "completed"
           <*> o .: "largest"
           <*> o .: "rejected"
           <*> o .: "active"
@@ -1911,7 +1957,8 @@
         oldM <- pools .: "old"
         survivorM <- pools .: "survivor"
         youngM <- pools .: "young"
-        NodeJVMStats <$> pure mapped
+        NodeJVMStats
+          <$> pure mapped
           <*> pure direct
           <*> pure oldC
           <*> pure youngC
@@ -1933,7 +1980,8 @@
   parseJSON = withObject "JVMBufferPoolStats" parse
     where
       parse o =
-        JVMBufferPoolStats <$> o .: "total_capacity_in_bytes"
+        JVMBufferPoolStats
+          <$> o .: "total_capacity_in_bytes"
           <*> o .: "used_in_bytes"
           <*> o .: "count"
 
@@ -1941,14 +1989,16 @@
   parseJSON = withObject "JVMGCStats" parse
     where
       parse o =
-        JVMGCStats <$> (unMS <$> o .: "collection_time_in_millis")
+        JVMGCStats
+          <$> (unMS <$> o .: "collection_time_in_millis")
           <*> o .: "collection_count"
 
 instance FromJSON JVMPoolStats where
   parseJSON = withObject "JVMPoolStats" parse
     where
       parse o =
-        JVMPoolStats <$> o .: "peak_max_in_bytes"
+        JVMPoolStats
+          <$> o .: "peak_max_in_bytes"
           <*> o .: "peak_used_in_bytes"
           <*> o .: "max_in_bytes"
           <*> o .: "used_in_bytes"
@@ -1959,7 +2009,8 @@
       parse o = do
         mem <- o .: "mem"
         cpu <- o .: "cpu"
-        NodeProcessStats <$> (posixMS <$> o .: "timestamp")
+        NodeProcessStats
+          <$> (posixMS <$> o .: "timestamp")
           <*> o .: "open_file_descriptors"
           <*> o .: "max_file_descriptors"
           <*> cpu .: "percent"
@@ -1974,7 +2025,8 @@
         mem <- o .: "mem"
         cpu <- o .: "cpu"
         load <- o .:? "load_average"
-        NodeOSStats <$> (posixMS <$> o .: "timestamp")
+        NodeOSStats
+          <$> (posixMS <$> o .: "timestamp")
           <*> cpu .: "percent"
           <*> pure load
           <*> mem .: "total_in_bytes"
@@ -1991,7 +2043,8 @@
     where
       parse v = case V.toList v of
         [one, five, fifteen] ->
-          LoadAvgs <$> parseJSON one
+          LoadAvgs
+            <$> parseJSON one
             <*> parseJSON five
             <*> parseJSON fifteen
         _ -> fail "Expecting a triple of Doubles"
@@ -2020,85 +2073,139 @@
         indexing <- o .: "indexing"
         store <- o .: "store"
         docs <- o .: "docs"
-        NodeIndicesStats <$> (fmap unMS <$> mRecovery .:: "throttle_time_in_millis")
-          <*> mRecovery .:: "current_as_target"
-          <*> mRecovery .:: "current_as_source"
-          <*> mQueryCache .:: "miss_count"
-          <*> mQueryCache .:: "hit_count"
-          <*> mQueryCache .:: "evictions"
-          <*> mQueryCache .:: "memory_size_in_bytes"
-          <*> mSuggest .:: "current"
+        NodeIndicesStats
+          <$> (fmap unMS <$> mRecovery .:: "throttle_time_in_millis")
+          <*> mRecovery
+          .:: "current_as_target"
+          <*> mRecovery
+          .:: "current_as_source"
+          <*> mQueryCache
+          .:: "miss_count"
+          <*> mQueryCache
+          .:: "hit_count"
+          <*> mQueryCache
+          .:: "evictions"
+          <*> mQueryCache
+          .:: "memory_size_in_bytes"
+          <*> mSuggest
+          .:: "current"
           <*> (fmap unMS <$> mSuggest .:: "time_in_millis")
-          <*> mSuggest .:: "total"
-          <*> translog .: "size_in_bytes"
-          <*> translog .: "operations"
-          <*> segments .:? "fixed_bit_set_memory_in_bytes"
-          <*> segments .: "version_map_memory_in_bytes"
-          <*> segments .:? "index_writer_max_memory_in_bytes"
-          <*> segments .: "index_writer_memory_in_bytes"
-          <*> segments .: "memory_in_bytes"
-          <*> segments .: "count"
-          <*> completion .: "size_in_bytes"
-          <*> mPercolate .:: "queries"
-          <*> mPercolate .:: "memory_size_in_bytes"
-          <*> mPercolate .:: "current"
+          <*> mSuggest
+          .:: "total"
+          <*> translog
+          .: "size_in_bytes"
+          <*> translog
+          .: "operations"
+          <*> segments
+          .:? "fixed_bit_set_memory_in_bytes"
+          <*> segments
+          .: "version_map_memory_in_bytes"
+          <*> segments
+          .:? "index_writer_max_memory_in_bytes"
+          <*> segments
+          .: "index_writer_memory_in_bytes"
+          <*> segments
+          .: "memory_in_bytes"
+          <*> segments
+          .: "count"
+          <*> completion
+          .: "size_in_bytes"
+          <*> mPercolate
+          .:: "queries"
+          <*> mPercolate
+          .:: "memory_size_in_bytes"
+          <*> mPercolate
+          .:: "current"
           <*> (fmap unMS <$> mPercolate .:: "time_in_millis")
-          <*> mPercolate .:: "total"
-          <*> fielddata .: "evictions"
-          <*> fielddata .: "memory_size_in_bytes"
+          <*> mPercolate
+          .:: "total"
+          <*> fielddata
+          .: "evictions"
+          <*> fielddata
+          .: "memory_size_in_bytes"
           <*> (unMS <$> warmer .: "total_time_in_millis")
-          <*> warmer .: "total"
-          <*> warmer .: "current"
+          <*> warmer
+          .: "total"
+          <*> warmer
+          .: "current"
           <*> (unMS <$> flush .: "total_time_in_millis")
-          <*> flush .: "total"
+          <*> flush
+          .: "total"
           <*> (unMS <$> refresh .: "total_time_in_millis")
-          <*> refresh .: "total"
-          <*> merges .: "total_size_in_bytes"
-          <*> merges .: "total_docs"
+          <*> refresh
+          .: "total"
+          <*> merges
+          .: "total_size_in_bytes"
+          <*> merges
+          .: "total_docs"
           <*> (unMS <$> merges .: "total_time_in_millis")
-          <*> merges .: "total"
-          <*> merges .: "current_size_in_bytes"
-          <*> merges .: "current_docs"
-          <*> merges .: "current"
-          <*> search .: "fetch_current"
+          <*> merges
+          .: "total"
+          <*> merges
+          .: "current_size_in_bytes"
+          <*> merges
+          .: "current_docs"
+          <*> merges
+          .: "current"
+          <*> search
+          .: "fetch_current"
           <*> (unMS <$> search .: "fetch_time_in_millis")
-          <*> search .: "fetch_total"
-          <*> search .: "query_current"
+          <*> search
+          .: "fetch_total"
+          <*> search
+          .: "query_current"
           <*> (unMS <$> search .: "query_time_in_millis")
-          <*> search .: "query_total"
-          <*> search .: "open_contexts"
-          <*> getStats .: "current"
+          <*> search
+          .: "query_total"
+          <*> search
+          .: "open_contexts"
+          <*> getStats
+          .: "current"
           <*> (unMS <$> getStats .: "missing_time_in_millis")
-          <*> getStats .: "missing_total"
+          <*> getStats
+          .: "missing_total"
           <*> (unMS <$> getStats .: "exists_time_in_millis")
-          <*> getStats .: "exists_total"
+          <*> getStats
+          .: "exists_total"
           <*> (unMS <$> getStats .: "time_in_millis")
-          <*> getStats .: "total"
+          <*> getStats
+          .: "total"
           <*> (fmap unMS <$> indexing .:? "throttle_time_in_millis")
-          <*> indexing .:? "is_throttled"
-          <*> indexing .:? "noop_update_total"
-          <*> indexing .: "delete_current"
+          <*> indexing
+          .:? "is_throttled"
+          <*> indexing
+          .:? "noop_update_total"
+          <*> indexing
+          .: "delete_current"
           <*> (unMS <$> indexing .: "delete_time_in_millis")
-          <*> indexing .: "delete_total"
-          <*> indexing .: "index_current"
+          <*> indexing
+          .: "delete_total"
+          <*> indexing
+          .: "index_current"
           <*> (unMS <$> indexing .: "index_time_in_millis")
-          <*> indexing .: "index_total"
+          <*> indexing
+          .: "index_total"
           <*> (fmap unMS <$> store .:? "throttle_time_in_millis")
-          <*> store .: "size_in_bytes"
-          <*> docs .: "deleted"
-          <*> docs .: "count"
+          <*> store
+          .: "size_in_bytes"
+          <*> docs
+          .: "deleted"
+          <*> docs
+          .: "count"
 
 instance FromJSON NodeBreakersStats where
   parseJSON = withObject "NodeBreakersStats" parse
     where
       parse o =
-        NodeBreakersStats <$> o .: "parent"
+        NodeBreakersStats
+          <$> o .: "parent"
           <*> o .: "request"
           <*> o .: "fielddata"
 
 parseNodeStats :: FullNodeId -> Object -> Parser NodeStats
 parseNodeStats fnid o =
-  NodeStats <$> o .: "name"
+  NodeStats
+    <$> o .: "name"
     <*> pure fnid
     <*> o .:? "breakers"
     <*> o .: "http"
@@ -2113,7 +2220,8 @@
 
 parseNodeInfo :: FullNodeId -> Object -> Parser NodeInfo
 parseNodeInfo nid o =
-  NodeInfo <$> o .:? "http_address"
+  NodeInfo
+    <$> o .:? "http_address"
     <*> o .: "build_hash"
     <*> o .: "version"
     <*> o .: "ip"
@@ -2135,7 +2243,8 @@
   parseJSON = withObject "NodePluginInfo" parse
     where
       parse o =
-        NodePluginInfo <$> o .:? "site"
+        NodePluginInfo
+          <$> o .:? "site"
           <*> o .:? "jvm"
           <*> o .: "description"
           <*> o .: "version"
@@ -2145,7 +2254,8 @@
   parseJSON = withObject "NodeHTTPInfo" parse
     where
       parse o =
-        NodeHTTPInfo <$> o .: "max_content_length_in_bytes"
+        NodeHTTPInfo
+          <$> o .: "max_content_length_in_bytes"
           <*> o .: "publish_address"
           <*> o .: "bound_address"
 
@@ -2153,14 +2263,16 @@
   parseJSON = withObject "BoundTransportAddress" parse
     where
       parse o =
-        BoundTransportAddress <$> o .: "publish_address"
+        BoundTransportAddress
+          <$> o .: "publish_address"
           <*> o .: "bound_address"
 
 instance FromJSON NodeOSInfo where
   parseJSON = withObject "NodeOSInfo" parse
     where
       parse o =
-        NodeOSInfo <$> (unMS <$> o .: "refresh_interval_in_millis")
+        NodeOSInfo
+          <$> (unMS <$> o .: "refresh_interval_in_millis")
           <*> o .: "name"
           <*> o .: "arch"
           <*> o .: "version"
@@ -2171,7 +2283,8 @@
   parseJSON = withObject "CPUInfo" parse
     where
       parse o =
-        CPUInfo <$> o .: "cache_size_in_bytes"
+        CPUInfo
+          <$> o .: "cache_size_in_bytes"
           <*> o .: "cores_per_socket"
           <*> o .: "total_sockets"
           <*> o .: "total_cores"
@@ -2183,7 +2296,8 @@
   parseJSON = withObject "NodeProcessInfo" parse
     where
       parse o =
-        NodeProcessInfo <$> o .: "mlockall"
+        NodeProcessInfo
+          <$> o .: "mlockall"
           <*> o .:? "max_file_descriptors"
           <*> o .: "id"
           <*> (unMS <$> o .: "refresh_interval_in_millis")
@@ -2192,7 +2306,8 @@
   parseJSON = withObject "NodeJVMInfo" parse
     where
       parse o =
-        NodeJVMInfo <$> o .: "memory_pools"
+        NodeJVMInfo
+          <$> o .: "memory_pools"
           <*> o .: "gc_collectors"
           <*> o .: "mem"
           <*> (posixMS <$> o .: "start_time_in_millis")
@@ -2206,7 +2321,8 @@
   parseJSON = withObject "JVMMemoryInfo" parse
     where
       parse o =
-        JVMMemoryInfo <$> o .: "direct_max_in_bytes"
+        JVMMemoryInfo
+          <$> o .: "direct_max_in_bytes"
           <*> o .: "non_heap_max_in_bytes"
           <*> o .: "non_heap_init_in_bytes"
           <*> o .: "heap_max_in_bytes"
@@ -2217,7 +2333,8 @@
     where
       parse o = do
         ka <- maybe (return Nothing) (fmap Just . parseStringInterval) =<< o .:? "keep_alive"
-        NodeThreadPoolInfo <$> (parseJSON . unStringlyTypeJSON =<< o .: "queue_size")
+        NodeThreadPoolInfo
+          <$> (parseJSON . unStringlyTypeJSON =<< o .: "queue_size")
           <*> pure ka
           <*> o .:? "min"
           <*> o .:? "max"
@@ -2310,7 +2427,8 @@
   parseJSON = withObject "NodeTransportInfo" parse
     where
       parse o =
-        NodeTransportInfo <$> (maybe (return mempty) parseProfiles =<< o .:? "profiles")
+        NodeTransportInfo
+          <$> (maybe (return mempty) parseProfiles =<< o .:? "profiles")
           <*> o .: "publish_address"
           <*> o .: "bound_address"
       parseProfiles (Object o) | X.null o = return []
@@ -2322,14 +2440,16 @@
   parseJSON = withObject "NodeNetworkInfo" parse
     where
       parse o =
-        NodeNetworkInfo <$> o .: "primary_interface"
+        NodeNetworkInfo
+          <$> o .: "primary_interface"
           <*> (unMS <$> o .: "refresh_interval_in_millis")
 
 instance FromJSON NodeNetworkInterface where
   parseJSON = withObject "NodeNetworkInterface" parse
     where
       parse o =
-        NodeNetworkInterface <$> o .: "mac_address"
+        NodeNetworkInterface
+          <$> o .: "mac_address"
           <*> o .: "name"
           <*> o .: "address"
 
diff --git a/src/Database/Bloodhound/Internal/Client/BHRequest.hs b/src/Database/Bloodhound/Internal/Client/BHRequest.hs
--- a/src/Database/Bloodhound/Internal/Client/BHRequest.hs
+++ b/src/Database/Bloodhound/Internal/Client/BHRequest.hs
@@ -151,9 +151,9 @@
   m (ParsedEsResponse body)
 parseEsResponse response
   | isSuccess response = case eitherDecode body of
-    Right a -> return (Right a)
-    Left err ->
-      tryParseError err
+      Right a -> return (Right a)
+      Left err ->
+        tryParseError err
   | otherwise = tryParseError "Non-200 status code"
   where
     body = responseBody $ getResponse response
@@ -243,7 +243,8 @@
       if found
         then parseJSON jsonVal
         else return Nothing
-    EsResult <$> v .: "_index"
+    EsResult
+      <$> v .: "_index"
       <*> v .: "_type"
       <*> v .: "_id"
       <*> pure fr
@@ -292,15 +293,13 @@
 
 instance FromJSON Acknowledged where
   parseJSON =
-    withObject
-      "Acknowledged"
-      (.: "acknowledged")
+    withObject "Acknowledged" $
+      fmap Acknowledged . (.: "acknowledged")
 
 newtype Accepted = Accepted {isAccepted :: Bool}
   deriving stock (Eq, Show)
 
 instance FromJSON Accepted where
   parseJSON =
-    withObject
-      "Accepted"
-      (.: "accepted")
+    withObject "Accepted" $
+      fmap Accepted . (.: "accepted")
diff --git a/src/Database/Bloodhound/Internal/Client/Doc.hs b/src/Database/Bloodhound/Internal/Client/Doc.hs
--- a/src/Database/Bloodhound/Internal/Client/Doc.hs
+++ b/src/Database/Bloodhound/Internal/Client/Doc.hs
@@ -26,7 +26,7 @@
 mkDocVersion i
   | i >= docVersionNumber minBound
       && i <= docVersionNumber maxBound =
-    Just $ DocVersion i
+      Just $ DocVersion i
   | otherwise = Nothing
 
 instance Bounded DocVersion where
diff --git a/src/Database/Bloodhound/Internal/Highlight.hs b/src/Database/Bloodhound/Internal/Highlight.hs
--- a/src/Database/Bloodhound/Internal/Highlight.hs
+++ b/src/Database/Bloodhound/Internal/Highlight.hs
@@ -19,8 +19,8 @@
 instance ToJSON Highlights where
   toJSON (Highlights global fields) =
     omitNulls
-      ( ("fields" .= fields) :
-        highlightSettingsPairs global
+      ( ("fields" .= fields)
+          : highlightSettingsPairs global
       )
 
 data FieldHighlight
@@ -115,8 +115,8 @@
 postHighPairs :: Maybe PostingsHighlight -> [Pair]
 postHighPairs Nothing = []
 postHighPairs (Just (PostingsHighlight pCom)) =
-  ("type" .= String "postings") :
-  commonHighlightPairs pCom
+  ("type" .= String "postings")
+    : commonHighlightPairs pCom
 
 fastVectorHighPairs :: Maybe FastVectorHighlight -> [Pair]
 fastVectorHighPairs Nothing = []
diff --git a/src/Database/Bloodhound/Internal/Query.hs b/src/Database/Bloodhound/Internal/Query.hs
--- a/src/Database/Bloodhound/Internal/Query.hs
+++ b/src/Database/Bloodhound/Internal/Query.hs
@@ -134,33 +134,59 @@
   parseJSON v = withObject "Query" parse v
     where
       parse o =
-        termQuery `taggedWith` "term"
-          <|> termsQuery `taggedWith` "terms"
-          <|> idsQuery `taggedWith` "ids"
-          <|> queryQueryStringQuery `taggedWith` "query_string"
-          <|> queryMatchQuery `taggedWith` "match"
+        termQuery
+          `taggedWith` "term"
+          <|> termsQuery
+          `taggedWith` "terms"
+          <|> idsQuery
+          `taggedWith` "ids"
+          <|> queryQueryStringQuery
+          `taggedWith` "query_string"
+          <|> queryMatchQuery
+          `taggedWith` "match"
           <|> queryMultiMatchQuery
-          <|> queryBoolQuery `taggedWith` "bool"
-          <|> queryBoostingQuery `taggedWith` "boosting"
-          <|> queryCommonTermsQuery `taggedWith` "common"
-          <|> constantScoreQuery `taggedWith` "constant_score"
-          <|> queryFunctionScoreQuery `taggedWith` "function_score"
-          <|> queryDisMaxQuery `taggedWith` "dis_max"
-          <|> queryFuzzyLikeThisQuery `taggedWith` "fuzzy_like_this"
-          <|> queryFuzzyLikeFieldQuery `taggedWith` "fuzzy_like_this_field"
-          <|> queryFuzzyQuery `taggedWith` "fuzzy"
-          <|> queryHasChildQuery `taggedWith` "has_child"
-          <|> queryHasParentQuery `taggedWith` "has_parent"
-          <|> queryIndicesQuery `taggedWith` "indices"
-          <|> matchAllQuery `taggedWith` "match_all"
-          <|> queryMoreLikeThisQuery `taggedWith` "more_like_this"
-          <|> queryMoreLikeThisFieldQuery `taggedWith` "more_like_this_field"
-          <|> queryNestedQuery `taggedWith` "nested"
-          <|> queryPrefixQuery `taggedWith` "prefix"
-          <|> queryRangeQuery `taggedWith` "range"
-          <|> queryRegexpQuery `taggedWith` "regexp"
-          <|> querySimpleQueryStringQuery `taggedWith` "simple_query_string"
-          <|> queryWildcardQuery `taggedWith` "wildcard"
+          <|> queryBoolQuery
+          `taggedWith` "bool"
+          <|> queryBoostingQuery
+          `taggedWith` "boosting"
+          <|> queryCommonTermsQuery
+          `taggedWith` "common"
+          <|> constantScoreQuery
+          `taggedWith` "constant_score"
+          <|> queryFunctionScoreQuery
+          `taggedWith` "function_score"
+          <|> queryDisMaxQuery
+          `taggedWith` "dis_max"
+          <|> queryFuzzyLikeThisQuery
+          `taggedWith` "fuzzy_like_this"
+          <|> queryFuzzyLikeFieldQuery
+          `taggedWith` "fuzzy_like_this_field"
+          <|> queryFuzzyQuery
+          `taggedWith` "fuzzy"
+          <|> queryHasChildQuery
+          `taggedWith` "has_child"
+          <|> queryHasParentQuery
+          `taggedWith` "has_parent"
+          <|> queryIndicesQuery
+          `taggedWith` "indices"
+          <|> matchAllQuery
+          `taggedWith` "match_all"
+          <|> queryMoreLikeThisQuery
+          `taggedWith` "more_like_this"
+          <|> queryMoreLikeThisFieldQuery
+          `taggedWith` "more_like_this_field"
+          <|> queryNestedQuery
+          `taggedWith` "nested"
+          <|> queryPrefixQuery
+          `taggedWith` "prefix"
+          <|> queryRangeQuery
+          `taggedWith` "range"
+          <|> queryRegexpQuery
+          `taggedWith` "regexp"
+          <|> querySimpleQueryStringQuery
+          `taggedWith` "simple_query_string"
+          <|> queryWildcardQuery
+          `taggedWith` "wildcard"
         where
           taggedWith parser k = parser =<< o .: k
       termQuery = fieldTagged $ \(FieldName fn) o ->
@@ -181,7 +207,8 @@
       queryCommonTermsQuery = pure . QueryCommonTermsQuery
       constantScoreQuery o = case X.lookup "filter" o of
         Just x ->
-          ConstantScoreQuery <$> parseJSON x
+          ConstantScoreQuery
+            <$> parseJSON x
             <*> o .: "boost"
         _ -> fail "Does not appear to be a ConstantScoreQuery"
       queryFunctionScoreQuery = pure . QueryFunctionScoreQuery
@@ -329,7 +356,8 @@
   parseJSON = withObject "SimpleQueryStringQuery" parse
     where
       parse o =
-        SimpleQueryStringQuery <$> o .: "query"
+        SimpleQueryStringQuery
+          <$> o .: "query"
           <*> o .:? "fields"
           <*> o .:? "default_operator"
           <*> o .:? "analyzer"
@@ -1614,9 +1642,12 @@
   parseJSON = withObject "BoolMatch" parse
     where
       parse o =
-        mustMatch `taggedWith` "must"
-          <|> mustNotMatch `taggedWith` "must_not"
-          <|> shouldMatch `taggedWith` "should"
+        mustMatch
+          `taggedWith` "must"
+          <|> mustNotMatch
+          `taggedWith` "must_not"
+          <|> shouldMatch
+          `taggedWith` "should"
         where
           taggedWith parser k = parser =<< o .: k
           mustMatch t = MustMatch t <$> o .:? "_cache" .!= defaultCache
@@ -1657,7 +1688,8 @@
   parseJSON = withObject "LatLon" parse
     where
       parse o =
-        LatLon <$> o .: "lat"
+        LatLon
+          <$> o .: "lat"
           <*> o .: "lon"
 
 data GeoBoundingBox = GeoBoundingBox
@@ -1816,7 +1848,8 @@
   parseJSON = withText "Distance" parse
     where
       parse t =
-        Distance <$> parseCoeff nT
+        Distance
+          <$> parseCoeff nT
           <*> parseJSON (String unitT)
         where
           (nT, unitT) = T.span validForNumber t
@@ -1890,14 +1923,14 @@
     omitNulls base
     where
       base =
-        functionScoreFunctionsPair fns :
-        [ "query" .= query,
-          "boost" .= boost,
-          "max_boost" .= maxBoost,
-          "boost_mode" .= boostMode,
-          "min_score" .= minScore,
-          "score_mode" .= scoreMode
-        ]
+        functionScoreFunctionsPair fns
+          : [ "query" .= query,
+              "boost" .= boost,
+              "max_boost" .= maxBoost,
+              "boost_mode" .= boostMode,
+              "min_score" .= minScore,
+              "score_mode" .= scoreMode
+            ]
 
 instance FromJSON FunctionScoreQuery where
   parseJSON = withObject "FunctionScoreQuery" parse
@@ -1907,7 +1940,8 @@
           <$> o .:? "query"
           <*> o .:? "boost"
           <*> ( singleFunction o
-                  <|> multipleFunctions `taggedWith` "functions"
+                  <|> multipleFunctions
+                  `taggedWith` "functions"
               )
           <*> o .:? "max_boost"
           <*> o .:? "boost_mode"
@@ -1935,10 +1969,10 @@
     omitNulls base
     where
       base =
-        functionScoreFunctionPair fn :
-        [ "filter" .= filter',
-          "weight" .= weight
-        ]
+        functionScoreFunctionPair fn
+          : [ "filter" .= filter',
+              "weight" .= weight
+            ]
 
 instance FromJSON ComponentFunctionScoreFunction where
   parseJSON = withObject "ComponentFunctionScoreFunction" parse
diff --git a/tests/Test/BulkAPI.hs b/tests/Test/BulkAPI.hs
--- a/tests/Test/BulkAPI.hs
+++ b/tests/Test/BulkAPI.hs
@@ -44,7 +44,8 @@
 assertDocs as = do
   let (ids, docs) = unzip as
   res <-
-    ids & traverse (getDocument testIndex)
+    ids
+      & traverse (getDocument testIndex)
       <&> traverse (fmap getSource . eitherDecodeResponse)
 
   liftIO $ res `shouldBe` Right (Just <$> docs)
diff --git a/tests/Test/Generators.hs b/tests/Test/Generators.hs
--- a/tests/Test/Generators.hs
+++ b/tests/Test/Generators.hs
@@ -48,7 +48,8 @@
 
 instance (Arbitrary a, Typeable a) => Arbitrary (Hit a) where
   arbitrary =
-    Hit <$> arbitrary
+    Hit
+      <$> arbitrary
       <*> arbitrary
       <*> arbitraryScore
       <*> arbitrary
@@ -492,7 +493,9 @@
           . chomp
           <$> arbitrary,
         CharFilterDefinitionPatternReplace
-          <$> arbitrary <*> arbitrary <*> arbitrary
+          <$> arbitrary
+          <*> arbitrary
+          <*> arbitrary
       ]
     where
       chomp =
diff --git a/tests/Test/Snapshots.hs b/tests/Test/Snapshots.hs
--- a/tests/Test/Snapshots.hs
+++ b/tests/Test/Snapshots.hs
@@ -90,7 +90,7 @@
                 Right [snap]
                   | snapInfoState snap == SnapshotSuccess
                       && snapInfoName snap == s1n ->
-                    return ()
+                      return ()
                   | otherwise -> expectationFailure (show snap)
                 Right [] -> expectationFailure "There were no snapshots"
                 Right snaps -> expectationFailure ("Expected 1 snapshot but got" <> show (length snaps))
diff --git a/tests/tests.hs b/tests/tests.hs
--- a/tests/tests.hs
+++ b/tests/tests.hs
@@ -67,7 +67,8 @@
             Just dv ->
               (dv >= minBound)
                 .&&. (dv <= maxBound)
-                .&&. docVersionNumber dv === i
+                .&&. docVersionNumber dv
+                === i
 
   describe "getNodesInfo" $
     it "fetches the responding node when LocalNode is used" $
