diff --git a/ci/MakeConstraints.hs b/ci/MakeConstraints.hs
index 42d744ee471c3c4e898fd6363608d7562172c380..619bdefb1d9d42cb27216bae278c30f958899b51 100644
--- a/ci/MakeConstraints.hs
+++ b/ci/MakeConstraints.hs
@@ -26,6 +26,7 @@ bootPkgs = S.fromList
   , "bytestring"
   , "text"
   , "binary"
+  , "ghc-bignum"
   ]
 
 allowNewer :: S.Set Cabal.PackageName -> Doc
diff --git a/ci/config.sh b/ci/config.sh
index 449ca5a41a0aad8de16e65c013e3038633d51d49..eba4408d64de83060353e245416623f2de7995d0 100644
--- a/ci/config.sh
+++ b/ci/config.sh
@@ -80,7 +80,6 @@ case $version in
 
   9.3.*)
     #       package             ticket
-    broken  "JuicyPixels"       19851
     ;;
 
   *)
diff --git a/patches/hashable-1.3.1.0.patch b/patches/hashable-1.3.1.0.patch
deleted file mode 100644
index 9cca881f09f879188222dd6d29deb671d703cf2f..0000000000000000000000000000000000000000
--- a/patches/hashable-1.3.1.0.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git a/src/Data/Hashable/Class.hs b/src/Data/Hashable/Class.hs
-index 2e8c37d..fbf5c14 100644
---- a/src/Data/Hashable/Class.hs
-+++ b/src/Data/Hashable/Class.hs
-@@ -901,11 +901,13 @@ instance Hashable a => Hashable (WrappedMonoid a) where
- -- | @since 1.3.1.0
- instance Hashable1 WrappedMonoid where liftHashWithSalt h salt (WrapMonoid a) = h salt a
- 
-+# if !(MIN_VERSION_base(4,16,0))
- instance Hashable a => Hashable (Option a) where
-     hashWithSalt p (Option a) = hashWithSalt p a
- 
- -- | @since 1.3.1.0
- instance Hashable1 Option where liftHashWithSalt h salt (Option a) = liftHashWithSalt h salt a
-+# endif
- #endif
- 
- -- instances for @Data.Functor.{Product,Sum,Compose}@, present
diff --git a/patches/hspec-discover-2.7.10.patch b/patches/hspec-discover-2.7.10.patch
deleted file mode 100644
index 48a9ac03c82c094eef14cdf1c5a5124d107c8fdf..0000000000000000000000000000000000000000
--- a/patches/hspec-discover-2.7.10.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git a/src/Test/Hspec/Discover/Run.hs b/src/Test/Hspec/Discover/Run.hs
-index 6d353f9..9fdd8c9 100644
---- a/src/Test/Hspec/Discover/Run.hs
-+++ b/src/Test/Hspec/Discover/Run.hs
-@@ -19,7 +19,7 @@ module Test.Hspec.Discover.Run (
- ) where
- import           Control.Monad
- import           Control.Applicative
--import           Data.List
-+import           Data.List (intercalate, intersperse, stripPrefix)
- import           Data.Char
- import           Data.Maybe
- import           Data.String
-diff --git a/src/Test/Hspec/Discover/Sort.hs b/src/Test/Hspec/Discover/Sort.hs
-index eb3123a..c4b09ad 100644
---- a/src/Test/Hspec/Discover/Sort.hs
-+++ b/src/Test/Hspec/Discover/Sort.hs
-@@ -6,7 +6,7 @@ module Test.Hspec.Discover.Sort (
- 
- import           Control.Arrow
- import           Data.Char
--import           Data.List
-+import           Data.List (sortBy)
- import           Data.Ord
- 
- sortNaturally :: [String] -> [String]
diff --git a/patches/proto3-wire-1.2.1.patch b/patches/proto3-wire-1.2.2.patch
similarity index 100%
rename from patches/proto3-wire-1.2.1.patch
rename to patches/proto3-wire-1.2.2.patch
diff --git a/patches/vinyl-0.13.2.patch b/patches/vinyl-0.13.2.patch
deleted file mode 100644
index 6ed3c6cb7563d422b794a07753906aeaa656164b..0000000000000000000000000000000000000000
--- a/patches/vinyl-0.13.2.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/Data/Vinyl/Syntax.hs b/Data/Vinyl/Syntax.hs
-index 2319857..df4edb4 100644
---- a/Data/Vinyl/Syntax.hs
-+++ b/Data/Vinyl/Syntax.hs
-@@ -2,6 +2,7 @@
-              MultiParamTypeClasses, ScopedTypeVariables,
-              TypeApplications, TypeFamilies, TypeOperators,
-              UndecidableInstances #-}
-+{-# LANGUAGE FlexibleContexts #-}
- {-# OPTIONS_GHC -Wno-orphans #-}
- -- | Concise vinyl record field lens syntax. This module exports an
- -- orphan instance to make working with labels a bit more powerful. It
diff --git a/patches/vinyl-0.13.1.patch b/patches/vinyl-0.13.3.patch
similarity index 100%
rename from patches/vinyl-0.13.1.patch
rename to patches/vinyl-0.13.3.patch
diff --git a/patches/yesod-core-1.6.19.0.patch b/patches/yesod-core-1.6.19.0.patch
deleted file mode 100644
index 254cdd21d710f9364399d84b21d872df17ad4ced..0000000000000000000000000000000000000000
--- a/patches/yesod-core-1.6.19.0.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-diff --git a/src/Yesod/Core/Internal/TH.hs b/src/Yesod/Core/Internal/TH.hs
-index f3505b9..7fe9159 100644
---- a/src/Yesod/Core/Internal/TH.hs
-+++ b/src/Yesod/Core/Internal/TH.hs
-@@ -30,7 +30,7 @@ import Yesod.Core.Internal.Run
- -- is used for creating sites, /not/ subsites. See 'mkYesodSubData' and 'mkYesodSubDispatch' for the latter.
- -- Use 'parseRoutes' to create the 'Resource's.
- --
---- Contexts and type variables in the name of the datatype are parsed. 
-+-- Contexts and type variables in the name of the datatype are parsed.
- -- For example, a datatype @App a@ with typeclass constraint @MyClass a@ can be written as @\"(MyClass a) => App a\"@.
- mkYesod :: String -- ^ name of the argument datatype
-         -> [ResourceTree String]
-@@ -38,8 +38,8 @@ mkYesod :: String -- ^ name of the argument datatype
- mkYesod name = fmap (uncurry (++)) . mkYesodWithParser name False return
- 
- {-# DEPRECATED mkYesodWith "Contexts and type variables are now parsed from the name in `mkYesod`. <https://github.com/yesodweb/yesod/pull/1366>" #-}
---- | Similar to 'mkYesod', except contexts and type variables are not parsed. 
---- Instead, they are explicitly provided. 
-+-- | Similar to 'mkYesod', except contexts and type variables are not parsed.
-+-- Instead, they are explicitly provided.
- -- You can write @(MyClass a) => App a@ with @mkYesodWith [[\"MyClass\",\"a\"]] \"App\" [\"a\"] ...@.
- mkYesodWith :: [[String]] -- ^ list of contexts
-             -> String -- ^ name of the argument datatype
-@@ -97,7 +97,7 @@ mkYesodWithParser name isSub f resS = do
-             _ <- char ')'
-             return r
- 
--        parseContexts = 
-+        parseContexts =
-             sepBy1 (many1 parseWord) (spaces >> char ',' >> return ())
- 
- -- | See 'mkYesodData'.
-@@ -107,9 +107,9 @@ mkYesodDispatch name = fmap snd . mkYesodWithParser name False return
- -- | Get the Handler and Widget type synonyms for the given site.
- masterTypeSyns :: [Name] -> Type -> [Dec] -- FIXME remove from here, put into the scaffolding itself?
- masterTypeSyns vs site =
--    [ TySynD (mkName "Handler") (fmap PlainTV vs)
-+    [ TySynD (mkName "Handler") (fmap plainTV vs)
-       $ ConT ''HandlerFor `AppT` site
--    , TySynD (mkName "Widget")  (fmap PlainTV vs)
-+    , TySynD (mkName "Widget")  (fmap plainTV vs)
-       $ ConT ''WidgetFor `AppT` site `AppT` ConT ''()
-     ]
- 
-@@ -121,7 +121,7 @@ mkYesodGeneral :: [[String]]                -- ^ Appliction context. Used in Ren
-                -> [ResourceTree String]
-                -> Q([Dec],[Dec])
- mkYesodGeneral appCxt' namestr mtys isSub f resS = do
--    let appCxt = fmap (\(c:rest) -> 
-+    let appCxt = fmap (\(c:rest) ->
-             foldl' (\acc v -> acc `AppT` nameToType v) (ConT $ mkName c) rest
-           ) appCxt'
-     mname <- lookupTypeName namestr
-diff --git a/src/Yesod/Routes/TH/Dispatch.hs b/src/Yesod/Routes/TH/Dispatch.hs
-index c061a1c..1d12c9d 100644
---- a/src/Yesod/Routes/TH/Dispatch.hs
-+++ b/src/Yesod/Routes/TH/Dispatch.hs
-@@ -1,3 +1,4 @@
-+{-# LANGUAGE CPP #-}
- {-# LANGUAGE RecordWildCards, TemplateHaskell, ViewPatterns #-}
- module Yesod.Routes.TH.Dispatch
-     ( MkDispatchSettings (..)
-@@ -73,7 +74,7 @@ mkDispatchClause MkDispatchSettings {..} resources = do
-     handlePiece (Static str) = return (LitP $ StringL str, Nothing)
-     handlePiece (Dynamic _) = do
-         x <- newName "dyn"
--        let pat = ViewP (VarE 'fromPathPiece) (ConP 'Just [VarP x])
-+        let pat = ViewP (VarE 'fromPathPiece) (conPCompat 'Just [VarP x])
-         return (pat, Just $ VarE x)
- 
-     handlePieces :: [Piece a] -> Q ([Pat], [Exp])
-@@ -86,7 +87,7 @@ mkDispatchClause MkDispatchSettings {..} resources = do
-     mkPathPat final =
-         foldr addPat final
-       where
--        addPat x y = ConP '(:) [x, y]
-+        addPat x y = conPCompat '(:) [x, y]
- 
-     go :: SDC -> ResourceTree a -> Q Clause
-     go sdc (ResourceParent name _check pieces children) = do
-@@ -124,11 +125,11 @@ mkDispatchClause MkDispatchSettings {..} resources = do
-                 Methods multi methods -> do
-                     (finalPat, mfinalE) <-
-                         case multi of
--                            Nothing -> return (ConP '[] [], Nothing)
-+                            Nothing -> return (conPCompat '[] [], Nothing)
-                             Just _ -> do
-                                 multiName <- newName "multi"
-                                 let pat = ViewP (VarE 'fromPathMultiPiece)
--                                                (ConP 'Just [VarP multiName])
-+                                                (conPCompat 'Just [VarP multiName])
-                                 return (pat, Just $ VarE multiName)
- 
-                     let dynsMulti =
-@@ -200,3 +201,10 @@ mkDispatchClause MkDispatchSettings {..} resources = do
- defaultGetHandler :: Maybe String -> String -> Q Exp
- defaultGetHandler Nothing s = return $ VarE $ mkName $ "handle" ++ s
- defaultGetHandler (Just method) s = return $ VarE $ mkName $ map toLower method ++ s
-+
-+conPCompat :: Name -> [Pat] -> Pat
-+conPCompat n pats = ConP n
-+#if MIN_VERSION_template_haskell(2,18,0)
-+                         []
-+#endif
-+                         pats
-diff --git a/src/Yesod/Routes/TH/RenderRoute.hs b/src/Yesod/Routes/TH/RenderRoute.hs
-index 09654c8..6d9e4de 100644
---- a/src/Yesod/Routes/TH/RenderRoute.hs
-+++ b/src/Yesod/Routes/TH/RenderRoute.hs
-@@ -67,7 +67,7 @@ mkRenderRouteClauses =
-         let cnt = length $ filter isDynamic pieces
-         dyns <- replicateM cnt $ newName "dyn"
-         child <- newName "child"
--        let pat = ConP (mkName name) $ map VarP $ dyns ++ [child]
-+        let pat = conPCompat (mkName name) $ map VarP $ dyns ++ [child]
- 
-         pack' <- [|pack|]
-         tsp <- [|toPathPiece|]
-@@ -100,7 +100,7 @@ mkRenderRouteClauses =
-             case resourceDispatch res of
-                 Subsite{} -> return <$> newName "sub"
-                 _ -> return []
--        let pat = ConP (mkName $ resourceName res) $ map VarP $ dyns ++ sub
-+        let pat = conPCompat (mkName $ resourceName res) $ map VarP $ dyns ++ sub
- 
-         pack' <- [|pack|]
-         tsp <- [|toPathPiece|]
-@@ -182,3 +182,10 @@ notStrict = Bang NoSourceUnpackedness NoSourceStrictness
- 
- instanceD :: Cxt -> Type -> [Dec] -> Dec
- instanceD = InstanceD Nothing
-+
-+conPCompat :: Name -> [Pat] -> Pat
-+conPCompat n pats = ConP n
-+#if MIN_VERSION_template_haskell(2,18,0)
-+                         []
-+#endif
-+                         pats
-diff --git a/src/Yesod/Routes/TH/RouteAttrs.hs b/src/Yesod/Routes/TH/RouteAttrs.hs
-index 0f1aeec..72b24b4 100644
---- a/src/Yesod/Routes/TH/RouteAttrs.hs
-+++ b/src/Yesod/Routes/TH/RouteAttrs.hs
-@@ -1,3 +1,4 @@
-+{-# LANGUAGE CPP #-}
- {-# LANGUAGE TemplateHaskell #-}
- {-# LANGUAGE RecordWildCards #-}
- module Yesod.Routes.TH.RouteAttrs
-@@ -26,7 +27,11 @@ goTree front (ResourceParent name _check pieces trees) =
-     toIgnore = length $ filter isDynamic pieces
-     isDynamic Dynamic{} = True
-     isDynamic Static{} = False
--    front' = front . ConP (mkName name) . ignored
-+    front' = front . ConP (mkName name)
-+#if MIN_VERSION_template_haskell(2,18,0)
-+                          []
-+#endif
-+                   . ignored
- 
- goRes :: (Pat -> Pat) -> Resource a -> Q Clause
- goRes front Resource {..} =
diff --git a/scripts/patch-tool b/scripts/patch-tool
index 39d90ce5b95827c9b43a59e73cab2c5242b83338..2f5d5af5ed8956ffd42f852761ea6f5930e9b0a5 100755
--- a/scripts/patch-tool
+++ b/scripts/patch-tool
@@ -118,7 +118,7 @@ build_all() {
         echo "Building $package..."
         echo "=============================================================================="
         cabal v2-build \
-          --allow-newer=base,ghc,template-haskell,ghc-prim,containers,integer-gmp \
+          --allow-newer=base,ghc,template-haskell,ghc-prim,containers,integer-gmp,ghc-bignum \
           $package
     done
 }