diff --git a/src/Text/XML/Twiml/Internal.hs b/src/Text/XML/Twiml/Internal.hs
--- a/src/Text/XML/Twiml/Internal.hs
+++ b/src/Text/XML/Twiml/Internal.hs
@@ -8,7 +8,6 @@
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverlappingInstances #-}
 {-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
@@ -89,16 +88,16 @@
   inj = id
   prj = Just
 
-instance (Functor f, Functor g) => f :<: (f :+: g) where
-  inj = InL
-  prj (InL f) = Just f
-  prj _ = Nothing
-
-instance (Functor f, Functor g, Functor h, f :<: g) => f :<: (h :+: g) where
+instance {-# OVERLAPPABLE #-} (Functor f, Functor g, Functor h, f :<: g) => f :<: (h :+: g) where
   inj = InR . inj
   prj (InR g) = prj g
   prj _ = Nothing
 
+instance {-# OVERLAPPING #-} (Functor f, Functor g) => f :<: (f :+: g) where
+  inj = InL
+  prj (InL f) = Just f
+  prj _ = Nothing
+
 {- Elem -}
 
 -- $elem 'TwimlF uses @∉@ in order to enforce nesting rules.
@@ -319,10 +318,10 @@
 instance ToSomeNode String where
   toSomeNode str = SomeNode . Text $ CData CDataText str Nothing
 
-instance ToSomeNode () where
+instance {-# OVERLAPPING #-} ToSomeNode () where
   toSomeNode = SomeNode
 
-instance ToSomeNode n => Node n where
+instance {-# OVERLAPPABLE #-} ToSomeNode n => Node n where
   node qName n = node qName (toSomeNode n)
 
 class ToXML a where
diff --git a/src/Text/XML/Twiml/Internal/TH.hs b/src/Text/XML/Twiml/Internal/TH.hs
--- a/src/Text/XML/Twiml/Internal/TH.hs
+++ b/src/Text/XML/Twiml/Internal/TH.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE RecordWildCards #-}
 -------------------------------------------------------------------------------
@@ -103,23 +104,27 @@
 attributeToVarStrictType :: (String -> String) -> Attribute -> VarStrictType
 attributeToVarStrictType f Attribute{..} =
   ( mkName $ f attributeName
+#if MIN_VERSION_template_haskell(2,11,0)
+  , Bang NoSourceUnpackedness SourceStrict
+#else
   , IsStrict
+#endif
   , AppT (ConT $ mkName "Maybe") (ConT $ mkName attributeType)
   )
 
 parametersToVarStrictTypes :: (String -> String) -> [Parameters] -> [VarStrictType]
 parametersToVarStrictTypes f = map (attributeToVarStrictType f) . getAllAttributes
 
-rnfI :: Int -> Exp
-rnfI i = rnfNames . take i $ map (mkName . return) ['a'..'z']
+-- rnfI :: Int -> Exp
+-- rnfI i = rnfNames . take i $ map (mkName . return) ['a'..'z']
 
-rnfNames :: [Name] -> Exp
-rnfNames [] = TupE []
-rnfNames [a] = rnfName a
-rnfNames (a:as) = AppE (AppE (VarE $ mkName "seq") (rnfName a)) (rnfNames as)
+-- rnfNames :: [Name] -> Exp
+-- rnfNames [] = TupE []
+-- rnfNames [a] = rnfName a
+-- rnfNames (a:as) = AppE (AppE (VarE $ mkName "seq") (rnfName a)) (rnfNames as)
 
-rnfName :: Name -> Exp
-rnfName name = AppE (VarE $ mkName "rnf") (VarE name)
+-- rnfName :: Name -> Exp
+-- rnfName name = AppE (VarE $ mkName "rnf") (VarE name)
 
 specToGADTName :: TwimlSpec -> Name
 specToGADTName TwimlSpec{..} = mkName $ twimlName ++ "F"
@@ -144,14 +149,14 @@
 specToGADTChildName spec@(TwimlSpec{..}) = go $ zip parameters $ specToGADTNames spec where
   go [] = Nothing
   go ((Required _, name):_) = Just name
-  go ((Attributes _, name):rest) = go rest
+  go ((Attributes _, _):rest) = go rest
 
 specToGADTPat :: TwimlSpec -> Pat
 specToGADTPat spec@(TwimlSpec{..}) = ConP (specToGADTName spec) varPs where
   varPs = map VarP $ specToGADTNames spec
 
 specToAttributesListE :: TwimlSpec -> Exp
-specToAttributesListE spec@(TwimlSpec{..}) = ListE . map go $ getAllAttributes parameters where
+specToAttributesListE (TwimlSpec{..}) = ListE . map go $ getAllAttributes parameters where
   go (Attribute{..}) =
     let name = LitE . StringL $ fromMaybe attributeName overrideName
     in  AppE (AppE (VarE $ mkName "makeAttr") name) (VarE . mkName $ makeAttr attributeName)
@@ -168,19 +173,31 @@
     else ListE []
 
 specToStrictTypes :: TwimlSpec -> [StrictType]
+#if MIN_VERSION_template_haskell(2,11,0)
+specToStrictTypes spec@(TwimlSpec{..}) = go parameters ++ [(Bang NoSourceUnpackedness NoSourceStrictness, VarT $ mkName "a") | recursive] where
+#else
 specToStrictTypes spec@(TwimlSpec{..}) = go parameters ++ [(NotStrict, VarT $ mkName "a") | recursive] where
+#endif
   go [] = []
   go (Required   as :bs) = map stringToStrictType as ++ go bs
+#if MIN_VERSION_template_haskell(2,11,0)
+  go (Attributes _  :bs) = (Bang NoSourceUnpackedness NoSourceStrictness, ConT $ specToAttributesName spec) : go bs
+#else
   go (Attributes _  :bs) = (NotStrict, ConT $ specToAttributesName spec) : go bs
+#endif
+#if MIN_VERSION_template_haskell(2,11,0)
+  stringToStrictType a = (Bang NoSourceUnpackedness NoSourceStrictness, ConT $ mkName a)
+#else
   stringToStrictType a = (NotStrict, ConT $ mkName a)
+#endif
 
-gadtToDefExp :: TwimlSpec -> [Parameters] -> Exp
-gadtToDefExp spec@(TwimlSpec{..}) = go (ConE $ specToGADTName spec) . foldr ((+) . count) (if recursive then 1 else 0) where
-  go conE 0 = conE
-  go conE n = go (AppE conE defE) (n-1)
-  defE = VarE $ mkName "def"
-  count (Required r) = length r
-  count _ = 1
+-- gadtToDefExp :: TwimlSpec -> [Parameters] -> Exp
+-- gadtToDefExp spec@(TwimlSpec{..}) = go (ConE $ specToGADTName spec) . foldr ((+) . count) (if recursive then 1 else 0) where
+--   go conE 0 = conE
+--   go conE n = go (AppE conE defE) (n-1)
+--   defE = VarE $ mkName "def"
+--   count (Required r) = length r
+--   count _ = 1
 
 attributesToDefExp :: Exp -> [Parameters] -> Exp
 attributesToDefExp conE = go conE . length . getAllAttributes where
@@ -246,7 +263,12 @@
 runTwimlSpecParser = runParser parseTwimlSpec () ""
 
 s :: QuasiQuoter
-s = QuasiQuoter {quoteExp = stringE . trim}
+s = QuasiQuoter {
+  quoteExp = stringE . trim
+, quotePat = undefined
+, quoteType = undefined
+, quoteDec = undefined
+}
 
 trim :: String -> String
 trim = trimTail . dropWhile isSpace
@@ -276,7 +298,7 @@
     [ emptyDataDecl
     , gadt
 --    , deriveDataForGADT
-    -- , instanceDefaultForGADT
+--    , instanceDefaultForGADT
 --    , deriveEqForGADT
     , deriveFunctorForGADT
     , instanceFunctor1ForGADT
@@ -294,7 +316,15 @@
     conName = mkName twimlName
 
     -- | @data Foo@
+#if MIN_VERSION_template_haskell(2,12,0)
+    emptyDataDecl = DataD [] conName [] Nothing [] $ DerivClause Nothing []
+#else
+#if MIN_VERSION_template_haskell(2,11,0)
+    emptyDataDecl = DataD [] conName [] Nothing [] []
+#else
     emptyDataDecl = DataD [] conName [] [] []
+#endif
+#endif
 
     -- | Type variables @i :: [*]@ and @a@
     i' = mkName "i"
@@ -326,10 +356,18 @@
         . NormalC conNameF $ specToStrictTypes spec
 
     -- | @data FooF i a where FooF :: a -> FooF '[Foo] a@
+#if MIN_VERSION_template_haskell(2,12,0)
+    gadt = DataD [] conNameF tyVarBndrs Nothing [con] $ DerivClause Nothing []
+#else
+#if MIN_VERSION_template_haskell(2,11,0)
+    gadt = DataD [] conNameF tyVarBndrs Nothing [con] []
+#else
     gadt = DataD [] conNameF tyVarBndrs [con] []
+#endif
+#endif
 
     dataN = mkName "Data"
-    dataC = ConT dataN
+    -- dataC = ConT dataN
 
     defaultN = mkName "Default"
     defaultC = ConT defaultN
@@ -338,7 +376,7 @@
     -- enumC = ConT enumN
 
     eqN = mkName "Eq"
-    eqC = ConT eqN
+    -- eqC = ConT eqN
 
     functorN = mkName "Functor"
     functorC = ConT functorN
@@ -347,16 +385,16 @@
     functor1C = ConT functor1N
 
     genericN = mkName "Generic"
-    genericC = ConT genericN
+    -- genericC = ConT genericN
 
     nfdataN = mkName "NFData"
-    nfdataC = ConT nfdataN
+    -- nfdataC = ConT nfdataN
 
     ordN = mkName "Ord"
-    ordC = ConT ordN
+    -- ordC = ConT ordN
 
     readN = mkName "Read"
-    readC = ConT readN
+    -- readC = ConT readN
 
     showN = mkName "Show"
     showC = ConT showN
@@ -368,34 +406,74 @@
     toXMLC = ConT toXMLN
 
     -- | @instance Default a => Default (FooF i a) where def = FooF def ...@
-    instanceDefaultForGADT = InstanceD [AppT defaultC a] (AppT defaultC (AppT (AppT (ConT conNameF) list) a)) [ValD (VarP $ mkName "def") (NormalB $ gadtToDefExp spec parameters) []]
+#if MIN_VERSION_template_haskell(2,11,0)
+--     instanceDefaultForGADT = InstanceD Nothing [AppT defaultC a] (AppT defaultC (AppT (AppT (ConT conNameF) list) a)) [ValD (VarP $ mkName "def") (NormalB $ gadtToDefExp spec parameters) []]
+#else
+--     instanceDefaultForGADT = InstanceD [AppT defaultC a] (AppT defaultC (AppT (AppT (ConT conNameF) list) a)) [ValD (VarP $ mkName "def") (NormalB $ gadtToDefExp spec parameters) []]
+#endif
 
     -- | @deriving instance Data a => Data (FooF i a)@
-    deriveDataForGADT = StandaloneDerivD [AppT dataC a] $ AppT dataC (AppT (AppT (ConT conNameF) list) a)
+#if MIN_VERSION_template_haskell(2,12,0)
+--     deriveDataForGADT = StandaloneDerivD Nothing [AppT dataC a] $ AppT dataC (AppT (AppT (ConT conNameF) list) a)
+#else
+--     deriveDataForGADT = StandaloneDerivD [AppT dataC a] $ AppT dataC (AppT (AppT (ConT conNameF) list) a)
+#endif
 
     -- | @deriving instance Eq a => Eq (FooF i a)@
-    deriveEqForGADT = StandaloneDerivD [AppT eqC a] $ AppT eqC (AppT (AppT (ConT conNameF) i) a)
+#if MIN_VERSION_template_haskell(2,12,0)
+--     deriveEqForGADT = StandaloneDerivD Nothing [AppT eqC a] $ AppT eqC (AppT (AppT (ConT conNameF) i) a)
+#else
+--     deriveEqForGADT = StandaloneDerivD [AppT eqC a] $ AppT eqC (AppT (AppT (ConT conNameF) i) a)
+#endif
 
     -- | @deriving instance Functor (FooF i)@
+#if MIN_VERSION_template_haskell(2,12,0)
+    deriveFunctorForGADT = StandaloneDerivD Nothing [] $ AppT functorC (AppT (ConT conNameF) i)
+#else
     deriveFunctorForGADT = StandaloneDerivD [] $ AppT functorC (AppT (ConT conNameF) i)
+#endif
 
     -- | @instance Functor1 FooF where fmap1 = fmap@
+#if MIN_VERSION_template_haskell(2,11,0)
+    instanceFunctor1ForGADT = InstanceD Nothing [] (AppT functor1C $ ConT conNameF) [ValD (VarP $ mkName "fmap1") (NormalB . VarE $ mkName "fmap") []]
+#else
     instanceFunctor1ForGADT = InstanceD [] (AppT functor1C $ ConT conNameF) [ValD (VarP $ mkName "fmap1") (NormalB . VarE $ mkName "fmap") []]
+#endif
 
     -- | @instance NFData a => NFData (FooF i a) where rnf (FooF a ...) = rnf a `seq` ...@
-    instanceNFDataForGADT = InstanceD [AppT nfdataC a] (AppT nfdataC (AppT (AppT (ConT conNameF) list) a)) [FunD (mkName "rnf") [Clause [specToGADTPat spec] (NormalB . rnfI $ specToGADTArity spec) []]]
+#if MIN_VERSION_template_haskell(2,11,0)
+--     instanceNFDataForGADT = InstanceD Nothing [AppT nfdataC a] (AppT nfdataC (AppT (AppT (ConT conNameF) list) a)) [FunD (mkName "rnf") [Clause [specToGADTPat spec] (NormalB . rnfI $ specToGADTArity spec) []]]
+#else
+--     instanceNFDataForGADT = InstanceD [AppT nfdataC a] (AppT nfdataC (AppT (AppT (ConT conNameF) list) a)) [FunD (mkName "rnf") [Clause [specToGADTPat spec] (NormalB . rnfI $ specToGADTArity spec) []]]
+#endif
 
     -- | @deriving instance Ord a => Ord (FooF i a)@
-    deriveOrdForGADT = StandaloneDerivD [AppT ordC a] $ AppT ordC (AppT (AppT (ConT conNameF) i) a)
+#if MIN_VERSION_template_haskell(2,12,0)
+--     deriveOrdForGADT = StandaloneDerivD Nothing [AppT ordC a] $ AppT ordC (AppT (AppT (ConT conNameF) i) a)
+#else
+--     deriveOrdForGADT = StandaloneDerivD [AppT ordC a] $ AppT ordC (AppT (AppT (ConT conNameF) i) a)
+#endif
 
     -- | @deriving instance Read a => Read (FooF i a)@
-    deriveReadForGADT = StandaloneDerivD [AppT readC a] $ AppT readC (AppT (AppT (ConT conNameF) list) a)
+#if MIN_VERSION_template_haskell(2,12,0)
+--     deriveReadForGADT = StandaloneDerivD Nothing [AppT readC a] $ AppT readC (AppT (AppT (ConT conNameF) list) a)
+#else
+--     deriveReadForGADT = StandaloneDerivD [AppT readC a] $ AppT readC (AppT (AppT (ConT conNameF) list) a)
+#endif
 
     -- | @deriving instance Show a => Show (FooF i a)@
+#if MIN_VERSION_template_haskell(2,12,0)
+    deriveShowForGADT = StandaloneDerivD Nothing [AppT showC a] $ AppT showC (AppT (AppT (ConT conNameF) i) a)
+#else
     deriveShowForGADT = StandaloneDerivD [AppT showC a] $ AppT showC (AppT (AppT (ConT conNameF) i) a)
+#endif
 
     -- | @instance ToXML a => ToXML (FooF i a) where toXML (FooF a ...) = makeElement "Foo" a ...@
+#if MIN_VERSION_template_haskell(2,11,0)
+    instanceToXMLForGADT = InstanceD Nothing [AppT toXMLC a | recursive] (AppT toXMLC (AppT (AppT (ConT conNameF) i) a))
+#else
     instanceToXMLForGADT = InstanceD [AppT toXMLC a | recursive] (AppT toXMLC (AppT (AppT (ConT conNameF) i) a))
+#endif
       [FunD (mkName "toXML") [Clause [specToGADTPat spec] (NormalB $ specToToXML spec) []]]
 
     attrPrefix = '_' : map toLower twimlName
@@ -406,9 +484,25 @@
     -- | @data FooAttributes = FooAttributes{..} deriving (Data, Eq, Ord, Read, Show)@
     --
     -- All record fields should be camelCased and prefixed with "_foo".
+#if MIN_VERSION_template_haskell(2,12,0)
+    attributes = DataD [] attributesName [] Nothing [RecC attributesName (parametersToVarStrictTypes makeAttr parameters)] . DerivClause Nothing $ ConT <$> [dataN, eqN, genericN, nfdataN, ordN, readN, showN]
+#else
+#if MIN_VERSION_template_haskell(2,11,0)
+    attributes = DataD [] attributesName [] Nothing [RecC attributesName (parametersToVarStrictTypes makeAttr parameters)] $ ConT <$> [dataN, eqN, genericN, nfdataN, ordN, readN, showN]
+#else
     attributes = DataD [] attributesName [] [RecC attributesName (parametersToVarStrictTypes makeAttr parameters)] [dataN, eqN, genericN, nfdataN, ordN, readN, showN]
+#endif
+#endif
 
     -- | @instance Default FooAttributes where def = FooAttributes def ...@
+#if MIN_VERSION_template_haskell(2,11,0)
+    instanceDefaultForAttributes = InstanceD Nothing [] (AppT defaultC $ ConT attributesName) [ValD (VarP $ mkName "def") (NormalB $ attributesToDefExp (ConE attributesName) parameters) []]
+#else
     instanceDefaultForAttributes = InstanceD [] (AppT defaultC $ ConT attributesName) [ValD (VarP $ mkName "def") (NormalB $ attributesToDefExp (ConE attributesName) parameters) []]
+#endif
 
+#if MIN_VERSION_template_haskell(2,11,0)
+    instanceToAttrsForAttributes = InstanceD Nothing [] (AppT toAttrsC $ ConT attributesName) [ValD (VarP $ mkName "toAttrs") (NormalB (AppE (AppE (VarE $ mkName "flip") (VarE $ mkName "makeAttrs")) (specToAttributesListE spec))) []]
+#else
     instanceToAttrsForAttributes = InstanceD [] (AppT toAttrsC $ ConT attributesName) [ValD (VarP $ mkName "toAttrs") (NormalB (AppE (AppE (VarE $ mkName "flip") (VarE $ mkName "makeAttrs")) (specToAttributesListE spec))) []]
+#endif
diff --git a/src/Text/XML/Twiml/Internal/Twiml.hs b/src/Text/XML/Twiml/Internal/Twiml.hs
--- a/src/Text/XML/Twiml/Internal/Twiml.hs
+++ b/src/Text/XML/Twiml/Internal/Twiml.hs
@@ -254,12 +254,14 @@
       SipF        i ) a
   } deriving (Functor, Generic, Show, Typeable)
 
-instance (f i :<: ( ClientF     i :+:
-                    ConferenceF i :+:
-                    NumberF     i :+:
-                    QueueF      i :+:
-                    SipF        i )
-         ) => f i :<: DialNounF i where
+instance
+  ( Functor (f i)
+  , f i :<: ( ClientF     i :+:
+              ConferenceF i :+:
+              NumberF     i :+:
+              QueueF      i :+:
+              SipF        i )
+  ) => f i :<: DialNounF i where
   inj = DialNounF . inj
   prj = prj . getDialNounF
 
@@ -269,7 +271,7 @@
 instance Show1 DialNounF where
   show1 = show
 
-instance ToXML a => ToXML (DialNounF i a) where
+instance ToXML (DialNounF i a) where
   toXML = toXML . getDialNounF
 
 instance ToXML (IxFree DialNounF i Void) where
@@ -589,20 +591,22 @@
       EndF      i ) a -- Shared between Voice and Messaging TwiML
   } deriving (Functor, Generic, Show, Typeable)
 
-instance (f i :<: ( SayF      i :+:
-                    PlayF     i :+:
-                    GatherF   i :+:
-                    SmsF      i :+:
-                    DialF     i :+:
-                    EnqueueF  i :+:
-                    LeaveF    i :+:
-                    HangupF   i :+:
-                    RecordF   i :+:
-                    RedirectF i :+:
-                    RejectF   i :+:
-                    PauseF    i :+:
-                    EndF      i )
-         ) => f i :<: VoiceVerbsF i where
+instance
+  ( Functor (f i)
+  , f i :<: ( SayF      i :+:
+              PlayF     i :+:
+              GatherF   i :+:
+              SmsF      i :+:
+              DialF     i :+:
+              EnqueueF  i :+:
+              LeaveF    i :+:
+              HangupF   i :+:
+              RecordF   i :+:
+              RedirectF i :+:
+              RejectF   i :+:
+              PauseF    i :+:
+              EndF      i )
+  ) => f i :<: VoiceVerbsF i where
   inj = VoiceVerbsF . inj
   prj = prj . getVoiceVerbsF
 
@@ -638,11 +642,13 @@
       EndF      i ) a -- Shared between Voice and Messaging TwiML
   } deriving (Functor, Generic, Show, Typeable)
 
