diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
 .stack-work
 idx/
 dist/
+dist-newstyle/
 log/
 *.swp
 *.swo
diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,6 @@
 # .travis.yml file for leancheck-instances
 #
-# Copyright:   (c) 2017-2018 Rudy Matela
+# Copyright:   (c) 2017-2020 Rudy Matela
 # License:     3-Clause BSD  (see the file LICENSE)
 # Maintainer:  Rudy Matela <rudy@matela.com.br>
 
@@ -23,6 +23,8 @@
 - ghc --version
 - cabal --version
 - haddock --version
+- du -hd3 ~/.cabal ~/.ghc || true
+- du -hd4 ~/.stack || true
 - rm -f ~/.cabal/config && cabal update
 # Download and unpack the stack executable
 # "Once Travis whitelists the stack.dev files," simply include stack in the
@@ -32,36 +34,42 @@
 - travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
 - stack config set system-ghc --global true
 - stack --version
-- cabal install leancheck bytestring nats text
+- cabal install leancheck bytestring nats text || cabal install leancheck bytestring nats text --lib
 
 script:
 - make && make test
 - make haddock
 - make test-sdist
 - cabal test --ghc-option=-O0
-- stack $STACKR --no-terminal --skip-ghc-check test --ghc-options=-O0
+- stack --resolver $STACKVER --no-terminal --skip-ghc-check test --ghc-options=-O0
 
 matrix:
   allow_failures:
   - ghc: 'head'
   include:
   - ghc: 'head'
-    env:                   GHCVER=head         CABALVER=head
+    env:                   GHCVER=head         CABALVER=head   STACKVER=nightly-2020-03-28
     addons: {apt: {packages: [ghc-head,   cabal-install-head], sources: hvr-ghc}}
+  - ghc: '8.10'
+    env:                   GHCVER=8.10.1       CABALVER=3.2    STACKVER=nightly-2020-03-28
+    addons: {apt: {packages: [ghc-8.10.1, cabal-install-3.2],  sources: hvr-ghc}}
+  - ghc: '8.8'
+    env:                   GHCVER=8.8.3        CABALVER=3.0    STACKVER=lts-15.5
+    addons: {apt: {packages: [ghc-8.8.3,  cabal-install-3.0],  sources: hvr-ghc}}
   - ghc: '8.6'
-    env:                   GHCVER=8.6.1        CABALVER=2.4
-    addons: {apt: {packages: [ghc-8.6.1,  cabal-install-2.4],  sources: hvr-ghc}}
+    env:                   GHCVER=8.6.5        CABALVER=2.4    STACKVER=lts-14.27
+    addons: {apt: {packages: [ghc-8.6.5,  cabal-install-2.4],  sources: hvr-ghc}}
   - ghc: '8.4'
-    env:                   GHCVER=8.4.4        CABALVER=2.2
+    env:                   GHCVER=8.4.4        CABALVER=2.2    STACKVER=lts-12.26
     addons: {apt: {packages: [ghc-8.4.4,  cabal-install-2.2],  sources: hvr-ghc}}
   - ghc: '8.2'
-    env:                   GHCVER=8.2.2        CABALVER=2.0
+    env:                   GHCVER=8.2.2        CABALVER=2.0    STACKVER=lts-11.22
     addons: {apt: {packages: [ghc-8.2.2,  cabal-install-2.0],  sources: hvr-ghc}}
   - ghc: '8.0'
-    env:                   GHCVER=8.0.2        CABALVER=1.24
+    env:                   GHCVER=8.0.2        CABALVER=1.24   STACKVER=lts-9.21
     addons: {apt: {packages: [ghc-8.0.2,  cabal-install-1.24], sources: hvr-ghc}}
   - ghc: '7.10'
-    env:                   GHCVER=7.10.3       CABALVER=1.22   STACK_YAML=stack-lts-11.yaml
+    env:                   GHCVER=7.10.3       CABALVER=1.22   STACKVER=lts-6.35
     addons: {apt: {packages: [ghc-7.10.3, cabal-install-1.22], sources: hvr-ghc}}
   # we only support stack with GHC >= 7.10
   - ghc: '7.8'
@@ -73,6 +81,7 @@
     - cabal --version
     - haddock --version
     - rm -f ~/.cabal/config && cabal update
+    - cabal install Cabal==1.18.*
     - cabal install leancheck bytestring nats text
     script:
     - make && make test
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -99,7 +99,9 @@
 	./bench/tiers "Seq Bool"         | diff -rud test/diff/tiers-SeqBool.out     -
 	./bench/tiers "IntMap Int"       | diff -rud test/diff/tiers-IntMapInt.out   -
 	./bench/tiers "IntSet"           | diff -rud test/diff/tiers-IntSet.out      -
