diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog for shakespeare
 
+### 2.0.24
+
+* Fix build errors with GHC 8.10.1-alpha2 [#245](https://github.com/yesodweb/shakespeare/pull/245)
+
 ### 2.0.23
 
 * Add support to use caret interpolation in only var shakespeares [#242](https://github.com/yesodweb/shakespeare/issues/242)
diff --git a/Text/Hamlet.hs b/Text/Hamlet.hs
--- a/Text/Hamlet.hs
+++ b/Text/Hamlet.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
@@ -231,7 +232,11 @@
     go (d, docs) = do
         let d' = derefToExp ((specialOrIdent, VarE 'or):scope) d
         docs' <- docsToExp env hr scope docs
-        return $ TupE [d', docs']
+        return $ TupE
+#if MIN_VERSION_template_haskell(2,16,0)
+          $ map Just
+#endif
+          [d', docs']
 docToExp env hr scope (DocCase deref cases) = do
     let exp_ = derefToExp scope deref
     matches <- mapM toMatch cases
@@ -538,7 +543,11 @@
     vtToExp (d, vt) = do
         d' <- lift d
         c' <- toExp vt
-        return $ TupE [d', c' `AppE` derefToExp [] d]
+        return $ TupE
+#if MIN_VERSION_template_haskell(2,16,0)
+          $ map Just
+#endif
+          [d', c' `AppE` derefToExp [] d]
       where
         toExp = c
           where
diff --git a/Text/Internal/Css.hs b/Text/Internal/Css.hs
--- a/Text/Internal/Css.hs
+++ b/Text/Internal/Css.hs
@@ -1,6 +1,7 @@
 {-# OPTIONS_HADDOCK hide #-}
 -- | This module is only being exposed to work around a GHC bug, its API is not stable
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -281,7 +282,11 @@
 vtToExp (d, vt) = do
     d' <- lift d
     c' <- c vt
-    return $ TupE [d', c' `AppE` derefToExp [] d]
+    return $ TupE
+#if MIN_VERSION_template_haskell(2,16,0)
+      $ map Just
+#endif
+      [d', c' `AppE` derefToExp [] d]
   where
     c :: VarType -> Q Exp
     c VTPlain = [|CDPlain . toCss|]
diff --git a/Text/Shakespeare.hs b/Text/Shakespeare.hs
--- a/Text/Shakespeare.hs
+++ b/Text/Shakespeare.hs
@@ -429,7 +429,11 @@
     vtToExp (d, vt) = do
         d' <- lift d
         c' <- c vt
-        return $ TupE [d', c' `AppE` derefToExp [] d]
+        return $ TupE
+#if MIN_VERSION_template_haskell(2,16,0)
+          $ map Just
+#endif
+          [d', c' `AppE` derefToExp [] d]
       where
         c :: VarType -> Q Exp
         c VTPlain = [|EPlain . $(return $
diff --git a/Text/Shakespeare/Base.hs b/Text/Shakespeare/Base.hs
--- a/Text/Shakespeare/Base.hs
+++ b/Text/Shakespeare/Base.hs
@@ -198,7 +198,11 @@
 derefToExp _ (DerefRational r) = LitE $ RationalL r
 derefToExp _ (DerefString s) = LitE $ StringL s
 derefToExp s (DerefList ds) = ListE $ map (derefToExp s) ds
-derefToExp s (DerefTuple ds) = TupE $ map (derefToExp s) ds
+derefToExp s (DerefTuple ds) = TupE $
+#if MIN_VERSION_template_haskell(2,16,0)
+                               map Just $
+#endif
+                               map (derefToExp s) ds
 
 -- FIXME shouldn't we use something besides a list here?
 flattenDeref :: Deref -> Maybe [String]
diff --git a/shakespeare.cabal b/shakespeare.cabal
--- a/shakespeare.cabal
+++ b/shakespeare.cabal
@@ -1,5 +1,5 @@
 name:            shakespeare
-version:         2.0.23
+version:         2.0.24
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
