diff --git a/aeson-value-parser.cabal b/aeson-value-parser.cabal
--- a/aeson-value-parser.cabal
+++ b/aeson-value-parser.cabal
@@ -1,7 +1,7 @@
 name:
   aeson-value-parser
 version:
-  0.12.2
+  0.12.3
 synopsis:
   An API for parsing "aeson" JSON tree into Haskell types
 description:
@@ -55,6 +55,7 @@
     scientific == 0.3.*,
     text == 1.*,
     --
+    foldl >=1.3 && <2,
     transformers >= 0.5 && < 0.7,
     mtl-prelude < 3,
     base-prelude >= 0.1.19 && < 2
diff --git a/library/Aeson/ValueParser.hs b/library/Aeson/ValueParser.hs
--- a/library/Aeson/ValueParser.hs
+++ b/library/Aeson/ValueParser.hs
@@ -18,11 +18,13 @@
   Object,
   field,
   fieldsMap,
+  foldFields,
   foldlFields,
   -- * Array parsers
   Array,
   element,
   elementsVector,
+  foldElements,
   foldlElements,
   foldlElements1,
   foldrElements,
@@ -33,6 +35,7 @@
 import MTLPrelude
 import Data.Text (Text)
 import Data.Scientific (Scientific)
+import Control.Foldl (Fold(..))
 import qualified Data.Aeson as A
 import qualified Data.HashMap.Strict as B
 import qualified Data.Vector as C
@@ -162,6 +165,11 @@
 fieldsMap (Value effect) =
   Object $ ReaderT $ mapM (runReaderT effect)
 
+{-# INLINE foldFields #-}
+foldFields :: Fold (Text, field) object -> Value field -> Object object
+foldFields (Fold foldStep foldInit foldEnd) value =
+  fmap foldEnd (foldlFields foldStep foldInit value)
+
 {-# INLINE foldlFields #-}
 foldlFields :: (a -> (Text, b) -> a) -> a -> Value b -> Object a
 foldlFields step init (Value impl) =
@@ -191,6 +199,11 @@
 elementsVector :: Value a -> Array (C.Vector a)
 elementsVector (Value effect) =
   Array $ ReaderT $ mapM (runReaderT effect)
+
+{-# INLINE foldElements #-}
+foldElements :: Fold element array -> Value element -> Array array
+foldElements (Fold foldStep foldInit foldEnd) value =
+  fmap foldEnd (foldlElements foldStep foldInit value)
 
 {-# INLINE foldlElements #-}
 foldlElements :: (a -> b -> a) -> a -> Value b -> Array a