-	./bench/tiers "UTCTime"          | diff -rud test/diff/tiers-UTCTime.out     -
+	./bench/tiers "UTCTime"        6 | diff -rud test/diff/tiers-UTCTime.out     -
+	./bench/tiers "Day"            9 | diff -rud test/diff/tiers-Day.out         -
+	./bench/tiers "DiffTime"         | diff -rud test/diff/tiers-DiffTime.out    -
 	./bench/tiers "Array Int Int"    | diff -rud test/diff/tiers-ArrayIntInt.out -
 
 update-diff-test-tiers: bench/tiers
@@ -114,5 +116,7 @@
 	./bench/tiers "Seq Bool"         > test/diff/tiers-SeqBool.out
 	./bench/tiers "IntMap Int"       > test/diff/tiers-IntMapInt.out
 	./bench/tiers "IntSet"           > test/diff/tiers-IntSet.out
-	./bench/tiers "UTCTime"          > test/diff/tiers-UTCTime.out
+	./bench/tiers "UTCTime"        6 > test/diff/tiers-UTCTime.out
+	./bench/tiers "Day"            9 > test/diff/tiers-Day.out
+	./bench/tiers "DiffTime"         > test/diff/tiers-DiffTime.out
 	./bench/tiers "Array Int Int"    > test/diff/tiers-ArrayIntInt.out
diff --git a/bench/tiers.hs b/bench/tiers.hs
--- a/bench/tiers.hs
+++ b/bench/tiers.hs
@@ -112,6 +112,8 @@
     "IntMap Int"       -> put t n (u :: IntMap Int           )
     "IntSet"           -> put t n (u :: IntSet               )
     -- time
+    "Day"              -> put t n (u :: Day                  )
+    "DiffTime"         -> put t n (u :: DiffTime             )
     "UTCTime"          -> put t n (u :: UTCTime              )
     -- unhandled
     _                  -> putStrLn $ "unknown/unhandled type `" ++ t ++ "'"
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,6 +1,13 @@
 Changelog for leancheck-instances
 =================================
 
+v0.0.4
+------
+
+* minor improvement on Listable UTCTime
+* improve tests
+
+
 v0.0.3
 ------
 
diff --git a/leancheck-instances.cabal b/leancheck-instances.cabal
--- a/leancheck-instances.cabal
+++ b/leancheck-instances.cabal
@@ -1,6 +1,6 @@
 -- Cabal file for leancheck-instances
 name:                leancheck-instances
-version:             0.0.3
+version:             0.0.4
 synopsis:            Common LeanCheck instances
 description:
   Listable instances for types provided by the Haskell Platform.
@@ -31,13 +31,19 @@
                   , mk/ghcdeps
                   , mk/haddock-i
                   , mk/haskell.mk
+                  , mk/install-on
                   , stack.yaml
