diff --git a/.ghci b/.ghci
--- a/.ghci
+++ b/.ghci
@@ -1,1 +1,1 @@
-:set -isrc-lib:src-exe:src-test:dist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h
+:set -isrc-lib:src-exe:src-test:dist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h -Wall -fno-warn-tabs
diff --git a/changelog.markdown b/changelog.markdown
--- a/changelog.markdown
+++ b/changelog.markdown
@@ -149,15 +149,20 @@
 * Added file **.ghci**.
 * Replaced use of module **ToolShed.Defaultable** with **Data.Default**.
 * Tested with **ghc-8.0.1**.
+
 ## 1.0.4.10
 * Amended pre-processor directive **MIN_TOOL_VERSION_ghc** in **Main.hs**.
+
 ## 1.0.4.11
 * Checked pre-processor directives are defined.
+
 ## 1.0.4.12
 * Re-factored pre-processor directive in **Main.hs**.
+
 ## 1.0.4.13
 * Performance-improvements.
 * Added default RTS-options to **squeeze.cabal**.
 * Replaced 'Data.List.genericLength' with the more efficient @fromIntegral . length@.
 * Removed dependency on **Distribution.Package.PackageName**
 
+## 1.0.4.16
diff --git a/debian/DEBIAN/control b/debian/DEBIAN/control
--- a/debian/DEBIAN/control
+++ b/debian/DEBIAN/control
@@ -1,5 +1,5 @@
 Package:	squeeze
-Version:	1.0.4.13-1
+Version:	1.0.4.16-1
 Section:	utils
 Priority:	optional
 Architecture:	amd64
diff --git a/squeeze.cabal b/squeeze.cabal
--- a/squeeze.cabal
+++ b/squeeze.cabal
@@ -14,7 +14,7 @@
 -- along with Squeeze.  If not, see <http://www.gnu.org/licenses/>.
 
 Name:		squeeze
-Version:	1.0.4.13
+Version:	1.0.4.16
 Cabal-version:	>= 1.10
 Copyright:	(C) 2010-2015 Dr. Alistair Ward
 License:	GPL
@@ -25,7 +25,7 @@
 Build-type:	Simple
 Description:	Returns progressively better subsets of the specified files, selected to fit into a limited space, without wasting more than the specific ratio.
 Category:	Application, Utils
-Tested-with:	GHC == 7.4, GHC == 7.6, GHC == 7.8, GHC == 7.10.1, GHC == 8.0.1
+Tested-with:	GHC == 7.4, GHC == 7.6, GHC == 7.8, GHC == 7.10, GHC == 8.0, GHC == 8.2
 Homepage:	http://functionalley.eu/Squeeze/squeeze.html
 Maintainer:	mailto:squeeze@functionalley.eu
 Bug-reports:	mailto:squeeze@functionalley.eu
@@ -45,7 +45,7 @@
     type:	git
     location:	https://github.com/functionalley/Squeeze
 
--- Enable using: 'cabal configure -f llvm'.
+-- Enable using: 'runhaskell Setup configure -f llvm --verbose'.
 flag llvm
     Description:	Whether the 'llvm' compiler-backend has been installed and is required for code-generation.
     Manual:		True
@@ -91,7 +91,7 @@
             GHC-options:	-fllvm
 
         if impl(ghc >= 8.0)
-            GHC-options:	-Wredundant-constraints
+            GHC-options:	-j -Wredundant-constraints
 
 Executable squeeze
     Default-language:	Haskell2010
@@ -121,13 +121,13 @@
         if flag(threaded)
             GHC-options:	-rtsopts "-with-rtsopts=-N -H100M"
 
