diff --git a/patches/filepattern-0.1.2.patch b/patches/filepattern-0.1.2.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7e95d920e5ee478de312a4338054c2d1f8880f49
--- /dev/null
+++ b/patches/filepattern-0.1.2.patch
@@ -0,0 +1,26 @@
+diff --git a/src/System/FilePattern/Core.hs b/src/System/FilePattern/Core.hs
+index 3512cb7..c1bd180 100644
+--- a/src/System/FilePattern/Core.hs
++++ b/src/System/FilePattern/Core.hs
+@@ -17,7 +17,7 @@ import Data.Either.Extra
+ import Data.Traversable
+ import qualified Data.Foldable as F
+ import System.FilePattern.Monads
+-import Data.List.Extra
++import Data.List.Extra (intercalate, split, unsnoc)
+ import Prelude
+ 
+ 
+diff --git a/src/System/FilePattern/Directory.hs b/src/System/FilePattern/Directory.hs
+index a723ab5..3ee6f51 100644
+--- a/src/System/FilePattern/Directory.hs
++++ b/src/System/FilePattern/Directory.hs
+@@ -21,7 +21,7 @@ module System.FilePattern.Directory(
+ 
+ import Control.Monad.Extra
+ import Data.Functor
+-import Data.List
++import Data.List (sort)
+ import System.Directory
+ import System.FilePath
+ import System.FilePattern.Core
diff --git a/patches/hspec-meta-2.7.8.patch b/patches/hspec-meta-2.7.8.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0d663adae2c84c0e143e203172d4963703fc123a
--- /dev/null
+++ b/patches/hspec-meta-2.7.8.patch
@@ -0,0 +1,65 @@
+diff --git a/hspec-core/src/Test/Hspec/Core/Util.hs b/hspec-core/src/Test/Hspec/Core/Util.hs
+index f0a3585..79b71b1 100644
+--- a/hspec-core/src/Test/Hspec/Core/Util.hs
++++ b/hspec-core/src/Test/Hspec/Core/Util.hs
+@@ -16,7 +16,7 @@ module Test.Hspec.Core.Util (
+ , formatException
+ ) where
+ 
+-import           Data.List
++import           Data.List (intercalate, isInfixOf)
+ import           Data.Char (isSpace)
+ import           GHC.IO.Exception
+ import           Control.Exception
+diff --git a/hspec-discover/src/Test/Hspec/Discover/Run.hs b/hspec-discover/src/Test/Hspec/Discover/Run.hs
+index f95879b..2f87b9e 100644
+--- a/hspec-discover/src/Test/Hspec/Discover/Run.hs
++++ b/hspec-discover/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/hspec-discover/src/Test/Hspec/Discover/Sort.hs b/hspec-discover/src/Test/Hspec/Discover/Sort.hs
+index eb3123a..c4b09ad 100644
+--- a/hspec-discover/src/Test/Hspec/Discover/Sort.hs
++++ b/hspec-discover/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/vendor/HUnit-1.6.2.0/src/Test/HUnit/Lang.hs b/vendor/HUnit-1.6.2.0/src/Test/HUnit/Lang.hs
+index 1be740d..9889803 100644
+--- a/vendor/HUnit-1.6.2.0/src/Test/HUnit/Lang.hs
++++ b/vendor/HUnit-1.6.2.0/src/Test/HUnit/Lang.hs
+@@ -28,7 +28,7 @@ module Test.HUnit.Lang (
+ import           Control.DeepSeq
+ import           Control.Exception as E
+ import           Control.Monad
+-import           Data.List
++import           Data.List (intercalate)
+ import           Data.Typeable
+ import           Data.CallStack
+ 
+diff --git a/vendor/hspec-expectations-0.8.2/src/Test/Hspec/Expectations/Matcher.hs b/vendor/hspec-expectations-0.8.2/src/Test/Hspec/Expectations/Matcher.hs
+index e39e030..7fe37e4 100644
+--- a/vendor/hspec-expectations-0.8.2/src/Test/Hspec/Expectations/Matcher.hs
++++ b/vendor/hspec-expectations-0.8.2/src/Test/Hspec/Expectations/Matcher.hs
+@@ -1,7 +1,7 @@
+ module Test.Hspec.Expectations.Matcher (matchList) where
+ 
+ import           Prelude hiding (showList)
+-import           Data.List
++import           Data.List ((\\), intersperse)
+ 
+ matchList :: (Show a, Eq a) => [a] -> [a] -> Maybe String
+ xs `matchList` ys
diff --git a/patches/hxt-9.3.1.22.patch b/patches/hxt-9.3.1.22.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6afb57357574dbe47b56218ebce11373ea4e2448
--- /dev/null
+++ b/patches/hxt-9.3.1.22.patch
@@ -0,0 +1,39 @@
+diff --git a/src/Text/XML/HXT/DOM/MimeTypes.hs b/src/Text/XML/HXT/DOM/MimeTypes.hs
+index 6607561..738720d 100644
+--- a/src/Text/XML/HXT/DOM/MimeTypes.hs
++++ b/src/Text/XML/HXT/DOM/MimeTypes.hs
+@@ -24,7 +24,7 @@ import qualified Data.ByteString        as B
+ import qualified Data.ByteString.Char8  as C
+ 
+ import           Data.Char
+-import           Data.List
++import           Data.List (isPrefixOf, isSuffixOf)
+ import qualified Data.Map               as M
+ import           Data.Maybe
+ 
+diff --git a/src/Text/XML/HXT/DOM/Util.hs b/src/Text/XML/HXT/DOM/Util.hs
+index 1f166ef..fa1f0c9 100644
+--- a/src/Text/XML/HXT/DOM/Util.hs
++++ b/src/Text/XML/HXT/DOM/Util.hs
+@@ -53,7 +53,7 @@ module Text.XML.HXT.DOM.Util
+ where
+ 
+ import           Data.Char
+-import           Data.List
++import           Data.List (isPrefixOf, tails)
+ import           Data.Maybe
+ 
+ -- ------------------------------------------------------------
+diff --git a/src/Text/XML/HXT/DTDValidation/DocTransformation.hs b/src/Text/XML/HXT/DTDValidation/DocTransformation.hs
+index 9fb1b74..ff75660 100644
+--- a/src/Text/XML/HXT/DTDValidation/DocTransformation.hs
++++ b/src/Text/XML/HXT/DTDValidation/DocTransformation.hs
+@@ -40,7 +40,7 @@ import Text.XML.HXT.DTDValidation.TypeDefs
+ import Text.XML.HXT.DTDValidation.AttributeValueValidation
+ 
+ import Data.Maybe
+-import Data.List
++import Data.List (sortBy)
+ import Data.Ord
+ import qualified Data.Map as M
+ 
diff --git a/patches/safecopy-0.10.4.2.patch b/patches/safecopy-0.10.4.2.patch
new file mode 100644
index 0000000000000000000000000000000000000000..716a8ee41887ad605cee800f313c00a1d83320e3
--- /dev/null
+++ b/patches/safecopy-0.10.4.2.patch
@@ -0,0 +1,26 @@
+diff --git a/src/Data/SafeCopy/SafeCopy.hs b/src/Data/SafeCopy/SafeCopy.hs
+index 2d07fdc..3e11c0e 100644
+--- a/src/Data/SafeCopy/SafeCopy.hs
++++ b/src/Data/SafeCopy/SafeCopy.hs
+@@ -35,7 +35,7 @@ import Control.Monad.Trans.RWS as RWS (evalRWST, modify, RWST, tell)
+ import qualified Control.Monad.Trans.RWS as RWS (get)
+ import Data.Bits (shiftR)
+ import Data.Int (Int32)
+-import Data.List
++import Data.List (nub)
+ import Data.Map as Map (Map, lookup, insert)
+ import Data.Serialize
+ import Data.Set as Set (insert, member, Set)
+diff --git a/test/instances.hs b/test/instances.hs
+index 300ce27..bbd696c 100644
+--- a/test/instances.hs
++++ b/test/instances.hs
+@@ -17,7 +17,7 @@ import Data.Array (Array)
+ import Data.Array.Unboxed (UArray)
+ import Data.Data.Lens
+ import Data.Fixed (Fixed, E1)
+-import Data.List
++import Data.List ((\\), intersect)
+ import Data.SafeCopy
+ import Data.Serialize (runPut, runGet)
+ import Data.Time (UniversalTime(..), ZonedTime(..))
diff --git a/patches/shake-0.19.4.patch b/patches/shake-0.19.4.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2ec095603b759c65c7c1f9f3457be6ed8b3b90f3
--- /dev/null
+++ b/patches/shake-0.19.4.patch
@@ -0,0 +1,311 @@
+diff --git a/src/Development/Shake/Command.hs b/src/Development/Shake/Command.hs
+index e366220..22f8df6 100644
+--- a/src/Development/Shake/Command.hs
++++ b/src/Development/Shake/Command.hs
+@@ -27,7 +27,7 @@ import Control.Exception.Extra
+ import Data.Char
+ import Data.Either.Extra
+ import Data.Foldable (toList)
+-import Data.List.Extra
++import Data.List.Extra (find, intercalate, isPrefixOf, lastDef, nubOrd, nubOrdOn, partition, trim, upper, word1)
+ import Data.List.NonEmpty (NonEmpty)
+ import qualified Data.HashSet as Set
+ import Data.Maybe
+diff --git a/src/Development/Shake/Internal/Core/Action.hs b/src/Development/Shake/Internal/Core/Action.hs
+index e5dfd45..c2c660a 100644
+--- a/src/Development/Shake/Internal/Core/Action.hs
++++ b/src/Development/Shake/Internal/Core/Action.hs
+@@ -33,7 +33,7 @@ import Control.Concurrent.Extra
+ import Data.Maybe
+ import Data.Tuple.Extra
+ import Data.IORef.Extra
+-import Data.List.Extra
++import Data.List.Extra (isInfixOf, zipFrom)
+ import Numeric.Extra
+ import General.Extra
+ import qualified Data.HashMap.Strict as Map
+diff --git a/src/Development/Shake/Internal/Core/Run.hs b/src/Development/Shake/Internal/Core/Run.hs
+index 680a937..03997eb 100644
+--- a/src/Development/Shake/Internal/Core/Run.hs
++++ b/src/Development/Shake/Internal/Core/Run.hs
+@@ -29,7 +29,7 @@ import qualified General.TypeMap as TMap
+ import Control.Monad.Extra
+ import Data.Typeable
+ import Numeric.Extra
+-import Data.List.Extra
++import Data.List.Extra (intercalate)
+ import qualified Data.HashMap.Strict as Map
+ import qualified Data.HashSet as Set
+ import Data.Dynamic
+diff --git a/src/Development/Shake/Internal/Core/Storage.hs b/src/Development/Shake/Internal/Core/Storage.hs
+index 576ef9b..a48bb15 100644
+--- a/src/Development/Shake/Internal/Core/Storage.hs
++++ b/src/Development/Shake/Internal/Core/Storage.hs
+@@ -31,7 +31,7 @@ import System.Info
+ import Development.Shake.Classes
+ import Numeric
+ import General.Extra
+-import Data.List.Extra
++import Data.List.Extra (sort, trimEnd, zipFrom)
+ import Data.Maybe
+ import System.FilePath
+ import qualified Data.ByteString.UTF8 as UTF8
+diff --git a/src/Development/Shake/Internal/Core/Types.hs b/src/Development/Shake/Internal/Core/Types.hs
+index 59250dc..0a02bb7 100644
+--- a/src/Development/Shake/Internal/Core/Types.hs
++++ b/src/Development/Shake/Internal/Core/Types.hs
+@@ -23,7 +23,7 @@ import Data.Word
+ import Data.Typeable
+ import General.Binary
+ import Data.Maybe
+-import Data.List
++import Data.List (transpose)
+ import Control.Exception
+ import General.Extra
+ import Development.Shake.Internal.Core.Database
+diff --git a/src/Development/Shake/Internal/Derived.hs b/src/Development/Shake/Internal/Derived.hs
+index b650559..592fb29 100644
+--- a/src/Development/Shake/Internal/Derived.hs
++++ b/src/Development/Shake/Internal/Derived.hs
+@@ -30,7 +30,7 @@ import Development.Shake.Internal.Rules.File
+ import qualified Data.ByteString as BS
+ import qualified Data.HashMap.Strict as Map
+ import General.Extra
+-import Data.List.Extra
++import Data.List.Extra (groupSort)
+ import Data.Hashable
+ import Data.Typeable
+ import Data.Dynamic
+diff --git a/src/Development/Shake/Internal/Errors.hs b/src/Development/Shake/Internal/Errors.hs
+index b0ecf44..c51902d 100644
+--- a/src/Development/Shake/Internal/Errors.hs
++++ b/src/Development/Shake/Internal/Errors.hs
+@@ -16,7 +16,7 @@ import Control.Exception.Extra
+ import Control.Monad.IO.Class
+ import General.Extra
+ import Data.Typeable
+-import Data.List.Extra
++import Data.List.Extra (stripPrefix, zipFrom)
+ import Data.Maybe
+ 
+ 
+diff --git a/src/Development/Shake/Internal/History/Shared.hs b/src/Development/Shake/Internal/History/Shared.hs
+index d655370..04db79c 100644
+--- a/src/Development/Shake/Internal/History/Shared.hs
++++ b/src/Development/Shake/Internal/History/Shared.hs
+@@ -15,7 +15,6 @@ import Development.Shake.Internal.Core.Database
+ import Development.Shake.Classes
+ import General.Binary
+ import General.Extra
+-import Data.List
+ import Control.Monad.Extra
+ import System.Directory.Extra
+ import System.FilePath
+diff --git a/src/Development/Shake/Internal/Profile.hs b/src/Development/Shake/Internal/Profile.hs
+index b3d7d02..d1072d8 100644
+--- a/src/Development/Shake/Internal/Profile.hs
++++ b/src/Development/Shake/Internal/Profile.hs
+@@ -5,7 +5,7 @@ module Development.Shake.Internal.Profile(writeProfile) where
+ import General.Template
+ import Data.Tuple.Extra
+ import Data.Function
+-import Data.List.Extra
++import Data.List.Extra (dropWhileEnd, foldl', intercalate, mapAccumL, partition, sortBy, sortOn)
+ import Data.Maybe
+ import System.FilePath
+ import System.IO.Extra
+diff --git a/src/Development/Shake/Internal/Progress.hs b/src/Development/Shake/Internal/Progress.hs
+index 6d6c22e..3ea8355 100644
+--- a/src/Development/Shake/Internal/Progress.hs
++++ b/src/Development/Shake/Internal/Progress.hs
+@@ -16,7 +16,7 @@ import System.Process
+ import System.FilePath
+ import Data.Char
+ import Data.IORef
+-import Data.List
++import Data.List (foldl', intercalate, isInfixOf, mapAccumL, sort)
+ import Data.Maybe
+ import Development.Shake.Internal.Options
+ import Development.Shake.Internal.Core.Types
+diff --git a/src/Development/Shake/Internal/Rules/Directory.hs b/src/Development/Shake/Internal/Rules/Directory.hs
+index bd0b368..18f4de8 100644
+--- a/src/Development/Shake/Internal/Rules/Directory.hs
++++ b/src/Development/Shake/Internal/Rules/Directory.hs
+@@ -16,7 +16,7 @@ import Control.Monad.Extra
+ import Control.Monad.IO.Class
+ import Data.Maybe
+ import Data.Binary
+-import Data.List
++import Data.List (sort)
+ import Data.Tuple.Extra
+ import qualified Data.HashSet as Set
+ import qualified System.Directory as IO
+diff --git a/src/Development/Shake/Internal/Rules/File.hs b/src/Development/Shake/Internal/Rules/File.hs
+index 3946ee2..3984e0d 100644
+--- a/src/Development/Shake/Internal/Rules/File.hs
++++ b/src/Development/Shake/Internal/Rules/File.hs
+@@ -14,7 +14,7 @@ module Development.Shake.Internal.Rules.File(
+ import Control.Monad.Extra
+ import Control.Monad.IO.Class
+ import Data.Typeable
+-import Data.List
++import Data.List (partition)
+ import Data.Maybe
+ import qualified Data.ByteString.Char8 as BS
+ import qualified Data.HashSet as Set
+diff --git a/src/Development/Shake/Internal/Rules/Files.hs b/src/Development/Shake/Internal/Rules/Files.hs
+index a490578..5ca3e69 100644
+--- a/src/Development/Shake/Internal/Rules/Files.hs
++++ b/src/Development/Shake/Internal/Rules/Files.hs
+@@ -8,7 +8,7 @@ module Development.Shake.Internal.Rules.Files(
+ import Control.Monad
+ import Control.Monad.IO.Class
+ import Data.Maybe
+-import Data.List.Extra
++import Data.List.Extra (elemIndex, nubOrd, zipFrom)
+ import Data.Typeable
+ import General.Binary
+ 
+diff --git a/src/Development/Shake/Util.hs b/src/Development/Shake/Util.hs
+index 4d46e3e..632c5ce 100644
+--- a/src/Development/Shake/Util.hs
++++ b/src/Development/Shake/Util.hs
+@@ -10,7 +10,7 @@ import Development.Shake.Internal.Rules.File
+ import qualified Data.ByteString.Char8 as BS
+ import qualified General.Makefile as BS
+ import Data.Tuple.Extra
+-import Data.List
++import Data.List (foldl')
+ import General.GetOpt
+ import Data.IORef
+ import Data.Maybe
+diff --git a/src/General/Binary.hs b/src/General/Binary.hs
+index 99a8563..e1ed7ec 100644
+--- a/src/General/Binary.hs
++++ b/src/General/Binary.hs
+@@ -12,7 +12,7 @@ module General.Binary(
+ import Development.Shake.Classes
+ import Control.Monad
+ import Data.Binary
+-import Data.List.Extra
++import Data.List.Extra (mapAccumL, uncons)
+ import Data.Tuple.Extra
+ import Foreign.Storable
+ import Foreign.Ptr
+diff --git a/src/General/Process.hs b/src/General/Process.hs
+index 2275d6b..22069c6 100644
+--- a/src/General/Process.hs
++++ b/src/General/Process.hs
+@@ -11,7 +11,7 @@ import Control.Concurrent.Extra
+ import Control.DeepSeq
+ import Control.Exception.Extra as C
+ import Control.Monad.Extra
+-import Data.List.Extra
++import Data.List.Extra (disjoint, nubOrd, replace)
+ import Data.Maybe
+ import Foreign.C.Error
+ import System.Exit
+diff --git a/src/General/Timing.hs b/src/General/Timing.hs
+index 4a8308d..2befe7e 100644
+--- a/src/General/Timing.hs
++++ b/src/General/Timing.hs
+@@ -4,7 +4,7 @@ module General.Timing(resetTimings, addTiming, getTimings) where
+ import Data.IORef.Extra
+ import System.IO.Unsafe
+ import Data.Tuple.Extra
+-import Data.List.Extra
++import Data.List.Extra (drop1)
+ import Numeric.Extra
+ import General.Extra
+ import System.Time.Extra
+diff --git a/src/Test/Basic.hs b/src/Test/Basic.hs
+index 7f2133e..67bbe8b 100644
+--- a/src/Test/Basic.hs
++++ b/src/Test/Basic.hs
+@@ -5,7 +5,7 @@ import Development.Shake
+ import System.FilePath
+ import Test.Type
+ import System.Directory as IO
+-import Data.List
++import Data.List (isInfixOf)
+ import Control.Monad
+ import General.Extra
+ 
+diff --git a/src/Test/Batch.hs b/src/Test/Batch.hs
+index 7cad900..4f45861 100644
+--- a/src/Test/Batch.hs
++++ b/src/Test/Batch.hs
+@@ -4,7 +4,7 @@ module Test.Batch(main) where
+ import Development.Shake
+ import Development.Shake.FilePath
+ import System.Directory
+-import Data.List
++import Data.List (isSuffixOf)
+ import General.Extra
+ import Test.Type
+ import Control.Monad
+diff --git a/src/Test/Directory.hs b/src/Test/Directory.hs
+index 16066a7..79d8e1f 100644
+--- a/src/Test/Directory.hs
++++ b/src/Test/Directory.hs
+@@ -5,7 +5,7 @@ module Test.Directory(main) where
+ import Development.Shake
+ import Development.Shake.FilePath
+ import Test.Type
+-import Data.List
++import Data.List (isPrefixOf)
+ import Data.Function
+ import Control.Monad
+ import General.Extra
+diff --git a/src/Test/Docs.hs b/src/Test/Docs.hs
+index 9fb7f41..6cda7bb 100644
+--- a/src/Test/Docs.hs
++++ b/src/Test/Docs.hs
+@@ -9,7 +9,7 @@ import System.Directory
+ import Test.Type
+ import Control.Monad
+ import Data.Char
+-import Data.List.Extra
++import Data.List.Extra ((\\), breakOn, disjoint, dropSuffix, dropWhileEnd, drop1, isPrefixOf, isInfixOf, isSuffixOf, lower, nubOrd, partition, replace, splitOn, stripPrefix, stripInfix, stripSuffix, word1, zipWithFrom)
+ import System.Info
+ import Data.Version.Extra
+ 
+diff --git a/src/Test/FilePath.hs b/src/Test/FilePath.hs
+index 09a5d39..9864b14 100644
+--- a/src/Test/FilePath.hs
++++ b/src/Test/FilePath.hs
+@@ -7,7 +7,7 @@ import qualified System.FilePath as Native
+ import Test.Type
+ import Test.QuickCheck
+ import Control.Monad
+-import Data.List.Extra
++import Data.List.Extra (drop1, isInfixOf)
+ import qualified Data.ByteString.Char8 as BS
+ import qualified Development.Shake.Internal.FileName as BS
+ import System.Info.Extra
+diff --git a/src/Test/Random.hs b/src/Test/Random.hs
+index 7f5d131..aa0eba2 100644
+--- a/src/Test/Random.hs
++++ b/src/Test/Random.hs
+@@ -8,7 +8,7 @@ import Numeric.Extra
+ import Test.Type
+ import Control.Exception.Extra
+ import Control.Monad
+-import Data.List
++import Data.List (isInfixOf, isSuffixOf)
+ import Data.Maybe
+ import General.GetOpt
+ import System.Environment
+diff --git a/src/Test/Type.hs b/src/Test/Type.hs
+index 80e5d70..6b5a3b1 100644
+--- a/src/Test/Type.hs
++++ b/src/Test/Type.hs
+@@ -28,7 +28,7 @@ import Development.Shake.Internal.Paths
+ 
+ import Control.Exception.Extra
+ import Control.Monad.Extra
+-import Data.List.Extra
++import Data.List.Extra (delete, drop1, isInfixOf, isPrefixOf, sort)
+ import Text.Read(readMaybe)
+ import Data.Maybe
+ import Data.Either
diff --git a/patches/test-framework-0.8.2.0.patch b/patches/test-framework-0.8.2.0.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7486061bc84f2fd60529b712dda96b736f501516
--- /dev/null
+++ b/patches/test-framework-0.8.2.0.patch
@@ -0,0 +1,92 @@
+diff --git a/Test/Framework/Runners/TestPattern.hs b/Test/Framework/Runners/TestPattern.hs
+index 39924bb..a2aff5a 100644
+--- a/Test/Framework/Runners/TestPattern.hs
++++ b/Test/Framework/Runners/TestPattern.hs
+@@ -7,7 +7,7 @@ import Test.Framework.Utilities
+ import Text.Regex.Posix.Wrap
+ import Text.Regex.Posix.String()
+ 
+-import Data.List
++import Data.List (inits, intersperse)
+ 
+ 
+ data Token = SlashToken
+@@ -65,7 +65,7 @@ testPatternMatches test_pattern path = not_maybe $ any (=~ tokens_regex) things_
+     path_to_consider | tp_categories_only test_pattern = dropLast 1 path
+                      | otherwise                       = path
+     tokens_regex = buildTokenRegex (tp_tokens test_pattern)
+-    
++
+     things_to_match = case tp_match_mode test_pattern of
+         -- See if the tokens match any single path component
+         TestMatchMode -> path_to_consider
+@@ -79,7 +79,7 @@ buildTokenRegex (token:tokens) = concat (firstTokenToRegex token : map tokenToRe
+   where
+     firstTokenToRegex SlashToken = "^"
+     firstTokenToRegex other = tokenToRegex other
+-      
++
+     tokenToRegex SlashToken = "/"
+     tokenToRegex WildcardToken = "[^/]*"
+     tokenToRegex DoubleWildcardToken = "*"
+diff --git a/test-framework.cabal b/test-framework.cabal
+index df3b918..4d76446 100644
+--- a/test-framework.cabal
++++ b/test-framework.cabal
+@@ -1,6 +1,9 @@
++cabal-version:       >= 1.10
+ Name:                test-framework
+ Version:             0.8.2.0
+-Cabal-Version:       >= 1.10
++x-revision: 6
++
++Build-Type:          Simple
+ Category:            Testing
+ Synopsis:            Framework for running and organising tests, with HUnit and QuickCheck support
+ Description:         Allows tests such as QuickCheck properties and HUnit test cases to be assembled into test groups, run in
+@@ -12,7 +15,6 @@ Author:              Max Bolingbroke <batterseapower@hotmail.com>
+ Maintainer:          Libraries List <libraries@haskell.org>
+ Homepage:            http://haskell.github.io/test-framework/
+ Bug-Reports:         https://github.com/haskell/test-framework/issues
+-Build-Type:          Simple
+ Tested-With:         GHC==8.2.2, GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2, GHC==7.2.2, GHC==7.0.4
+ 
+ Extra-Source-Files: ChangeLog.md
+@@ -45,21 +47,21 @@ Library
+                                 Test.Framework.Utilities
+ 
+         Build-Depends:          base           >= 4.3    && < 5
+-                              , ansi-terminal  >= 0.4.0  && < 0.9
++                              , ansi-terminal  >= 0.4.0  && < 0.12
+                               , ansi-wl-pprint >= 0.5.1  && < 0.7
+-                              , random         >= 1.0    && < 1.2
+-                              , containers     >= 0.1    && < 0.6
+-                              , regex-posix    >= 0.72   && < 0.96
++                              , random         >= 1.0    && < 1.3
++                              , containers     >= 0.1    && < 0.7
++                              , regex-posix    >= 0.72   && < 0.97
+                               , old-locale     >= 1.0    && < 1.1
+-                              , time           >= 1.1.2  && < 1.9
++                              , time           >= 1.1.2  && < 1.12
+                               , xml            >= 1.3.5  && < 1.4
+                               , hostname       >= 1.0    && < 1.1
+ 
+         if !impl(ghc >= 7.8)
+-                Build-Depends:  base-orphans   >= 0.1    && < 0.5
++                Build-Depends:  base-orphans   >= 0.1    && < 0.9
+ 
+         if !impl(ghc >= 8.0)
+-                Build-Depends:  semigroups     >= 0.18   && < 0.19
++                Build-Depends:  semigroups     >= 0.18   && < 0.20
+ 
+         Default-Language:       Haskell2010
+         Default-Extensions:     CPP
+@@ -89,7 +91,7 @@ Test-Suite test-framework-tests
+ 
+         -- Buildable:              False
+         Build-Depends:          HUnit          >= 1.2
+-                              , QuickCheck     >= 2.3 && < 2.10
++                              , QuickCheck     >= 2.3 && < 2.15
+                               , base           >= 4.3
+                               , random         >= 1.0
+                               , containers     >= 0.1
diff --git a/patches/wai-middleware-static-0.9.0.patch b/patches/wai-middleware-static-0.9.0.patch
new file mode 100644
index 0000000000000000000000000000000000000000..63a64994d31c7ce17201abeb768ee2a88218c39a
--- /dev/null
+++ b/patches/wai-middleware-static-0.9.0.patch
@@ -0,0 +1,13 @@
+diff --git a/Network/Wai/Middleware/Static.hs b/Network/Wai/Middleware/Static.hs
+index 0098fa8..a6e5651 100644
+--- a/Network/Wai/Middleware/Static.hs
++++ b/Network/Wai/Middleware/Static.hs
+@@ -28,7 +28,7 @@ module Network.Wai.Middleware.Static
+ 
+ import Caching.ExpiringCacheMap.HashECM (newECMIO, lookupECM, CacheSettings(..), consistentDuration)
+ import Control.Monad
+-import Data.List
++import Data.List (isInfixOf, isPrefixOf, isSuffixOf)
+ #if !(MIN_VERSION_base(4,8,0))
+ import Data.Monoid (Monoid(..))
+ #endif