-                  , stack-lts-11.yaml
                   , test/diff/*.out
                   , test/diff/eg/*.out
                   , test/sdist
-tested-with: GHC==8.6, GHC==8.4, GHC==8.2, GHC==8.0
-           , GHC==7.10, GHC==7.8
+tested-with: GHC==8.10
+           , GHC==8.8
+           , GHC==8.6
+           , GHC==8.4
+           , GHC==8.2
+           , GHC==8.0
+           , GHC==7.10
+           , GHC==7.8
 
 
 source-repository head
@@ -47,7 +53,7 @@
 source-repository this
   type:            git
   location:        https://github.com/rudymatela/leancheck-instances
-  tag:             v0.0.3
+  tag:             v0.0.4
 
 library
   exposed-modules: Test.LeanCheck.Instances
@@ -60,7 +66,7 @@
                  , Test.LeanCheck.WithInstances
   hs-source-dirs: src
   build-depends: base >= 4 && < 5
-               , leancheck >= 0.7.7
+               , leancheck >= 0.9.2
                , bytestring
                , containers
                , nats
@@ -82,7 +88,10 @@
                      , text
   default-language:    Haskell2010
 
-test-suite text
+-- This test suite cannot be named simply "text".
+-- Otherwise, "cabal v2-install" somehow confuses
+-- the test suite with the "text" package.
+test-suite text-
   type:                exitcode-stdio-1.0
   main-is:             text.hs
   hs-source-dirs:      test
diff --git a/mk/depend.mk b/mk/depend.mk
--- a/mk/depend.mk
+++ b/mk/depend.mk
@@ -8,6 +8,7 @@
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
   src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs \
   bench/tiers.hs
 eg/test-text: \
   eg/test-text.hs \
@@ -19,6 +20,7 @@
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
   src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs \
   eg/test-text.hs
 mk/All.o: \
   src/Test/LeanCheck/Instances/Time.hs \
@@ -27,6 +29,7 @@
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
   src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs \
   mk/All.hs
 mk/Toplibs.o: \
   src/Test/LeanCheck/Instances/Time.hs \
@@ -35,12 +38,10 @@
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
   src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs \
   mk/Toplibs.hs
-Setup.o: \
-  Setup.hs
-Setup: \
-  Setup.hs \
-  mk/toplibs
+src/Test/LeanCheck/Instances/Array.o: \
+  src/Test/LeanCheck/Instances/Array.hs
 src/Test/LeanCheck/Instances/ByteString.o: \
   src/Test/LeanCheck/Instances/ByteString.hs
 src/Test/LeanCheck/Instances/Containers.o: \
@@ -55,7 +56,8 @@
   src/Test/LeanCheck/Instances.hs \
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
-  src/Test/LeanCheck/Instances/ByteString.hs
+  src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs
 src/Test/LeanCheck/Instances/Text.o: \
   src/Test/LeanCheck/Instances/Text.hs
 src/Test/LeanCheck/Instances/Time.o: \
@@ -67,7 +69,8 @@
   src/Test/LeanCheck/Instances.hs \
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
-  src/Test/LeanCheck/Instances/ByteString.hs
+  src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs
 test/main.o: \
   test/main.hs \
   src/Test/LeanCheck/Instances/Time.hs \
@@ -75,7 +78,8 @@
   src/Test/LeanCheck/Instances.hs \
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
-  src/Test/LeanCheck/Instances/ByteString.hs
+  src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs
 test/main: \
   test/main.hs \
   mk/toplibs
@@ -86,7 +90,8 @@
   src/Test/LeanCheck/Instances.hs \
   src/Test/LeanCheck/Instances/Natural.hs \
   src/Test/LeanCheck/Instances/Containers.hs \
-  src/Test/LeanCheck/Instances/ByteString.hs
+  src/Test/LeanCheck/Instances/ByteString.hs \
+  src/Test/LeanCheck/Instances/Array.hs
 test/text: \
   test/text.hs \
   mk/toplibs
diff --git a/mk/ghcdeps b/mk/ghcdeps
--- a/mk/ghcdeps
+++ b/mk/ghcdeps
@@ -2,7 +2,7 @@
 #
 # ghcdeps: generate Haskell make dependencies for compiling with GHC.
 #
-# Copyright (c) 2015-2018 Rudy Matela.
+# Copyright (c) 2015-2020 Rudy Matela.
 # Distributed under the 3-Clause BSD licence.
 #
 # From a list of files provided on standard input,
diff --git a/mk/haddock-i b/mk/haddock-i
--- a/mk/haddock-i
+++ b/mk/haddock-i
@@ -2,7 +2,7 @@
 #
 # haddock-i: list haddock's -i parameters.
 #
-# Copyright (c) 2015-2018 Rudy Matela.
+# Copyright (c) 2015-2020 Rudy Matela.
 # Distributed under the 3-Clause BSD licence.
 #
 # $ haddock-i <package1> <package2> ... <packageN>
@@ -11,14 +11,26 @@
 # documentation installed on your system, so you can:
 #
 # $ haddock-i base template-haskell | xargs haddock <files>
-errxit() {
+err() {
 	echo "$@" > /dev/stderr
+}
+
+errxit() {
+	err "$@"
 	exit 1
 }
 
-for pkg in "$@"; do
-	ghc-pkg field $pkg haddock-html,haddock-interfaces ||
-	errxit "error: haddock-i: cannot find package $pkg (ghc-pkg)"
-done |
-sed "s/.*: //" |
-sed "N;s/\n/,/;s/^/-i/"
+iface-for() {
+	ghc-pkg field $1 haddock-interfaces | sort -rV | head -1 | sed "s/.*: //"
+}
+
+html-for() {
+	ghc-pkg field $1 haddock-html       | sort -rV | head -1 | sed "s/.*: //"
+}
+
+for pkg in "$@"
+do
+	iface=$(iface-for $pkg)
+	html=$(html-for $pkg)
+	[ -d "$html" -a -f "$iface" ] && echo "-i$html,$iface" || err "haddock-i: warning: could not find interface file for $pkg"
+done
diff --git a/mk/haskell.mk b/mk/haskell.mk
--- a/mk/haskell.mk
+++ b/mk/haskell.mk
@@ -1,6 +1,6 @@
 # Implicit rules for compiling Haskell code.
 #
-# Copyright (c) 2015-2018 Rudy Matela.
+# Copyright (c) 2015-2020 Rudy Matela.
 # Distributed under the 3-Clause BSD licence.
 #
 # You can optionally configure the "Configuration variables" below in your main
@@ -20,6 +20,7 @@
 GHCFLAGS ?=
 GHC ?= ghc
 GHCCMD = $(GHC) -i$(GHCIMPORTDIRS) $(GHCFLAGS)
+HADDOCK ?= haddock
 
 # Hugs Parameters
 HUGSIMPORTDIRS ?= "/usr/lib/hugs/packages/*"
@@ -38,18 +39,24 @@
 # ALL_HSS: all Haskell files
 # You can override ALL/LIB_HSS in your main Makefile
 LIST_LIB_HSS ?= find src -name "*.hs"
-LIST_ALL_HSS ?= find \( -path "./dist" -o -path "./.stack-work" \) -prune \
+LIST_ALL_HSS ?= find \( -path "./dist*" -o -path "./.stack-work" -o -path "./Setup.hs" \) -prune \
                      -o -name "*.*hs" -print
 LIB_HSS ?= $(shell $(LIST_LIB_HSS))
 ALL_HSS ?= $(shell $(LIST_ALL_HSS))
 
+LIB_DEPS ?= base
+ALL_DEPS ?= $(LIB_DEPS)
+
 PKGNAME = $(shell cat *.cabal | grep "^name:"    | sed -e "s/name: *//")