-        if impl(ghc >= 8.0)
-            GHC-options:	-Wredundant-constraints
-
-    if impl(ghc >= 7.4.1)
-        GHC-prof-options:	-fprof-auto -fprof-cafs -with-rtsopts=-H100M
-    else
-        GHC-prof-options:	-auto-all -caf-all
+        if impl(ghc >= 7.4.1)
+            GHC-prof-options:	-fprof-auto -fprof-cafs -with-rtsopts=-H100M
+    
+            if impl(ghc >= 8.0)
+                GHC-options:	-j -Wredundant-constraints
+        else
+            GHC-prof-options:	-auto-all -caf-all
 
     if flag(threaded)
         GHC-options:	-threaded
@@ -148,11 +148,13 @@
 
     Build-depends:
         base == 4.*,
+        Cabal >= 1.10,
+        extra,
         factory >= 0.2.1.0,
         QuickCheck >= 2.4,
         squeeze,
         toolshed >= 0.17
 
     if impl(ghc >= 8.0)
-        GHC-options:	-Wredundant-constraints
+        GHC-options:	-j -Wredundant-constraints
 
diff --git a/squeeze.spec b/squeeze.spec
--- a/squeeze.spec
+++ b/squeeze.spec
@@ -21,7 +21,7 @@
 
 Summary:	Finds the optimal subset of the specified files, to fit into a limited space, with minimal wastage
 Name:		squeeze
-Version:	1.0.4.13
+Version:	1.0.4.16
 Release:	1
 License:	GPLv3
 # From '/usr/share/doc/packages/rpm/GROUPS'.
diff --git a/src-lib/Squeeze/Data/CommandOptions.hs b/src-lib/Squeeze/Data/CommandOptions.hs
--- a/src-lib/Squeeze/Data/CommandOptions.hs
+++ b/src-lib/Squeeze/Data/CommandOptions.hs
@@ -70,7 +70,7 @@
 		getVerbosity		= Distribution.Verbosity.normal
 	}
 
