diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,7 +1,11 @@
+0.0.8
+
+* Add `leaves` function
+
 0.0.7
 
 * Fix `Show` instance
-* Add `traverseNode` and `traverseNode_`
+* Add `traverseNode` and `traverseNode_` functions
 
 0.0.6
 
diff --git a/polytree.cabal b/polytree.cabal
--- a/polytree.cabal
+++ b/polytree.cabal
@@ -1,5 +1,5 @@
 name:                 polytree
-version:              0.0.7
+version:              0.0.8
 synopsis:             A polymorphic rose-tree
 description:          A rose-tree which has different data in the nodes and leaves
 license:              BSD3
diff --git a/src/Data/PolyTree.hs b/src/Data/PolyTree.hs
--- a/src/Data/PolyTree.hs
+++ b/src/Data/PolyTree.hs
@@ -4,7 +4,7 @@
 
 module Data.PolyTree where
 
-import Control.Applicative ( Applicative(liftA2), Alternative(empty) )
+import Control.Applicative ( Applicative(liftA2), Alternative(empty), asum )
 import Control.Lens
     ( preview,
       iso,
@@ -27,7 +27,7 @@
 import Data.Bifoldable ( Bifoldable(bifoldMap) )
 import Data.Bifunctor ( Bifunctor(bimap) )
 import Data.Bitraversable ( Bitraversable(..) )
-import Data.Foldable
+import Data.Foldable ( traverse_ )
 import Data.Functor ( void )
 import Data.Functor.Apply ( Apply((<.>)) )
 import Data.Functor.Bind ( Bind((>>-)) )
@@ -710,7 +710,7 @@
 traverseNode_ ::
   Foldable f =>
   Traversal (Tree f a b) () (a, f (Tree f a b)) a'
-traverseNode_ f (Leaf b) =
+traverseNode_ _ (Leaf b) =
   void (pure (Leaf b))
 traverseNode_ f (Node a t) =
   f (a, t) *> traverse_ (traverseNode_ f) t
@@ -738,6 +738,31 @@
   iso
     (matchTree (, Nothing) (\a t -> (a, Just t)))
     (\(a, t) -> maybe (Leaf a) (Node a) t)
+
+-- |
+--
+-- >>> leaves (Leaf 1 :: Tree0' Int)
+-- [1]
+--
+-- >>> leaves (Node 1 [] :: Tree0' Int)
+-- []
+--
+-- >>> leaves (Node 1 [Leaf 2] :: Tree0' Int)
+-- [2]
+--
+-- >>> leaves (Node 1 [Leaf 2, Node 3 []] :: Tree0' Int)
+-- [2]
+--
+-- >>> leaves (Node 1 [Leaf 2, Node 3 [Leaf 4]] :: Tree0' Int)
+-- [2,4]
+leaves ::
+  (Traversable f, Alternative f) =>
+  Tree f a b
+  -> f b
+leaves (Leaf b) =
+  pure b
+leaves (Node _ t) =
+  asum (fmap leaves t)
 
 -- |
 --