-HADDOCK_VERSION = $(shell haddock --version | grep version | sed -e 's/.*version //;s/,.*//')
+HADDOCK_VERSION = $(shell $(HADDOCK) --version | grep version | sed -e 's/.*version //;s/,.*//')
 HADDOCK_MAJOR = $(shell echo $(HADDOCK_VERSION) | sed -e 's/\..*//')
 HADDOCK_MINOR = $(shell echo $(HADDOCK_VERSION) | sed -e 's/[0-9]*\.\([0-9]*\).[0-9]*/\1/')
 HADDOCK_PKG_NAME = $(shell [ $(HADDOCK_MAJOR) -gt 2 ] \
                         || [ $(HADDOCK_MAJOR) -eq 2 -a $(HADDOCK_MINOR) -ge 20 ] \
                         && echo "--package-name=$(PKGNAME)")
+HADDOCK_HLNK_SRC = $(shell [ $(HADDOCK_MAJOR) -gt 2 ] \
+                        || [ $(HADDOCK_MAJOR) -eq 2 -a $(HADDOCK_MINOR) -ge 17 ] \
+                        && echo "--hyperlinked-source")
 
 
 # Implicit rules
@@ -90,7 +97,7 @@
 haddock: doc/index.html
 
 clean-haddock:
-	rm -f doc/*.{html,css,js,png,gif,json} README.html
+	rm -f doc/*.{html,css,js,png,gif,json} doc/src/* README.html
 
 upload-haddock:
 	@echo "use \`cabal upload -d' instead"
@@ -99,9 +106,14 @@
 	@echo "(on Arch Linux, use: cabal haddock --for-hackage --haddock-options=--optghc=-dynamic)"
 
 doc/index.html: $(LIB_HSS)
-	./mk/haddock-i base template-haskell | xargs \
-	haddock --html -odoc $(LIB_HSS) $(HADDOCKFLAGS) --title=$(PKGNAME) $(HADDOCK_PKG_NAME)
+	./mk/haddock-i $(LIB_DEPS) | xargs \
+	$(HADDOCK) --html -odoc $(LIB_HSS) \
+	  --title=$(PKGNAME) \
+	  $(HADDOCK_PKG_NAME) \
+	  $(HADDOCK_HLNK_SRC) \
+	  $(HADDOCKFLAGS)
 
+
 # lists all Haskell source files
 list-all-hss:
 	@find $(ALL_HSS)
@@ -109,6 +121,12 @@
 # lists library Haskell source files
 list-lib-hss:
 	@find $(LIB_HSS)
+
+bootstrap-haskell-mk:
+	@[ -d "$(DEST)" ] || (echo -e "error: no destination found\nusage: \`make bootstrap-haskell-mk DEST=path/to/prj'"; exit 1)
+	mkdir -p mk
+	cp mk/{haskell.mk,ghcdeps,haddock-i} $(DEST)/mk
+	touch $(DEST)/mk/depend.mk
 
 show-pkgname:
 	@echo $(PKGNAME)
diff --git a/mk/install-on b/mk/install-on
new file mode 100644
--- /dev/null
+++ b/mk/install-on
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# mk/install-on: install or updates the mk folder on a Haskell project
+#
+# usage: ./mk/install-on path/to/project
+#
+# This assumes a few things:
+#
+# * tests are stored in a "test/" folder
+# * sources are stored in a "src/" folder
+set -e
+
+errxit() {
+	echo "$@" > /dev/stderr
+	exit 1
+}
+
+src=`dirname $0`/..
+dst="$1"
+
+[ -n "$dst" ] || errxit "destination folder not provided"
+
+mkdir -p $dst/mk
+mkdir -p $dst/test
+
+cp $src/mk/ghcdeps    $dst/mk/ghcdeps
+cp $src/mk/haddock-i  $dst/mk/haddock-i
+cp $src/mk/haskell.mk $dst/mk/haskell.mk
+cp $src/mk/install-on $dst/mk/install-on
+cp $src/test/sdist    $dst/test/sdist
diff --git a/src/Test/LeanCheck/Instances/Time.hs b/src/Test/LeanCheck/Instances/Time.hs
--- a/src/Test/LeanCheck/Instances/Time.hs
+++ b/src/Test/LeanCheck/Instances/Time.hs
@@ -11,21 +11,7 @@
 
 import Data.Time
 import Test.LeanCheck
-
--- This could be made more efficient.
--- Nevertheless, it is probably efficient enough for millions of tests.
-binarySearchIndexes :: (Num a, Integral a) => a -> a -> [a]
-binarySearchIndexes min max
-  | min > max   = []
-  | max == min  = [max]
-  | otherwise   =  let mid = (max - min) `div` 2 + min in
-                   mid : (binarySearchIndexes (mid + 1) max +| binarySearchIndexes min (mid - 1))
-
-binarySearchIndexesThen :: (Num a, Integral a) => a -> a -> [a]
-binarySearchIndexesThen min max  =  binarySearchIndexes min max ++ ([(min-1),(min-2)..] +| [(max+1)..])
-
-secondsInADay :: Num a => a
-secondsInADay  =  24*60*60-1
+import Test.LeanCheck.Tiers
 
 -- | This listable enumeration starts with January 2019 then switches back and
 --   forth between past and future.
@@ -44,7 +30,12 @@
 -- >   , ...
 -- >   ]
 instance Listable Day where
-  list  =  map ModifiedJulianDay $ binarySearchIndexesThen 0 116969
+  tiers  =  mapMaybeT (\(y,(m,d)) -> fromGregorianValid y m d) (yearss >< (monthss >< dayss))
+    where
+    thisYear = 2019 -- year of release
+    yearss   = toTiers $ [thisYear,(thisYear-1)..] +| [(thisYear+1)..]
+    monthss  = toTiers $ [1..12]
+    dayss    = toTiers $ [1..31]
 
 instance Listable DiffTime where
   tiers  =  mapT (\(x,y) -> fromInteger x / fromInteger y) . reset
diff --git a/stack-lts-11.yaml b/stack-lts-11.yaml
deleted file mode 100644
--- a/stack-lts-11.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-# stack.yaml for leancheck-instances
-resolver: lts-11.22
-
-packages:
-- .
-
-extra-deps:
-- leancheck-0.8.0
-
-flags: {}
-
-extra-package-dbs: []
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,11 +1,7 @@
-# stack file for leancheck-instances
-resolver: lts-12.14
+resolver: lts-15.5 # or ghc-8.8.3
 
 packages:
 - .
 
-extra-deps: []
-
-flags: {}
-
-extra-package-dbs: []
+extra-deps:
+- leancheck-0.9.2
diff --git a/test/diff/tiers-Day.out b/test/diff/tiers-Day.out
new file mode 100644
--- /dev/null
+++ b/test/diff/tiers-Day.out
@@ -0,0 +1,184 @@
+map length (tiers :: [[ Day ]])  =  [1,3,6,10,15,21,28,36,45,...]
+
+length (list :: [ Day ])  =  Infinity
+
+allUnique (list :: [ Day ])  =  True
+
+ratioRepetitions (list :: [ Day ])  =  0 % 1
+
+tiers :: [Day]  =
+  [ [2019-01-01]
+  , [ 2019-01-02
+    , 2019-02-01
+    , 2020-01-01
+    ]
+  , [ 2019-01-03
+    , 2019-02-02
+    , 2019-03-01
+    , 2020-01-02
+    , 2020-02-01
+    , 2018-01-01
+    ]
+  , [ 2019-01-04
+    , 2019-02-03
+    , 2019-03-02
+    , 2019-04-01
+    , 2020-01-03
+    , 2020-02-02
+    , 2020-03-01
+    , 2018-01-02
+    , 2018-02-01
+    , 2021-01-01
+    ]
+  , [ 2019-01-05
+    , 2019-02-04
+    , 2019-03-03
+    , 2019-04-02
+    , 2019-05-01
+    , 2020-01-04
+    , 2020-02-03
+    , 2020-03-02
+    , 2020-04-01
+    , 2018-01-03
+    , 2018-02-02
+    , 2018-03-01
+    , 2021-01-02
+    , 2021-02-01
+    , 2017-01-01
+    ]
+  , [ 2019-01-06
+    , 2019-02-05
+    , 2019-03-04
+    , 2019-04-03
+    , 2019-05-02
+    , 2019-06-01
+    , 2020-01-05
+    , 2020-02-04
+    , 2020-03-03
+    , 2020-04-02
+    , 2020-05-01
+    , 2018-01-04
+    , 2018-02-03
+    , 2018-03-02
+    , 2018-04-01
+    , 2021-01-03
+    , 2021-02-02
+    , 2021-03-01
+    , 2017-01-02
+    , 2017-02-01
+    , 2022-01-01
+    ]
+  , [ 2019-01-07
+    , 2019-02-06
+    , 2019-03-05
+    , 2019-04-04
+    , 2019-05-03
+    , 2019-06-02
+    , 2019-07-01
+    , 2020-01-06
+    , 2020-02-05
+    , 2020-03-04
+    , 2020-04-03
+    , 2020-05-02
+    , 2020-06-01
+    , 2018-01-05
+    , 2018-02-04
+    , 2018-03-03
+    , 2018-04-02
+    , 2018-05-01
+    , 2021-01-04
+    , 2021-02-03
+    , 2021-03-02
+    , 2021-04-01
+    , 2017-01-03
+    , 2017-02-02
+    , 2017-03-01
+    , 2022-01-02
+    , 2022-02-01
+    , 2016-01-01
+    ]
+  , [ 2019-01-08
+    , 2019-02-07
+    , 2019-03-06
+    , 2019-04-05
+    , 2019-05-04
+    , 2019-06-03
+    , 2019-07-02
+    , 2019-08-01
+    , 2020-01-07
+    , 2020-02-06
+    , 2020-03-05
+    , 2020-04-04
+    , 2020-05-03
+    , 2020-06-02
+    , 2020-07-01
+    , 2018-01-06
+    , 2018-02-05
+    , 2018-03-04
+    , 2018-04-03
+    , 2018-05-02
+    , 2018-06-01
+    , 2021-01-05
+    , 2021-02-04
+    , 2021-03-03
+    , 2021-04-02
+    , 2021-05-01
+    , 2017-01-04
+    , 2017-02-03
+    , 2017-03-02
+    , 2017-04-01
+    , 2022-01-03
+    , 2022-02-02
+    , 2022-03-01
+    , 2016-01-02
+    , 2016-02-01
+    , 2023-01-01
+    ]
+  , [ 2019-01-09
+    , 2019-02-08
+    , 2019-03-07
+    , 2019-04-06
+    , 2019-05-05
+    , 2019-06-04
+    , 2019-07-03
+    , 2019-08-02
+    , 2019-09-01
+    , 2020-01-08
+    , 2020-02-07
+    , 2020-03-06
+    , 2020-04-05
+    , 2020-05-04
+    , 2020-06-03
+    , 2020-07-02
+    , 2020-08-01
+    , 2018-01-07
+    , 2018-02-06
+    , 2018-03-05
+    , 2018-04-04
+    , 2018-05-03
+    , 2018-06-02
+    , 2018-07-01
+    , 2021-01-06
+    , 2021-02-05
+    , 2021-03-04
+    , 2021-04-03
+    , 2021-05-02
+    , 2021-06-01
+    , 2017-01-05
+    , 2017-02-04
+    , 2017-03-03
+    , 2017-04-02
+    , 2017-05-01
+    , 2022-01-04
+    , 2022-02-03
+    , 2022-03-02
+    , 2022-04-01
+    , 2016-01-03
+    , 2016-02-02
+    , 2016-03-01
+    , 2023-01-02
+    , 2023-02-01
+    , 2015-01-01
+    ]
+  , ...
+  ]
diff --git a/test/diff/tiers-DiffTime.out b/test/diff/tiers-DiffTime.out
new file mode 100644
--- /dev/null
+++ b/test/diff/tiers-DiffTime.out
@@ -0,0 +1,39 @@
+map length (tiers :: [[ DiffTime ]])  =  [1,0,2,0,2,0,4,0,2,0,6,0,...]
+
+length (list :: [ DiffTime ])  =  Infinity
+
+allUnique (list :: [ DiffTime ])  =  True
+
+ratioRepetitions (list :: [ DiffTime ])  =  0 % 1
+
+tiers :: [DiffTime]  =
+  [ [1s]
+  , []
+  , [ 0.5s
+    , 2s
+    ]
+  , []
+  , [ 0.333333333333s
+    , 3s
+    ]
+  , []
+  , [ 0.25s
+    , 0.666666666666s
+    , 1.5s
+    , 4s
+    ]
+  , []
+  , [ 0.2s
+    , 5s
+    ]
+  , []
+  , [ 0.166666666666s
+    , 0.4s
+    , 0.75s
+    , 1.333333333333s
+    , 2.5s
+    , 6s
+    ]
+  , []
+  , ...
+  ]
diff --git a/test/diff/tiers-UTCTime.out b/test/diff/tiers-UTCTime.out
--- a/test/diff/tiers-UTCTime.out
+++ b/test/diff/tiers-UTCTime.out
@@ -1,4 +1,4 @@
-map length (tiers :: [[ UTCTime ]])  =  [0,1,1,3,3,5,5,9,9,11,11,17,...]
+map length (tiers :: [[ UTCTime ]])  =  [0,1,3,8,16,29,...]
 
 length (list :: [ UTCTime ])  =  Infinity
 
@@ -9,88 +9,65 @@
 tiers :: [UTCTime]  =
   [ []
   , [2019-01-01 00:00:01 UTC]
-  , [2099-01-24 00:00:01 UTC]
+  , [ 2019-01-02 00:00:01 UTC
+    , 2019-02-01 00:00:01 UTC
+    , 2020-01-01 00:00:01 UTC
+    ]
   , [ 2019-01-01 00:00:00.5 UTC
     , 2019-01-01 00:00:02 UTC
-    , 1938-12-09 00:00:01 UTC
+    , 2019-01-03 00:00:01 UTC
+    , 2019-02-02 00:00:01 UTC
+    , 2019-03-01 00:00:01 UTC
+    , 2020-01-02 00:00:01 UTC
+    , 2020-02-01 00:00:01 UTC
+    , 2018-01-01 00:00:01 UTC
     ]
-  , [ 2099-01-24 00:00:00.5 UTC
-    , 2099-01-24 00:00:02 UTC
-    , 2139-02-05 00:00:01 UTC
+  , [ 2019-01-02 00:00:00.5 UTC
+    , 2019-01-02 00:00:02 UTC
+    , 2019-02-01 00:00:00.5 UTC
+    , 2019-02-01 00:00:02 UTC
+    , 2020-01-01 00:00:00.5 UTC
+    , 2020-01-01 00:00:02 UTC
+    , 2019-01-04 00:00:01 UTC
+    , 2019-02-03 00:00:01 UTC
+    , 2019-03-02 00:00:01 UTC
+    , 2019-04-01 00:00:01 UTC
+    , 2020-01-03 00:00:01 UTC
+    , 2020-02-02 00:00:01 UTC
+    , 2020-03-01 00:00:01 UTC
+    , 2018-01-02 00:00:01 UTC
+    , 2018-02-01 00:00:01 UTC
+    , 2021-01-01 00:00:01 UTC
     ]
   , [ 2019-01-01 00:00:00.333333333333 UTC
     , 2019-01-01 00:00:03 UTC
-    , 1938-12-09 00:00:00.5 UTC
-    , 1938-12-09 00:00:02 UTC
-    , 1978-12-20 00:00:01 UTC
-    ]
-  , [ 2099-01-24 00:00:00.333333333333 UTC
-    , 2099-01-24 00:00:03 UTC
-    , 2139-02-05 00:00:00.5 UTC
-    , 2139-02-05 00:00:02 UTC
-    , 2059-01-12 00:00:01 UTC
-    ]
-  , [ 2019-01-01 00:00:00.25 UTC
-    , 2019-01-01 00:00:00.666666666666 UTC
-    , 2019-01-01 00:00:01.5 UTC
-    , 2019-01-01 00:00:04 UTC
-    , 1938-12-09 00:00:00.333333333333 UTC
-    , 1938-12-09 00:00:03 UTC
-    , 1978-12-20 00:00:00.5 UTC
-    , 1978-12-20 00:00:02 UTC
-    , 1898-11-27 00:00:01 UTC
-    ]
-  , [ 2099-01-24 00:00:00.25 UTC
-    , 2099-01-24 00:00:00.666666666666 UTC
-    , 2099-01-24 00:00:01.5 UTC
-    , 2099-01-24 00:00:04 UTC
-    , 2139-02-05 00:00:00.333333333333 UTC
-    , 2139-02-05 00:00:03 UTC
-    , 2059-01-12 00:00:00.5 UTC
-    , 2059-01-12 00:00:02 UTC
-    , 2159-02-11 00:00:01 UTC
-    ]
-  , [ 2019-01-01 00:00:00.2 UTC
-    , 2019-01-01 00:00:05 UTC
-    , 1938-12-09 00:00:00.25 UTC
-    , 1938-12-09 00:00:00.666666666666 UTC
-    , 1938-12-09 00:00:01.5 UTC
-    , 1938-12-09 00:00:04 UTC
-    , 1978-12-20 00:00:00.333333333333 UTC
-    , 1978-12-20 00:00:03 UTC
-    , 1898-11-27 00:00:00.5 UTC
-    , 1898-11-27 00:00:02 UTC
-    , 1998-12-26 00:00:01 UTC
-    ]
-  , [ 2099-01-24 00:00:00.2 UTC
-    , 2099-01-24 00:00:05 UTC
-    , 2139-02-05 00:00:00.25 UTC
-    , 2139-02-05 00:00:00.666666666666 UTC
-    , 2139-02-05 00:00:01.5 UTC
-    , 2139-02-05 00:00:04 UTC
-    , 2059-01-12 00:00:00.333333333333 UTC
-    , 2059-01-12 00:00:03 UTC
-    , 2159-02-11 00:00:00.5 UTC
-    , 2159-02-11 00:00:02 UTC
-    , 2079-01-18 00:00:01 UTC
-    ]
-  , [ 2019-01-01 00:00:00.166666666666 UTC
-    , 2019-01-01 00:00:00.4 UTC
-    , 2019-01-01 00:00:00.75 UTC
-    , 2019-01-01 00:00:01.333333333333 UTC
-    , 2019-01-01 00:00:02.5 UTC
-    , 2019-01-01 00:00:06 UTC
-    , 1938-12-09 00:00:00.2 UTC
-    , 1938-12-09 00:00:05 UTC
-    , 1978-12-20 00:00:00.25 UTC
-    , 1978-12-20 00:00:00.666666666666 UTC
-    , 1978-12-20 00:00:01.5 UTC
-    , 1978-12-20 00:00:04 UTC
-    , 1898-11-27 00:00:00.333333333333 UTC
-    , 1898-11-27 00:00:03 UTC
-    , 1998-12-26 00:00:00.5 UTC
-    , 1998-12-26 00:00:02 UTC
-    , 1918-12-03 00:00:01 UTC
+    , 2019-01-03 00:00:00.5 UTC
+    , 2019-01-03 00:00:02 UTC
+    , 2019-02-02 00:00:00.5 UTC
+    , 2019-02-02 00:00:02 UTC
+    , 2019-03-01 00:00:00.5 UTC
+    , 2019-03-01 00:00:02 UTC
+    , 2020-01-02 00:00:00.5 UTC
+    , 2020-01-02 00:00:02 UTC
+    , 2020-02-01 00:00:00.5 UTC
+    , 2020-02-01 00:00:02 UTC
+    , 2018-01-01 00:00:00.5 UTC
+    , 2018-01-01 00:00:02 UTC
+    , 2019-01-05 00:00:01 UTC
+    , 2019-02-04 00:00:01 UTC
+    , 2019-03-03 00:00:01 UTC
+    , 2019-04-02 00:00:01 UTC
+    , 2019-05-01 00:00:01 UTC
+    , 2020-01-04 00:00:01 UTC
+    , 2020-02-03 00:00:01 UTC
+    , 2020-03-02 00:00:01 UTC
+    , 2020-04-01 00:00:01 UTC
+    , 2018-01-03 00:00:01 UTC
+    , 2018-02-02 00:00:01 UTC
+    , 2018-03-01 00:00:01 UTC
+    , 2021-01-02 00:00:01 UTC
+    , 2021-02-01 00:00:01 UTC
+    , 2017-01-01 00:00:01 UTC
     ]
   , ...
   ]
diff --git a/test/sdist b/test/sdist
--- a/test/sdist
+++ b/test/sdist
@@ -2,32 +2,39 @@
 #
 # test/sdist: tests the package generated by "cabal sdist".
 #
-# Copyright (c) 2015-2018 Rudy Matela.
+# Copyright (c) 2015-2020 Rudy Matela.
 # Distributed under the 3-Clause BSD licence.
+
+set -xe
+
 export LC_ALL=C  # consistent sort
+
 pkgver=` cat *.cabal | grep "^version:" | sed -e "s/version: *//"`
 pkgname=`cat *.cabal | grep "^name:"    | sed -e "s/name: *//"`
