diff --git a/dist/build/GoldenStub/GoldenStub-tmp/GoldenStub.hs b/dist/build/GoldenStub/GoldenStub-tmp/GoldenStub.hs
deleted file mode 100644
--- a/dist/build/GoldenStub/GoldenStub-tmp/GoldenStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import Golden ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/first-and-last.cabal b/first-and-last.cabal
--- a/first-and-last.cabal
+++ b/first-and-last.cabal
@@ -1,5 +1,5 @@
 name:                first-and-last
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            First and Last generalized to return up to n values
 description:
   This library provides data types @<Data-Monoid-First.html#t:First-39- First' n>@ and @<Data-Monoid-Last.html#t:Last-39- Last' n>@ generalizing @First@ and @Last@ from @<https://hackage.haskell.org/package/base/docs/Data-Monoid.html Data.Monoid>@ to return up to @n@ values.
@@ -33,11 +33,11 @@
   default-language:    Haskell2010
   ghc-options:         -Wall
 
-test-suite Golden
-  type:                detailed-0.9
-  test-module:         Golden
+test-suite doctests
+  main-is:             doctests.hs
+  type:                exitcode-stdio-1.0
   build-depends:       base >=4.8 && <4.9,
-                       Cabal >=1.22.4,
+                       doctest ==0.10.1,
                        first-and-last
   hs-source-dirs:      test
   default-language:    Haskell2010
diff --git a/src/Data/Monoid/First.hs b/src/Data/Monoid/First.hs
--- a/src/Data/Monoid/First.hs
+++ b/src/Data/Monoid/First.hs
@@ -45,6 +45,9 @@
 import GHC.TypeLits (KnownNat, Nat, natVal)
 import Prelude (($), (.), Char, Eq, Foldable(foldr), Functor, Maybe(Just, Nothing), Monoid(mappend, mempty), Ord, Read, Show, Traversable, fromIntegral, head, take)
 
+-- $setup
+-- >>> import Prelude
+
 --------------------------------------------------------------------------------
 -- * First
 --------------------------------------------------------------------------------
diff --git a/src/Data/Monoid/Last.hs b/src/Data/Monoid/Last.hs
--- a/src/Data/Monoid/Last.hs
+++ b/src/Data/Monoid/Last.hs
@@ -45,6 +45,9 @@
 import GHC.TypeLits (KnownNat, Nat, natVal)
 import Prelude (($), (.), Char, Eq, Foldable(foldr), Functor, Int, Maybe(Just, Nothing), Monoid(mappend, mempty), Ord, Read, Show, Traversable, fromIntegral, drop, error, head)
 
+-- $setup
+-- >>> import Prelude
+
 --------------------------------------------------------------------------------
 -- * Last
 --------------------------------------------------------------------------------
diff --git a/test/Golden.hs b/test/Golden.hs
deleted file mode 100644
--- a/test/Golden.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedStrings #-}
--------------------------------------------------------------------------------
--- |
--- Module      :  Data.Monoid.First
--- Copyright   :  (C) 2015 Mark Andrus Roberts
--- License     :  BSD-style (see the file LICENSE)
--- Maintainer  :  Mark Andrus Roberts <markandrusroberts@gmail.com>
--- Stability   :  provisional
--------------------------------------------------------------------------------
-module Golden where
-
-import Data.Monoid.First
-import Data.Monoid.Last
-import Distribution.TestSuite (Progress(Finished), Result(Error, Pass), Test(Test), TestInstance(TestInstance, name, options, run, setOption, tags))
-import Prelude (($), (++), (.), Bool, Eq((==)), Char, Int, IO, Show(show), String, foldMap, pure)
-
-assert :: String -> Bool -> String -> Test
-assert name' assertion error' =
-  let test = TestInstance
-        { name      = name'
-        , options   = []
-        , run       = pure . Finished $
-                        if assertion
-                          then Pass
-                          else Error error'
-        , setOption = \_ _ -> pure test
-        , tags      = []
-        }
-  in  Test test
-
-assertEqual :: (Eq a, Show a) => (a, a) -> Test
-assertEqual (a, b)
-  = assert (show a ++ " == " ++ show b) (a == b) (show a ++ " /= " ++ show b)
-
-firstTest :: Test
-firstTest = assertEqual
-  (getFirst (foldMap pure [1, 2, 3, 4]), pure 1)
-
-first'0PureTest :: Test
-first'0PureTest = assertEqual
-  (getFirst' (pure 1 :: First' 0 Int), [])
-
-first'OverloadedStringTest :: Test
-first'OverloadedStringTest = assertEqual
-  ("abcd" :: First' 2 Char, "ab" :: First' 2 Char)
-
-firstOverloadedStringTest :: Test
-firstOverloadedStringTest = assertEqual
-  ("abcd" :: First Char, "a" :: First Char)
-
-lastTest :: Test
-lastTest = assertEqual
-  (getLast (foldMap pure [1, 2, 3, 4]), pure 4)
-
-last'0PureTest :: Test
-last'0PureTest = assertEqual
-  (getLast' (pure 1 :: Last' 0 Int), [])
-
-last'OverloadedStringTest :: Test
-last'OverloadedStringTest = assertEqual
-  ("abcd" :: Last' 2 Char, "cd" :: Last' 2 Char)
-
-lastOverloadedStringTest :: Test
-lastOverloadedStringTest = assertEqual
-  ("abcd" :: Last Char, "d" :: Last Char)
-
-tests :: IO [Test]
-tests = pure
-  [ firstTest
-  , first'0PureTest
-  , first'OverloadedStringTest
-  , firstOverloadedStringTest
-  , lastTest
-  , last'0PureTest
-  , last'OverloadedStringTest
-  , lastOverloadedStringTest
-  ]
diff --git a/test/doctests.hs b/test/doctests.hs
new file mode 100644
--- /dev/null
+++ b/test/doctests.hs
@@ -0,0 +1,8 @@
+import Test.DocTest (doctest)
+
+main :: IO ()
+main = doctest
+  [ "-XDataKinds"
+  , "src/Data/Monoid/First.hs"
+  , "src/Data/Monoid/Last.hs"
+  ]
