diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Changelog
 
+## [0.3.2.0] - 2021-12-03
+
+### Added
+
+* `Foldable` and `Traversable` instance for `CTree`
+* `Foldable` and `Traversable` instance for `CForest`
+
 ## [0.3.1.0] - 2021-11-23
 
 ### Added
@@ -11,9 +18,9 @@
 
 ## [0.3.0.0] - 2020-02-14
 
-### Changed
+### Added
 
-- NFData instances for benchmarks
+- `NFData` instances for benchmarks
 
 ## [0.2.0.0] - 2019-09-23
 
diff --git a/cursor.cabal b/cursor.cabal
--- a/cursor.cabal
+++ b/cursor.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.34.5.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 295467a341ff6e00d4d214636b3656ec0c9a1e9edbd8a56c8801ff54b64d7445
+-- hash: 6fe2aa234542609cd72561ea24a95b4c776348d851658752b61fdff8c0c80542
 
 name:           cursor
-version:        0.3.1.0
+version:        0.3.2.0
 synopsis:       Purely Functional Cursors
 description:    Purely Functional Cursors for common data structures
                 .
diff --git a/src/Cursor/Tree/Types.hs b/src/Cursor/Tree/Types.hs
--- a/src/Cursor/Tree/Types.hs
+++ b/src/Cursor/Tree/Types.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE DeriveFunctor #-}
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE TypeFamilies #-}
 
 module Cursor.Tree.Types
@@ -106,6 +107,12 @@
 
 instance NFData a => NFData (CTree a)
 
+instance Foldable CTree where
+  foldMap f (CNode a cf) = f a `mappend` foldMap f cf
+
+instance Traversable CTree where
+  traverse f (CNode a cf) = CNode <$> f a <*> traverse f cf
+
 makeCTree :: Tree a -> CTree a
 makeCTree = cTree False
 
@@ -124,6 +131,18 @@
 instance Validity a => Validity (CForest a)
 
 instance NFData a => NFData (CForest a)
+
+instance Foldable CForest where
+  foldMap f = \case
+    EmptyCForest -> mempty
+    ClosedForest ne -> foldMap (foldMap f) ne
+    OpenForest ne -> foldMap (foldMap f) ne
+
+instance Traversable CForest where
+  traverse f = \case
+    EmptyCForest -> pure EmptyCForest
+    ClosedForest ne -> ClosedForest <$> traverse (traverse f) ne
+    OpenForest ne -> OpenForest <$> traverse (traverse f) ne
 
 makeCForest :: Forest a -> CForest a
 makeCForest = cForest True