-instance (f i :<: ( MessageF  i :+:
-                    RedirectF i :+:
-                    SmsF      i :+:
-                    EndF      i )
-         ) => f i :<: MessagingVerbsF i where
+instance
+  ( Functor (f i)
+  , f i :<: ( MessageF  i :+:
+              RedirectF i :+:
+              SmsF      i :+:
+              EndF      i )
+  ) => f i :<: MessagingVerbsF i where
   inj = MessagingVerbsF . inj
   prj = prj . getMessagingVerbsF
 
diff --git a/src/Text/XML/Twiml/Lenses.hs b/src/Text/XML/Twiml/Lenses.hs
--- a/src/Text/XML/Twiml/Lenses.hs
+++ b/src/Text/XML/Twiml/Lenses.hs
@@ -16,7 +16,6 @@
 module Text.XML.Twiml.Lenses where
 
 import Control.Lens hiding (to)
-import Text.XML.Twiml.Types hiding (ClientAttributes(..), ConferenceAttributes(..), NumberAttributes(..), QueueAttributes(..), SipAttributes(..), DialNoun(..))
 import Text.XML.Twiml.Internal.Twiml
 
 makeLensesWith abbreviatedFields ''SayAttributes
diff --git a/src/Text/XML/Twiml/Types.hs b/src/Text/XML/Twiml/Types.hs
--- a/src/Text/XML/Twiml/Types.hs
+++ b/src/Text/XML/Twiml/Types.hs
@@ -10,7 +10,6 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE OverlappingInstances #-}
 {-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
@@ -42,7 +41,6 @@
 
 import Control.DeepSeq (NFData(..))
 import Data.Data
-import Data.Default
 import GHC.Generics (Generic)
 import Network.URI (URI(..), parseURIReference)
 
diff --git a/test/ShouldNotTypecheck.hs b/test/ShouldNotTypecheck.hs
--- a/test/ShouldNotTypecheck.hs
+++ b/test/ShouldNotTypecheck.hs
@@ -1,16 +1,12 @@
 {-#OPTIONS_GHC -fdefer-type-errors -fno-defer-typed-holes #-}
+{-#LANGUAGE CPP #-}
 {-#LANGUAGE DataKinds #-}
 {-#LANGUAGE RebindableSyntax #-}
 {-#LANGUAGE RecordWildCards #-}
 
 module ShouldNotTypecheck where
 
-import Text.XML.Twiml
-import qualified Text.XML.Twiml.Syntax as Twiml
-
 import Control.DeepSeq (NFData)
-import Data.Default
-import Data.Void
 import Distribution.TestSuite
 import qualified Test.HUnit as H
 import Test.ShouldNotTypecheck
@@ -52,11 +48,19 @@
     onStart :: H.State -> Progress -> IO Progress
     onStart _ = return
 
+#if MIN_VERSION_HUnit(1,3,0)
+    onError :: a -> String -> H.State -> Progress -> IO Progress
+    onError _ msg _ _ = return $ Finished (Error msg)
+
+    onFailure :: a -> String -> H.State -> Progress -> IO Progress
+    onFailure _ msg _ _ = return $ Finished (Fail msg)
+#else
     onError :: String -> H.State -> Progress -> IO Progress
     onError msg _ _ = return $ Finished (Error msg)
 
     onFailure :: String -> H.State -> Progress -> IO Progress
     onFailure msg _ _ = return $ Finished (Fail msg)
+#endif
 
 {-
 someGather :: Twiml' '[Gather] Void
diff --git a/test/examples/dialExample3.txt b/test/examples/dialExample3.txt
--- a/test/examples/dialExample3.txt
+++ b/test/examples/dialExample3.txt
@@ -1,7 +1,7 @@
 > example :: VoiceTwiml
 > example =
 >   response $ do
->     dial' (Left $ Number def "+15558675309") $ def
+>     dial' (Left . dialNoun $ number "+15558675309" def) $ def
 >              & callerId .~ Just "+15551112222"
 >     end
 >   where Twiml.Syntax{..} = def
diff --git a/twiml.cabal b/twiml.cabal
--- a/twiml.cabal
+++ b/twiml.cabal
@@ -1,8 +1,5 @@
--- Initial twiml.cabal generated by cabal init.  For further documentation,
---  see http://haskell.org/cabal/users-guide/
-
 name:                twiml
-version:             0.2.0.0
+version:             0.2.0.1
 synopsis:            TwiML library for Haskell
 description:         TwiML library for Haskell
 homepage:            https://github.com/markandrus/twiml-haskell
@@ -14,6 +11,7 @@
 category:            Text, Web, XML
 build-type:          Simple
 cabal-version:       >=1.8
+tested-with:         GHC == 7.10.1, GHC == 7.10.2, GHC == 8.0.1, GHC == 8.0.2
 data-files:          test/examples/*.txt
 
 source-repository head
@@ -46,7 +44,7 @@
   hs-source-dirs:      src
   -- other-modules:       
   build-depends:       base ==4.*,
-                       data-default ==0.5.*,
+                       data-default >=0.5 && < 0.8,
                        deepseq ==1.4.*,
                        lens ==4.*,
                        network-uri >=2.6,
@@ -55,31 +53,31 @@
                        template-haskell ==2.*,
                        void ==0.*,
                        xml >=1.3
-  ghc-options:         -Wall -fno-warn-unused-do-bind
+  ghc-options:         -Wall -fno-warn-name-shadowing -fno-warn-orphans -fno-warn-unused-do-bind
 
 test-suite Golden
   hs-source-dirs:      test
   type:                detailed-0.9
   test-module:         Golden
-  build-depends:       base ==4.*,
+  build-depends:       base,
                        Cabal >=1.16.0,
-                       data-default ==0.5.*,
+                       data-default,
                        Diff ==0.3.2,
-                       lens ==4.*,
+                       lens,
                        twiml
-  ghc-options:         -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing
+  ghc-options:         -Wall -fno-warn-name-shadowing -fno-warn-orphans -fno-warn-unused-do-bind
 
 test-suite ShouldNotTypecheck
   hs-source-dirs:      test
   type:                detailed-0.9
   test-module:         ShouldNotTypecheck
-  build-depends:       base ==4.*,
+  build-depends:       base,
                        Cabal >=1.16.0,
-                       data-default ==0.5.*,
-                       deepseq ==1.4.*,
-                       HUnit ==1.2.*,
-                       lens ==4.*,
+                       data-default,
+                       deepseq,
+                       HUnit >=1.2 && <1.6,
+                       lens,
                        should-not-typecheck ==2.0.*,
                        twiml,
-                       void ==0.*
-  ghc-options:         -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing
+                       void
+  ghc-options:         -Wall -fno-warn-name-shadowing -fno-warn-orphans -fno-warn-unused-do-bind
