diff --git a/deferred-folds.cabal b/deferred-folds.cabal
--- a/deferred-folds.cabal
+++ b/deferred-folds.cabal
@@ -1,7 +1,7 @@
 name:
   deferred-folds
 version:
-  0.4.1
+  0.5
 category:
   Folding
 synopsis:
diff --git a/library/DeferredFolds/Unfold.hs b/library/DeferredFolds/Unfold.hs
--- a/library/DeferredFolds/Unfold.hs
+++ b/library/DeferredFolds/Unfold.hs
@@ -98,10 +98,14 @@
   mempty = empty
   mappend = (<>)
 
-{-| Perform a strict left fold -}
-{-# INLINE foldl' #-}
-foldl' :: (output -> input -> output) -> output -> Unfold input -> output
-foldl' step init (Unfold run) = run step init
+instance Foldable Unfold where
+  {-# INLINE foldMap #-}
+  foldMap inputMonoid = foldl' step mempty where
+    step monoid input = mappend monoid (inputMonoid input)
+  foldl = foldl'
+  {-# INLINE foldl' #-}
+  foldl' step init (Unfold run) = run step init
+
 
 {-| Apply a Gonzalez fold -}
 {-# INLINE fold #-}
diff --git a/library/DeferredFolds/UnfoldM.hs b/library/DeferredFolds/UnfoldM.hs
--- a/library/DeferredFolds/UnfoldM.hs
+++ b/library/DeferredFolds/UnfoldM.hs
@@ -1,7 +1,7 @@
 module DeferredFolds.UnfoldM
 where
 
-import DeferredFolds.Prelude hiding (foldl')
+import DeferredFolds.Prelude
 import qualified DeferredFolds.Prelude as A
 
 
@@ -47,13 +47,16 @@
   mempty = empty
   mappend = (<>)
 
-{-| Perform a strict left fold -}
-{-# INLINE foldl' #-}
-foldl' :: (output -> input -> output) -> output -> UnfoldM Identity input -> output
-foldl' step init (UnfoldM run) =
-  runIdentity (run identityStep init)
-  where
-    identityStep state input = return (step state input)
+instance Foldable (UnfoldM Identity) where
+  {-# INLINE foldMap #-}
+  foldMap inputMonoid = foldl' step mempty where
+    step monoid input = mappend monoid (inputMonoid input)
+  foldl = foldl'
+  {-# INLINE foldl' #-}
+  foldl' step init (UnfoldM run) =
+    runIdentity (run identityStep init)
+    where
+      identityStep state input = return (step state input)
 
 {-| Perform a monadic strict left fold -}
 {-# INLINE foldlM' #-}
