diff --git a/src/Yesod/Paginator/Pages.hs b/src/Yesod/Paginator/Pages.hs
--- a/src/Yesod/Paginator/Pages.hs
+++ b/src/Yesod/Paginator/Pages.hs
@@ -57,6 +57,21 @@
     }
     deriving (Eq, Show)
 
+setPageItems :: Page a -> [b] -> Page b
+setPageItems page items = page { pageItems = items }
+
+overPageItems :: ([a] -> [b]) -> Page a -> Page b
+overPageItems f page = setPageItems page $ f $ pageItems page
+
+instance Functor Page where
+    fmap f = overPageItems $ fmap f
+
+instance Foldable Page where
+    foldMap f = foldMap f . pageItems
+
+instance Traversable Page where
+    traverse f page = setPageItems page <$> traverse f (pageItems page)
+
 -- | @'Page'@ constructor
 toPage :: [a] -> PageNumber -> Page a
 toPage = Page
@@ -68,6 +83,21 @@
     , pagesLast :: PageNumber
     }
     deriving (Eq, Show)
+
+setPagesCurrent :: Pages a -> Page b -> Pages b
+setPagesCurrent pages current = pages { pagesCurrent = current }
+
+overPagesCurrent :: (Page a -> Page b) -> Pages a -> Pages b
+overPagesCurrent f pages = setPagesCurrent pages $ f $ pagesCurrent pages
+
+instance Functor Pages where
+    fmap f = overPagesCurrent $ fmap f
+
+instance Foldable Pages where
+    foldMap f = foldMap f . pagesCurrent
+
+instance Traversable Pages where
+    traverse f pages = setPagesCurrent pages <$> traverse f (pagesCurrent pages)
 
 -- | Take previous pages, going back from current
 --
diff --git a/test/Yesod/Paginator/PagesSpec.hs b/test/Yesod/Paginator/PagesSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Yesod/Paginator/PagesSpec.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE RecordWildCards #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+module Yesod.Paginator.PagesSpec
+    ( spec
+    )
+where
+
+import Data.Foldable (traverse_)
+import Data.Functor.Classes (Eq1(..), Show1(..))
+import Data.Proxy
+import Test.Hspec
+import Test.QuickCheck
+import Test.QuickCheck.Classes
+import Yesod.Paginator.Pages
+
+instance Arbitrary a => Arbitrary (Page a) where
+    arbitrary = (`toPage` 1) <$> arbitrary
+
+instance Arbitrary a => Arbitrary (Pages a) where
+    arbitrary = toPages 1 5 100 <$> arbitrary
+
+instance Eq1 Page where
+    liftEq f a b = liftEq f (pageItems a) (pageItems b)
+
+instance Show1 Page where
+    liftShowsPrec f g h = liftShowsPrec f g h . pageItems
+
+instance Arbitrary1 Page where
+    liftArbitrary = fmap (`toPage` 1) . liftArbitrary
+
+instance Eq1 Pages where
+    liftEq f a b = liftEq f (pagesCurrent a) (pagesCurrent b)
+
+instance Show1 Pages where
+    liftShowsPrec f g h = liftShowsPrec f g h . pagesCurrent
+
+instance Arbitrary1 Pages where
+    liftArbitrary = fmap (toPages 1 5 100) . liftArbitrary
+
+spec :: Spec
+spec = do
+    describe "Page" $ do
+        let proxyPage :: Proxy Page
+            proxyPage = Proxy
+
+        itPreserves $ functorLaws proxyPage
+        itPreserves $ foldableLaws proxyPage
+        itPreserves $ traversableLaws proxyPage
+
+    describe "Pages" $ do
+        let proxyPages :: Proxy Pages
+            proxyPages = Proxy
+
+        itPreserves $ functorLaws proxyPages
+        itPreserves $ foldableLaws proxyPages
+        itPreserves $ traversableLaws proxyPages
+
+itPreserves :: Laws -> Spec
+itPreserves Laws {..} = mkContext $ traverse_ (uncurry mkIt) lawsProperties
+  where
+    mkContext = context $ lawsTypeclass <> " laws"
+    mkIt name = it $ "preserves " <> name
diff --git a/yesod-paginator.cabal b/yesod-paginator.cabal
--- a/yesod-paginator.cabal
+++ b/yesod-paginator.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.31.1.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d114fc955427bbe8caa75c10f5898d5fbb49e54e90b280a34b9720af0a92c592
+-- hash: c412aee17c1ede253c8e371db6af5b8e8618b2b0a835c5410cf4b90cd566aaeb
 
 name:           yesod-paginator
-version:        1.1.0.1
+version:        1.1.0.2
 synopsis:       A pagination approach for yesod
 description:    Paginate a list showing a per-item widget and links to other pages
 category:       Web, Yesod
@@ -15,7 +17,6 @@
 license:        BSD3
 license-file:   LICENSE
 build-type:     Simple
-cabal-version:  >= 1.10
 
 source-repository head
   type: git
@@ -85,14 +86,17 @@
   main-is: Spec.hs
   other-modules:
       SpecHelper
+      Yesod.Paginator.PagesSpec
       Yesod.Paginator.WidgetsSpec
       Paths_yesod_paginator
   hs-source-dirs:
       test
   ghc-options: -Wall
   build-depends:
-      base >4.8.0 && <5
+      QuickCheck
+    , base >4.8.0 && <5
     , hspec
+    , quickcheck-classes
     , yesod-core
     , yesod-paginator
     , yesod-test
