diff --git a/aeson-value-parser.cabal b/aeson-value-parser.cabal
--- a/aeson-value-parser.cabal
+++ b/aeson-value-parser.cabal
@@ -1,5 +1,5 @@
 name: aeson-value-parser
-version: 0.17.1
+version: 0.18
 synopsis: API for parsing "aeson" JSON tree into Haskell types
 description:
   A flexible parser DSL of JSON AST produced by the \"aeson\" library
diff --git a/library/Aeson/ValueParser.hs b/library/Aeson/ValueParser.hs
--- a/library/Aeson/ValueParser.hs
+++ b/library/Aeson/ValueParser.hs
@@ -135,12 +135,6 @@
   Aeson.String x -> lift $ left (Error.message . fromMaybe "No details") $ runExcept $ runReaderT parser x
   _ -> empty
 
-{-# INLINE matchedString #-}
-matchedString :: (Text -> Either Text a) -> Value a
-matchedString parser = Value $ ReaderT $ \ case
-  Aeson.String x -> lift $ left Error.message $ parser x
-  _ -> empty
-
 {-# INLINE number #-}
 number :: Number a -> Value a
 number (Number parser) = Value $ ReaderT $ \ case
@@ -258,13 +252,16 @@
       Left error -> lift (throwE (maybe mempty Error.message error))
 
 {-# INLINE foldlFields #-}
-foldlFields :: (state -> Text -> field -> state) -> state -> Value field -> Object state
-foldlFields step state fieldParser = Object $ ReaderT $ \ object -> HashMap.foldlWithKey' newStep (pure state) object where
-  newStep stateE key fieldAst = case run fieldParser fieldAst of
-    Right !parsedField -> do
-      !state <- stateE
-      return $ step state key parsedField
-    Left error -> lift (throwE (Error.named key error))
+foldlFields :: (state -> key -> field -> state) -> state -> String key -> Value field -> Object state
+foldlFields step state keyParser fieldParser = Object $ ReaderT $ \ object -> HashMap.foldlWithKey' newStep (pure state) object where
+  newStep stateE key fieldAst = 
+    case runString keyParser key of
+      Right !parsedKey -> case run fieldParser fieldAst of
+        Right !parsedField -> do
+          !state <- stateE
+          return $ step state parsedKey parsedField
+        Left error -> lift (throwE (Error.named key error))
+      Left error -> lift (throwE (maybe mempty Error.message error))
 
 
 -- * Array parsers
