diff --git a/colonnade.cabal b/colonnade.cabal
--- a/colonnade.cabal
+++ b/colonnade.cabal
@@ -1,5 +1,5 @@
 name:                colonnade
-version:             0.4.5
+version:             0.4.6
 synopsis:            Generic types and functions for columnar encoding and decoding
 description:         Please see README.md
 homepage:            https://github.com/andrewthad/colonnade#readme
@@ -25,10 +25,10 @@
     Colonnade.Internal
   build-depends:
       base >= 4.7 && < 5
-    , contravariant
-    , vector
-    , text
-    , bytestring
+    , contravariant >= 1.2 && < 1.5
+    , vector >= 0.10 && < 0.12
+    , text >= 1.0 && < 1.3
+    , bytestring >= 0.10 && < 0.11
   default-language:    Haskell2010
 
 source-repository head
diff --git a/src/Colonnade/Encoding.hs b/src/Colonnade/Encoding.hs
--- a/src/Colonnade/Encoding.hs
+++ b/src/Colonnade/Encoding.hs
@@ -26,6 +26,14 @@
 runRow g (Encoding v) a = flip Vector.map v $
   \(OneEncoding _ encode) -> g (encode a)
 
+runBothMonadic_ :: Monad m
+  => Encoding Headed content a
+  -> (content -> content -> m b)
+  -> a
+  -> m ()
+runBothMonadic_ (Encoding v) g a =
+  forM_ v $ \(OneEncoding (Headed h) encode) -> g h (encode a)
+
 runRowMonadic :: (Monad m, Monoid b)
               => Encoding f content a
               -> (content -> m b)
@@ -35,6 +43,14 @@
   flip Internal.foldlMapM v
   $ \e -> g (oneEncodingEncode e a)
 
+runRowMonadic_ :: Monad m
+  => Encoding f content a
+  -> (content -> m b)
+  -> a
+  -> m ()
+runRowMonadic_ (Encoding v) g a =
+  forM_ v $ \e -> g (oneEncodingEncode e a)
+
 runRowMonadicWith :: (Monad m)
               => b
               -> (b -> b -> b)
@@ -43,8 +59,8 @@
               -> a
               -> m b
 runRowMonadicWith bempty bappend (Encoding v) g a =
-  foldlM (\br e -> do
-    bl <- g (oneEncodingEncode e a)
+  foldlM (\bl e -> do
+    br <- g (oneEncodingEncode e a)
     return (bappend bl br)
   ) bempty v
 
@@ -52,12 +68,29 @@
 runHeader g (Encoding v) =
   Vector.map (g . getHeaded . oneEncodingHead) v
 
+-- | This function is a helper for abusing 'Foldable' to optionally
+--   render a header. Its future is uncertain.
+runHeaderMonadicGeneral :: (Monad m, Monoid b, Foldable h)
+  => Encoding h content a
+  -> (content -> m b)
+  -> m b
+runHeaderMonadicGeneral (Encoding v) g = id
+  $ fmap (mconcat . Vector.toList)
+  $ Vector.mapM (Internal.foldlMapM g . oneEncodingHead) v
+
 runHeaderMonadic :: (Monad m, Monoid b)
                  => Encoding Headed content a
                  -> (content -> m b)
                  -> m b
 runHeaderMonadic (Encoding v) g =
   fmap (mconcat . Vector.toList) $ Vector.mapM (g . getHeaded . oneEncodingHead) v
+
+runHeaderMonadicGeneral_ :: (Monad m, Monoid b, Foldable h)
+  => Encoding h content a
+  -> (content -> m b)
+  -> m ()
+runHeaderMonadicGeneral_ (Encoding v) g =
+  Vector.mapM_ (Internal.foldlMapM g . oneEncodingHead) v
 
 runHeaderMonadic_ ::
      (Monad m)