-instance (Ord ratio, Real ratio) => ToolShed.SelfValidate.SelfValidator (CommandOptions ratio)	where
+instance Real ratio => ToolShed.SelfValidate.SelfValidator (CommandOptions ratio)	where
 	getErrors commandOptions	= map snd $ filter (($ commandOptions) . fst) [
 		((< 0) . getMaximumBytes,	"invalid maximumBytes; " ++ show (getMaximumBytes commandOptions)),
 		((< 0) . getMinimumUsageRatio,	"invalid minimumUsageRatio; " ++ show (realToFrac $ getMinimumUsageRatio commandOptions :: Double)),
@@ -79,10 +79,7 @@
 
 -- | Smart constructor.
 mkCommandOptions
-	:: (
-		Ord	ratio,
-		Real	ratio
-	)
+	:: Real ratio
 	=> Bool
 	-> Data.File.FileSize
 	-> Maybe Int
@@ -107,7 +104,7 @@
 	-> CommandOptions ratio
 subtractFile fileSize commandOptions
 	| fileSize < 0		= error $ "Squeeze.Data.CommandOptions.subtractFile:\tnegative file-size=" ++ show fileSize
-	| maximumBytes' < 0	= error $ "Squeeze.Data.CommandOptions.subtractFile:\tfile-size=" ++ show fileSize  ++ " > maximum=" ++ show maximumBytes
+	| maximumBytes' < 0	= error $ "Squeeze.Data.CommandOptions.subtractFile:\tfile-size=" ++ show fileSize ++ " > maximum=" ++ show maximumBytes
 	| otherwise		= commandOptions {
 		getMaximumBytes		= maximumBytes',
 		getMinimumUsageRatio	= if maximumBytes' == 0
diff --git a/src-lib/Squeeze/Data/FileCombination.hs b/src-lib/Squeeze/Data/FileCombination.hs
--- a/src-lib/Squeeze/Data/FileCombination.hs
+++ b/src-lib/Squeeze/Data/FileCombination.hs
@@ -87,7 +87,7 @@
 		fileCombination	= MkFileCombination fileSize filePathList
 
 -- | Construct a 'FileCombination' from a single 'Data.File.FileSizeAndPath'.
-singleton ::  Data.File.FileSizeAndPath -> FileCombination
+singleton :: Data.File.FileSizeAndPath -> FileCombination
 singleton (fileSize, filePath)	= mkFileCombination fileSize [filePath]
 
 {- |
diff --git a/src-test/Squeeze/Test/QuickCheck/Squeeze.hs b/src-test/Squeeze/Test/QuickCheck/Squeeze.hs
--- a/src-test/Squeeze/Test/QuickCheck/Squeeze.hs
+++ b/src-test/Squeeze/Test/QuickCheck/Squeeze.hs
@@ -27,12 +27,12 @@
 
 import			Control.Arrow((&&&))
 import qualified	Data.List
+import qualified	Data.List.Extra
 import qualified	Factory.Data.Interval
 import qualified	Squeeze.Data.File		as Data.File
 import qualified	Squeeze.Data.FileCombination	as Data.FileCombination
 import qualified	Squeeze.Squeeze			as Squeeze
 import qualified	Test.QuickCheck
-import qualified	ToolShed.Data.Foldable
 import qualified	ToolShed.Data.List
 
 -- | The constant test-results for this data-type.
@@ -42,10 +42,10 @@
 	mkFileSizeAndPathList	= take 12 . Data.List.nubBy (ToolShed.Data.List.equalityBy snd) . map (toInteger . abs &&& show)	-- CAVEAT: may be shorter than requested.
 
 	prop_totalCombinations, prop_fileSizeBounds, prop_allFiles, prop_monotonicFileSize, prop_uniqueFileNames :: [Integer] -> Test.QuickCheck.Property
-	prop_totalCombinations integers =  Test.QuickCheck.label "prop_totalCombinations" $ (length . Data.List.nub . Squeeze.findCombinations (0, fromIntegral (maxBound :: Int)) $ Data.File.orderByDecreasingSize fileSizeAndPathList) == 2 ^ length fileSizeAndPathList where
+	prop_totalCombinations integers = Test.QuickCheck.label "prop_totalCombinations" $ (length . Data.List.nub . Squeeze.findCombinations (0, fromIntegral (maxBound :: Int)) $ Data.File.orderByDecreasingSize fileSizeAndPathList) == 2 ^ length fileSizeAndPathList where
 		fileSizeAndPathList	= mkFileSizeAndPathList integers
 
-	prop_fileSizeBounds integers	=  Test.QuickCheck.label "prop_fileSizeBounds" . all ((`Factory.Data.Interval.elem'` fileSizeBounds) . Data.FileCombination.getAggregateFileSize) . Squeeze.findCombinations fileSizeBounds $ Data.File.orderByDecreasingSize fileSizeAndPathList	where
+	prop_fileSizeBounds integers	= Test.QuickCheck.label "prop_fileSizeBounds" . all ((`Factory.Data.Interval.elem'` fileSizeBounds) . Data.FileCombination.getAggregateFileSize) . Squeeze.findCombinations fileSizeBounds $ Data.File.orderByDecreasingSize fileSizeAndPathList	where
 		fileSizeAndPathList	= mkFileSizeAndPathList integers
 
 		fileSizeBounds :: Factory.Data.Interval.Interval Data.File.FileSize
@@ -64,7 +64,7 @@
 		fileSizeAndPathList	= mkFileSizeAndPathList integers
 
 	prop_uniqueFileNames integers	= Test.QuickCheck.label "prop_uniqueFileNames" . all (
-		not . ToolShed.Data.Foldable.hasDuplicates . Data.FileCombination.getFilePathList
+		not . Data.List.Extra.anySame . Data.FileCombination.getFilePathList
 	 ) $ Squeeze.findBestFit (0, fromIntegral (maxBound :: Int)) fileSizeAndPathList	where
 		fileSizeAndPathList	= mkFileSizeAndPathList integers
 
