diff --git a/src/Data/String/Builder.hs b/src/Data/String/Builder.hs
--- a/src/Data/String/Builder.hs
+++ b/src/Data/String/Builder.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving, GADTs #-}
 -- |
 -- `build` can be used to construct multi-line string literals in a monadic
 -- way.
@@ -14,15 +14,11 @@
 -- >   "baz"
 --
 -- `return` and `>>=` are not useful in this context!
-module Data.String.Builder (build, Builder) where
+module Data.String.Builder (build, Builder, BuilderM) where
 
-import Prelude hiding (undefined)
 import Data.String
 import Control.Monad.Trans.Writer
 
-undefined :: a
-undefined = error "Data.String.Builder.undefined"
-
 newtype BuilderM a = BuilderM { runBuilderM :: Writer String a }
   deriving Monad
 
@@ -31,8 +27,8 @@
 literal :: String -> Builder
 literal = BuilderM . tell
 
-instance IsString (BuilderM a) where
-  fromString s = literal s >> literal "\n" >> return undefined
+instance (a ~ ()) => IsString (BuilderM a) where
+  fromString s = literal s >> literal "\n" >> return ()
 
 build :: Builder -> String
 build = snd . runWriter . runBuilderM
diff --git a/stringbuilder.cabal b/stringbuilder.cabal
--- a/stringbuilder.cabal
+++ b/stringbuilder.cabal
@@ -1,5 +1,5 @@
 name:             stringbuilder
-version:          0.1.0
+version:          0.2.0
 synopsis:         A monadic builder for multi-line string literals
 description:      <https://github.com/sol/stringbuilder#readme>
 category:         Testing
@@ -38,4 +38,5 @@
   build-depends:
       base
     , transformers
-    , hspec-shouldbe
+    , hspec         >= 1.3
+    , QuickCheck
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,16 +1,16 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-unused-do-bind #-}
 module Main (main, spec) where
 
-import           Test.Hspec.ShouldBe
+import           Test.Hspec
+import           Test.QuickCheck
 
 import           Data.String
 import           Data.String.Builder
 
 main :: IO ()
-main = hspecX spec
+main = hspec spec
 
-spec :: Specs
+spec :: Spec
 spec = do
   describe "build" $ do
     it "can be used to construct multi-line string literals in a monadic way" $ do
@@ -20,5 +20,6 @@
         "baz"
       `shouldBe` "foo\nbar\nbaz\n"
 
-    prop "works for arbitrary input" $ do
-      \l -> (build . sequence_ . map fromString) l == unlines l
+    it "works for arbitrary input" $ do
+      property $
+        \l -> (build . sequence_ . map fromString) l == unlines l
