diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,11 @@
+0.4
+---
+* Derived `Functor`, `Foldable`, and `Traversable` for `Lift1` and `Lift2`
+
+0.3.1
+-----
+* Fixed a broken `#ifdef`
+
 0.3
 ---
 * Restructured so users can take advantage of default signatures
diff --git a/prelude-extras.cabal b/prelude-extras.cabal
--- a/prelude-extras.cabal
+++ b/prelude-extras.cabal
@@ -1,6 +1,6 @@
 name:          prelude-extras
 category:      Polymorphism, Combinators
-version:       0.3.1
+version:       0.4
 license:       BSD3
 cabal-version: >= 1.2
 license-file:  LICENSE
diff --git a/src/Prelude/Extras.hs b/src/Prelude/Extras.hs
--- a/src/Prelude/Extras.hs
+++ b/src/Prelude/Extras.hs
@@ -1,4 +1,7 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE DeriveFoldable #-}
+{-# LANGUAGE DeriveTraversable #-}
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ > 702
 #define DEFAULT_SIGNATURES
 {-# LANGUAGE DefaultSignatures #-}
@@ -33,6 +36,8 @@
   ) where
 
 import Control.Arrow (first)
+import Data.Foldable
+import Data.Traversable
 import Text.Read
 import qualified Text.ParserCombinators.ReadP as P
 import qualified Text.Read.Lex as L
@@ -316,6 +321,7 @@
        return (x:xs)
 
 newtype Lift1 f a = Lift1 { lower1 :: f a }
+  deriving (Functor, Foldable, Traversable)
 
 instance Eq1 f   => Eq1 (Lift1 f)   where Lift1 a ==# Lift1 b = a ==# b
 instance Ord1 f  => Ord1 (Lift1 f)  where Lift1 a `compare1` Lift1 b = compare1 a b
@@ -330,6 +336,7 @@
   readsPrec d = map (first Lift1) . readsPrec1 d
 
 newtype Lift2 f a b = Lift2 { lower2 :: f a b }
+  deriving (Functor, Foldable, Traversable)
 
 instance Eq2 f   => Eq2 (Lift2 f)   where Lift2 a ==## Lift2 b = a ==## b
 instance Ord2 f  => Ord2 (Lift2 f)  where Lift2 a `compare2` Lift2 b = compare2 a b