-pkg=$pkgname-$pkgver
-set -x
-cabal sdist &&
-cd dist &&
-tar -tf $pkg.tar.gz | sort --ignore-case          > ls-cabal-i  &&
-tar -tf $pkg.tar.gz | sort --ignore-case --unique > ls-cabal-iu &&
-diff -rud ls-cabal-i ls-cabal-iu &&
-rm -f ls-cabal ls-cabal-ignore-case &&
-if [ -d ../.git ]
+pkgbase=$pkgname-$pkgver
+
+cabal sdist
+
+# Try to find the package generated by cabal.
+pkg=`find dist* -name $pkgbase.tar.gz`
+[ -f "$pkg" ]
+# If the script fails here, either:
+#   * no package was generated
+#   * there are packages in both dist and dist-newstyle folders.
+
+tmp=`mktemp -d /tmp/test-sdist-XXXXXXXXXX`
+
+# Test if our file is compatible with case-insensitive filesystems.
+tar -tf $pkg | sort --ignore-case          > $tmp/ls-cabal-i
+tar -tf $pkg | sort --ignore-case --unique > $tmp/ls-cabal-iu
+diff -rud $tmp/ls-cabal-i $tmp/ls-cabal-iu
+
+if [ -d .git ]
 then
-	# on git repo, test if files are the same
-	git -C .. ls-files                                      | sort > ls-git   &&
-	tar -tf $pkg.tar.gz | grep -v "/$" | sed -e "s,$pkg/,," | sort > ls-cabal &&
-	diff -rud ls-git ls-cabal &&
-	rm -f ls-git ls-cabal
-else
-	# outside of git repo, test build
-	rm -rf $pkg/ &&
-	tar -xzf $pkg.tar.gz &&
-	cd $pkg/ &&
-	cabal configure --enable-tests --enable-benchmarks &&
-	cabal build &&
-	cabal test
+	# Test if files included by cabal are the same as files tracked in git.
+	git ls-files                                         | sort > $tmp/ls-git
+	tar -tf $pkg | grep -v "/$" | sed -e "s,$pkgbase/,," | sort > $tmp/ls-cabal
+	diff -rud $tmp/ls-git $tmp/ls-cabal
 fi
+
+rm -r $tmp
