diff --git a/.gitignore b/.gitignore
new file mode 100644
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+.cabal-sandbox
+cabal.sandbox.config
+.stack-work
+idx/
+dist/
+log/
+*.swp
+*.swo
+*.swn
+*.swm
+*.o
+*.hi
+*.dyn_hi
+*.dyn_o
+tests/test
+tests/test-derive
+tests/test-error
+tests/test-fun
+tests/test-funshow
+tests/test-io
+tests/test-most
+tests/test-operators
+tests/test-tiers
+tests/test-types
+tests/test-stats
+bench/tiers
+bench/tiers-colistable
+bench/tiers-colistable.hs
+bench/tiers-listsofpairs
+bench/tiers-listsofpairs.hs
+bench/tiers-funlistable
+bench/tiers-funlistable.hs
+bench/tiers-mixed
+bench/tiers-mixed.hs
+eg/test-sort
+eg/test-bool
+eg/test-list
+eg/higher-order
+eg/overflow
+doc/*.html
+doc/*.css
+doc/*.js
+doc/*.png
+doc/*.gif
+mk/toplibs
+README.html
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,72 @@
+# .travis.yml file for LeanCheck
+
+language: c  # not really
+
+notifications:
+  email:
+    on_failure: change
+
+sudo: false
+
+cache:
+  directories:
+  - $HOME/.ghc
+  - $HOME/.cabal
+  - $HOME/.stack
+
+before_install:
+- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+- ghc --version
+- cabal --version
+# Download and unpack the stack executable
+# "Once Travis whitelists the stack.dev files," simply include stack in the
+# addons section. -- https://docs.haskellstack.org/en/stable/travis_ci/
+- mkdir -p ~/.local/bin
+- export PATH=$HOME/.local/bin:$PATH
+- 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
+
+script:
+- make && make test && make haddock HADDOCKFLAGS=
+- cabal test
+- stack --no-terminal --skip-ghc-check test
+
+matrix:
+  include:
+  - ghc: 'head'
+    env:                   GHCVER=head         CABALVER=head
+    addons: {apt: {packages: [ghc-head,   cabal-install-head], sources: hvr-ghc}}
+  - ghc: '8.2'
+    env:                   GHCVER=8.2.1        CABALVER=2.0
+    addons: {apt: {packages: [ghc-8.2.1,  cabal-install-2.0],  sources: hvr-ghc}}
+  - ghc: '8.0'
+    env:                   GHCVER=8.0.2        CABALVER=1.24
+    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
+    addons: {apt: {packages: [ghc-7.10.3, cabal-install-1.22], sources: hvr-ghc}}
+  - ghc: '7.8'
+    env:                   GHCVER=7.8.4        CABALVER=1.18
+    addons: {apt: {packages: [ghc-7.8.4,  cabal-install-1.18], sources: hvr-ghc}}
+  # stack is only supported on GHC >= 7.8
+  - ghc: '7.6'
+    env:                   GHCVER=7.6.3        CABALVER=1.18
+    addons: {apt: {packages: [ghc-7.6.3,  cabal-install-1.18], sources: hvr-ghc}}
+    before_install:
+    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+    - ghc --version
+    - cabal --version
+    script:
+    - make GHCFLAGS=-O2 && make test GHCFLAGS=-O2 && make haddock HADDOCKFLAGS=
+    - cabal test
+  - ghc: '7.4'
+    env:                   GHCVER=7.4.2        CABALVER=1.18
+    addons: {apt: {packages: [ghc-7.4.2,  cabal-install-1.18], sources: hvr-ghc}}
+    before_install:
+    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+    - ghc --version
+    - cabal --version
+    script:
+    - make GHCFLAGS=-O2 && make test GHCFLAGS=-O2 && make haddock HADDOCKFLAGS=
+    - cabal test
diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,300 @@
+# Makefile for LeanCheck
+#
+# Copyright:   (c) 2015-2017 Rudy Matela
+# License:     3-Clause BSD  (see the file LICENSE)
+# Maintainer:  Rudy Matela <rudy@matela.com.br>
+TESTS = tests/test           \
+        tests/test-derive    \
+        tests/test-error     \
+        tests/test-fun       \
+        tests/test-funshow   \
+        tests/test-io        \
+        tests/test-operators \
+        tests/test-tiers     \
+        tests/test-stats     \
+        tests/test-types
+EGS = \
+	eg/overflow \
+	eg/higher-order \
+	eg/test-bool \
+	eg/test-list \
+	eg/test-sort
+BENCHS = \
+	bench/tiers-colistable \
+	bench/tiers-funlistable \
+	bench/tiers-listsofpairs \
+	bench/tiers-mixed \
+	bench/tiers
+LISTHS   = find src mk -name \*.hs
+LISTOBJS = $(LISTHS) | sed -e 's/.hs$$/.o/'
+ALLHS    = $(shell $(LISTHS))
+ALLOBJS  = $(shell $(LISTOBJS))
+OBJS = src/Test/LeanCheck.o \
+       src/Test/LeanCheck/Function.o \
+       src/Test/LeanCheck/Error.o
+GHCIMPORTDIRS = src:tests
+# -dynamic is needed only for src/Test/LeanCheck/Derive.hs and tests/test-derive.hs
+GHCFLAGS = -dynamic -O2
+HADDOCKFLAGS = --no-print-missing-docs
+
+all: $(OBJS)
+
+all-all: $(ALLOBJS)
+
+test: $(patsubst %,%.test,$(TESTS)) diff-test
+
+diff-test: diff-test-tiers diff-test-funtiers $(patsubst %,%.diff-test,$(EGS))
+
+update-diff-test: update-diff-test-tiers update-diff-test-funtiers $(patsubst %,%.update-diff-test,$(EGS))
+
+%.test: %
+	./$<
+
+eg/%.diff-test: eg/%
+	./$< | diff -rud tests/diff/$<.out -
+
+eg/%.update-diff-test: eg/%
+	./$< >           tests/diff/$<.out
+
+clean: clean-hi-o clean-haddock
+	rm -f bench/tiers-colistable.hs
+	rm -f bench/tiers-listsofpairs.hs
+	rm -f bench/tiers-funlistable
+	rm -f bench/tiers-funlistable.hs
+	rm -f $(TESTS) $(BENCHS) $(EGS) mk/toplibs
+
+ghci: mk/All.ghci
+
+install:
+	@echo "use \`cabal install' instead"
+
+list-hs:
+	$(LISTHS)
+
+list-objs:
+	$(LISTOBJS)
+
+test-sdist:
+	./tests/test-sdist
+
+test-via-stack:
+	stack test
+
+legacy-test: # needs ghc-8.0 .. ghc-7.8 installed as such
+	make clean  &&  make test GHC=ghc-8.0  GHCFLAGS="-Werror -dynamic"
+	make clean  &&  make test GHC=ghc-7.10 GHCFLAGS="-Werror -dynamic"
+	make clean  &&  make test GHC=ghc-7.8  GHCFLAGS="-Werror -dynamic"
+	make clean  &&  make test
+
+legacy-test-via-cabal: # needs similarly named cabal wrappers
+	cabal clean  &&  cabal-ghc-8.0  configure  &&  cabal-ghc-7.10 test
+	cabal clean  &&  cabal-ghc-7.10 configure  &&  cabal-ghc-7.10 test
+	cabal clean  &&  cabal-ghc-7.8  configure  &&  cabal-ghc-7.8  test
+	cabal clean  &&  cabal test
+
+hlint:
+	hlint \
+	  --ignore "Use import/export shortcut" \
+	  --ignore "Redundant bracket" \
+	  .
+
+markdown:
+	pandoc README.md -o README.html
+	pandoc doc/tutorial.md -o doc/tutorial.html
+	pandoc doc/data-invariant.md -o doc/data-invariant.html
+
+haddock: doc/index.html
+
+clean-haddock:
+	rm -f doc/*.{html,css,js,png,gif} README.html
+
+upload-haddock:
+	@echo "use \`cabal upload -d' instead"
+	@echo "(but 1st: cabal install --only-dependencies --enable-documentation)"
+	@echo "(to just compile docs: cabal haddock --for-hackage)"
+	@echo "(on Arch Linux, use: cabal haddock --for-hackage --haddock-options=--optghc=-dynamic)"
+
+doc/index.html: $(ALLHS)
+	./mk/haddock-i base template-haskell | xargs \
+	haddock --html -odoc $(ALLHS) $(HADDOCKFLAGS) --title=leancheck
+	@echo 'NOTE: please ensure that there are *only* 7'
+	@echo '      undocumented functions on Test.LeanCheck'
+	@echo '      as "OPTIONS_HADDOCK prune" is active'
+	@echo '      to hide cons6...cons12'
+
+# NOTE: (very hacky!) the following target allows parallel compilation (-jN) of
+# eg and tests programs so long as they don't share dependencies _not_ stored
+# in src/ and tests/.  Runnable binaries should depend on mk/toplibs instead of
+# actual Haskell source files
+mk/toplibs: mk/Toplibs.o
+	touch mk/toplibs
+
+include mk/haskell.mk
+
+diff-test-tiers: bench/tiers
+	# simple types
+	./bench/tiers "()"               | diff -rud tests/diff/tiers.out             -
+	./bench/tiers "Int"              | diff -rud tests/diff/tiers-Int.out         -
+	./bench/tiers "Nat"              | diff -rud tests/diff/tiers-Nat.out         -
+	./bench/tiers "Integer"          | diff -rud tests/diff/tiers-Integer.out     -
+	./bench/tiers "Bool"             | diff -rud tests/diff/tiers-Bool.out        -
+	./bench/tiers "Char"             | diff -rud tests/diff/tiers-Char.out        -
+	# list s
+	./bench/tiers "[()]"             | diff -rud tests/diff/tiers-Us.out          -
+	./bench/tiers "[Int]"          6 | diff -rud tests/diff/tiers-Ints.out        -
+	./bench/tiers "[Nat]"          6 | diff -rud tests/diff/tiers-Nats.out        -
+	./bench/tiers "[Bool]"         6 | diff -rud tests/diff/tiers-Bools.out       -
+	./bench/tiers "String"         6 | diff -rud tests/diff/tiers-String.out      -
+	# pairs
+	./bench/tiers "(Int,Int)"        | diff -rud tests/diff/tiers-Int,Int.out     -
+	./bench/tiers "(Nat,Nat)"        | diff -rud tests/diff/tiers-Nat,Nat.out     -
+	./bench/tiers "(Int,Int,Int)"  6 | diff -rud tests/diff/tiers-Int,Int,Int.out -
+	./bench/tiers "(Nat,Nat,Nat)"  6 | diff -rud tests/diff/tiers-Nat,Nat,Nat.out -
+	# lists & pairs
+	./bench/tiers "[((),())]"        | diff -rud tests/diff/tiers-U,Us.out        -
+	./bench/tiers "([()],[()])"      | diff -rud tests/diff/tiers-Us,Us.out       -
+	# special lists
+	./bench/tiers "Set Bool"         | diff -rud tests/diff/tiers-SetBool.out     -
+	./bench/tiers "Set ()"           | diff -rud tests/diff/tiers-SetU.out        -
+	./bench/tiers "Set Nat"          | diff -rud tests/diff/tiers-SetNat.out      -
+	./bench/tiers "Set Nat2"         | diff -rud tests/diff/tiers-SetNat2.out     -
+	./bench/tiers "Set Nat3"         | diff -rud tests/diff/tiers-SetNat3.out     -
+	./bench/tiers "Bag Bool"         | diff -rud tests/diff/tiers-BagBool.out     -
+	./bench/tiers "Bag ()"           | diff -rud tests/diff/tiers-BagU.out        -
+	./bench/tiers "Bag Nat"          | diff -rud tests/diff/tiers-BagNat.out      -
+	./bench/tiers "Bag Nat2"         | diff -rud tests/diff/tiers-BagNat2.out     -
+	./bench/tiers "Bag Nat3"         | diff -rud tests/diff/tiers-BagNat3.out     -
+	./bench/tiers "NoDup Bool"       | diff -rud tests/diff/tiers-NoDupBool.out   -
+	./bench/tiers "NoDup ()"         | diff -rud tests/diff/tiers-NoDupU.out      -
+	./bench/tiers "NoDup Nat"        | diff -rud tests/diff/tiers-NoDupNat.out    -
+	./bench/tiers "NoDup Nat2"       | diff -rud tests/diff/tiers-NoDupNat2.out   -
+	./bench/tiers "NoDup Nat3"       | diff -rud tests/diff/tiers-NoDupNat3.out   -
+
+update-diff-test-tiers: bench/tiers
+	# simple types
+	./bench/tiers "()"               > tests/diff/tiers.out
+	./bench/tiers "Int"              > tests/diff/tiers-Int.out
+	./bench/tiers "Nat"              > tests/diff/tiers-Nat.out
+	./bench/tiers "Integer"          > tests/diff/tiers-Integer.out
+	./bench/tiers "Bool"             > tests/diff/tiers-Bool.out
+	./bench/tiers "Char"             > tests/diff/tiers-Char.out
+	# lists
+	./bench/tiers "[()]"             > tests/diff/tiers-Us.out
+	./bench/tiers "[Int]"          6 > tests/diff/tiers-Ints.out
+	./bench/tiers "[Nat]"          6 > tests/diff/tiers-Nats.out
+	./bench/tiers "[Bool]"         6 > tests/diff/tiers-Bools.out
+	./bench/tiers "String"         6 > tests/diff/tiers-String.out
+	# pairs
+	./bench/tiers "(Int,Int)"        > tests/diff/tiers-Int,Int.out
+	./bench/tiers "(Nat,Nat)"        > tests/diff/tiers-Nat,Nat.out
+	./bench/tiers "(Int,Int,Int)"  6 > tests/diff/tiers-Int,Int,Int.out
+	./bench/tiers "(Nat,Nat,Nat)"  6 > tests/diff/tiers-Nat,Nat,Nat.out
+	# lists & pairs
+	./bench/tiers "[((),())]"        > tests/diff/tiers-U,Us.out
+	./bench/tiers "([()],[()])"      > tests/diff/tiers-Us,Us.out
+	# special lists
+	./bench/tiers "Set Bool"         > tests/diff/tiers-SetBool.out
+	./bench/tiers "Set ()"           > tests/diff/tiers-SetU.out
+	./bench/tiers "Set Nat"          > tests/diff/tiers-SetNat.out
+	./bench/tiers "Set Nat2"         > tests/diff/tiers-SetNat2.out
+	./bench/tiers "Set Nat3"         > tests/diff/tiers-SetNat3.out
+	./bench/tiers "Bag Bool"         > tests/diff/tiers-BagBool.out
+	./bench/tiers "Bag ()"           > tests/diff/tiers-BagU.out
+	./bench/tiers "Bag Nat"          > tests/diff/tiers-BagNat.out
+	./bench/tiers "Bag Nat2"         > tests/diff/tiers-BagNat2.out
+	./bench/tiers "Bag Nat3"         > tests/diff/tiers-BagNat3.out
+	./bench/tiers "NoDup Bool"       > tests/diff/tiers-NoDupBool.out
+	./bench/tiers "NoDup ()"         > tests/diff/tiers-NoDupU.out
+	./bench/tiers "NoDup Nat"        > tests/diff/tiers-NoDupNat.out
+	./bench/tiers "NoDup Nat2"       > tests/diff/tiers-NoDupNat2.out
+	./bench/tiers "NoDup Nat3"       > tests/diff/tiers-NoDupNat3.out
+
+prepare-depend: bench/tiers-listsofpairs.hs \
+                bench/tiers-colistable.hs \
+                bench/tiers-funlistable.hs \
+                bench/tiers-mixed.hs
+
+TLF = "import\ Test.LeanCheck.Function"
+
+bench/tiers-listsofpairs.hs: bench/tiers.hs
+	sed -e "s/$(TLF)$$/$(TLF).Listable.ListsOfPairs\n$(TLF).Show/" $< > $@
+
+bench/tiers-colistable.hs: bench/tiers.hs
+	sed -e "s/$(TLF)$$/$(TLF).Listable.CoListable\n$(TLF).Show/" $< > $@
+
+bench/tiers-funlistable.hs: bench/tiers.hs
+	sed -e "s/$(TLF)$$/$(TLF).Listable.FunListable\n$(TLF).Show/" $< > $@
+
+bench/tiers-mixed.hs: bench/tiers.hs
+	sed -e "s/$(TLF)$$/$(TLF).Listable.Mixed\n$(TLF).Show/" $< > $@
+
+bench/tiers-colistable:   bench/tiers-colistable.hs   src/Test/LeanCheck/Function/Listable/CoListable.hs
+
+bench/tiers-listsofpairs: bench/tiers-listsofpairs.hs src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs
+
+bench/tiers-funlistable:  bench/tiers-funlistable.hs  src/Test/LeanCheck/Function/Listable/FunListable.hs
+
+bench/tiers-mixed:        bench/tiers-mixed.hs        src/Test/LeanCheck/Function/Listable/Mixed.hs
+
+diff-test-funtiers: bench/tiers-listsofpairs.diff-test \
+                    bench/tiers-funlistable.diff-test \
+                    bench/tiers-colistable.diff-test \
+                    bench/tiers-mixed.diff-test
+
+update-diff-test-funtiers: bench/tiers-listsofpairs.update-diff-test \
+                           bench/tiers-funlistable.update-diff-test \
+                           bench/tiers-colistable.update-diff-test \
+                           bench/tiers-mixed.update-diff-test
+
+bench/tiers-%.diff-test: bench/tiers-%
+	# functions
+	$< "()->()"           | diff -rud tests/diff/tiers-$*-U-U.out         -
+	$< "Bool->Bool"       | diff -rud tests/diff/tiers-$*-Bool-Bool.out   -
+	$< "Bool->()"         | diff -rud tests/diff/tiers-$*-Bool-U.out      -
+	$< "()->Bool"         | diff -rud tests/diff/tiers-$*-U-Bool.out      -
+	$< "Int->Int"       6 | diff -rud tests/diff/tiers-$*-Int-Int.out     -
+	$< "Nat->Nat"       6 | diff -rud tests/diff/tiers-$*-Nat-Nat.out     -
+	$< "()->Nat"        6 | diff -rud tests/diff/tiers-$*-U-Nat.out       -
+	$< "Nat->()"        6 | diff -rud tests/diff/tiers-$*-Nat-U.out       -
+	$< "Int->Int->Int"  4 | diff -rud tests/diff/tiers-$*-Int-Int-Int.out -
+	$< "Nat->Nat->Nat"  4 | diff -rud tests/diff/tiers-$*-Nat-Nat-Nat.out -
+	$< "(Nat,Nat)->Nat" 4 | diff -rud tests/diff/tiers-$*-Nat,Nat-Nat.out -
+	$< "Maybe Bool->Bool" | diff -rud tests/diff/tiers-$*-MBool-Bool.out  -
+	$< "Bool->Maybe Bool" | diff -rud tests/diff/tiers-$*-Bool-MBool.out  -
+	$< "Maybe Bool->Maybe Bool" | diff -rud tests/diff/tiers-$*-MBool-MBool.out -
+	# functions of lists
+	$< "[Bool]->[Bool]" 4 | diff -rud tests/diff/tiers-$*-Bools-Bools.out -
+	$< "[Nat]->[Nat]"   4 | diff -rud tests/diff/tiers-$*-Nats-Nats.out   -
+	$< "[Int]->[Int]"   4 | diff -rud tests/diff/tiers-$*-Ints-Ints.out   -
+	# more functions
+	$< "Nat2->Nat2"       | diff -rud tests/diff/tiers-$*-Nat2-Nat2.out   -
+	$< "Nat2->Nat3"       | diff -rud tests/diff/tiers-$*-Nat2-Nat3.out   -
+	$< "Nat3->Nat2"       | diff -rud tests/diff/tiers-$*-Nat3-Nat2.out   -
+	$< "Nat3->Nat3"       | diff -rud tests/diff/tiers-$*-Nat3-Nat3.out   -
+
+bench/tiers-%.update-diff-test: bench/tiers-%
+	# functions
+	$< "()->()"           > tests/diff/tiers-$*-U-U.out
+	$< "Bool->Bool"       > tests/diff/tiers-$*-Bool-Bool.out
+	$< "Bool->()"         > tests/diff/tiers-$*-Bool-U.out
+	$< "()->Bool"         > tests/diff/tiers-$*-U-Bool.out
+	$< "Int->Int"       6 > tests/diff/tiers-$*-Int-Int.out
+	$< "Nat->Nat"       6 > tests/diff/tiers-$*-Nat-Nat.out
+	$< "Nat->()"        6 > tests/diff/tiers-$*-Nat-U.out
+	$< "()->Nat"        6 > tests/diff/tiers-$*-U-Nat.out
+	$< "Int->Int->Int"  4 > tests/diff/tiers-$*-Int-Int-Int.out
+	$< "Nat->Nat->Nat"  4 > tests/diff/tiers-$*-Nat-Nat-Nat.out
+	$< "(Nat,Nat)->Nat" 4 > tests/diff/tiers-$*-Nat,Nat-Nat.out
+	$< "Maybe Bool->Bool" > tests/diff/tiers-$*-MBool-Bool.out
+	$< "Bool->Maybe Bool" > tests/diff/tiers-$*-Bool-MBool.out
+	$< "Maybe Bool->Maybe Bool" > tests/diff/tiers-$*-MBool-MBool.out
+	# functions of lists
+	$< "[()]->[()]"     4 > tests/diff/tiers-$*-Us-Us.out
+	$< "[Bool]->[Bool]" 4 > tests/diff/tiers-$*-Bools-Bools.out
+	$< "[Nat]->[Nat]"   4 > tests/diff/tiers-$*-Nats-Nats.out
+	$< "[Int]->[Int]"   4 > tests/diff/tiers-$*-Ints-Ints.out
+	# more functions
+	$< "Nat2->Nat2"       > tests/diff/tiers-$*-Nat2-Nat2.out
+	$< "Nat2->Nat3"       > tests/diff/tiers-$*-Nat2-Nat3.out
+	$< "Nat3->Nat2"       > tests/diff/tiers-$*-Nat3-Nat2.out
+	$< "Nat3->Nat3"       > tests/diff/tiers-$*-Nat3-Nat3.out
diff --git a/TODO.md b/TODO.md
--- a/TODO.md
+++ b/TODO.md
@@ -26,21 +26,23 @@
 other improvements
 ------------------
 
-* On `bench/tiers`, print if the enumeration has repetitions
-  (import `Function.Eq` for that)
+* implement `classStatsT` and `conditionStatsT`
 
-* Modularize the `Derive` module by implementing
-  `deriveTiers` and `deriveList`.
 
-* Port `discardLaterT`, `discardT` and `nubT` from Speculate here.
-  See `fitspec/eg/alga` for details.
+later
+-----
 
-* add `classify` function to measure distribution of data:
-  something like:
+* implement stub `Test.LeanCheck.Function.*` modules;
 
-    classifyBy :: (a -> b) -> [a] -> [(b,a)]
-	countsBy :: (a -> b) -> [a] -> [(b,Int)]
+* somehow, improve the improve the enumeration of `Char`s:
 
+   list = [ ['a'], ['b','c'], ['d','e','f'], ... ]
+      ||| [ [' '], ['\n'] ]
+      ||| [ ['0'], ['1'], ['2'], ...]
+      ||| ...
+     where
+     ||| is something that interleaves tiers of different lists...
+
 * further improve showing of functions, indead of showing:
 
     \p q -> case (p,q) of
@@ -53,57 +55,18 @@
 
     \p q -> case (p,q) of
             (True,False)  -> True
-			_             -> False
+            _             -> False
 
   Some thinking may have to be done for:
 
     \x y -> case (x,y) of
-	        (0,0) -> 0
-			(0,1) -> 0
-			(1,1) -> 1
-			(1,0) -> 1
-			(0,2) -> 0
-			(1,1) -> 1
-			(2,0) -> 1
-			...
+            (0,0) -> 0
+            (0,1) -> 0
+            (1,1) -> 1
+            (1,0) -> 1
+            (0,2) -> 0
+            (1,1) -> 1
+            (2,0) -> 1
+            ...
 
   Where: `const (const 1) ->/ [(1,const 0)]`.
-
-
-* idea for restructuring Function modules (all under `Test.LeanCheck.Function`):
-
-	Show                  -- exports just Show (a -> b)
-	Listable              -- exports just Listable (a -> b), based on LoP
-
-	Listable.ListsOfPairs -- exports just Listable (a -> b), based on LoP
-	Listable.CoListable   -- exports just Listable (a -> b), based on CoL
-
-	CoListable            -- exports just the CoListable typeclass
-	ListsOfPairs          -- exports just the LoP auxiliary functions
-	ShowFunction          -- exports just the ShowFunction typeclass
-
-  This structure seems somehow more clear to me.  It also allows, in the future, adding:
-
-	module Test.LeanCheck.Function.Listable.Mixed where
-	import Test.LeanCheck.Function.CoListable   as CoL
-	import Test.LeanCheck.Function.ListsOfPairs as LoP
-	instance Listable (a -> b) where
-	  tiers = LoP.functions tiers tiers \/ CoL.cotiers tiers
-
-  so that the user gets an enumeration of functions with repetitions, but using
-  a mixed strategy for generation of values.
-
-
-later
------
-
-* implement stub `Test.LeanCheck.Function.*` modules;
-
-* somehow, improve the improve the enumeration of `Char`s:
-
-   list = [ ['a'], ['b','c'], ['d','e','f'], ... ]
-      ||| [ [' '], ['\n'] ]
-      ||| [ ['0'], ['1'], ['2'], ...]
-      ||| ...
-     where
-     ||| is something that interleaves tiers of different lists...
diff --git a/bench/tiers.hs b/bench/tiers.hs
new file mode 100644
--- /dev/null
+++ b/bench/tiers.hs
@@ -0,0 +1,153 @@
+-- tiers.hs -- prints tiers of values up to a certain point
+--
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test.LeanCheck
+import Test.LeanCheck.Utils.Types
+import Test.LeanCheck.Function
+import Test.LeanCheck.Function.Eq
+import Test.LeanCheck.Tiers (showTiers, finite)
+import System.Environment
+import Data.List (intercalate, nub)
+import Data.Ratio ((%))
+
+dropEmptyTiersTail :: [[a]] -> [[a]]
+dropEmptyTiersTail ([]:[]:[]: []:[]:[]: _) = []
+dropEmptyTiersTail (xs:xss) = xs:dropEmptyTiersTail xss
+dropEmptyTiersTail []     = []
+
+lengthT :: [[a]] -> Maybe Int
+lengthT xss | finite xss' = Just . length $ concat xss'
+            | otherwise   = Nothing
+  where xss' = dropEmptyTiersTail xss
+
+allUnique :: Eq a => [a] -> Bool
+allUnique [] = True
+allUnique (x:xs) = x `notElem` xs
+                && allUnique (filter (/= x) xs)
+
+countRepetitions :: Eq a => [a] -> Int
+countRepetitions xs = length xs - length (nub xs)
+
+ratioRepetitions :: Eq a => [a] -> Rational
+ratioRepetitions [] = 0
+ratioRepetitions xs = fromIntegral (countRepetitions xs) % fromIntegral (length xs)
+
+showLengthT :: [[a]] -> String
+showLengthT xss = case lengthT xss of
+                    Nothing -> "Infinity"
+                    Just x  -> show x
+
+showDotsLongerThan :: Show a => Int -> [a] -> String
+showDotsLongerThan n xs = "["
+                       ++ intercalate "," (dotsLongerThan n $ map show xs)
+                       ++ "]"
+  where
+  dotsLongerThan n xs = take n xs ++ ["..." | not . null $ drop n xs]
+
+printTiers :: Show a => Int -> [[a]] -> IO ()
+printTiers n = putStrLn . init . unlines . map ("  " ++) . lines . showTiers n
+
+put :: (Show a, Eq a, Listable a) => String -> Int -> a -> IO ()
+put t n a = do
+  putStrLn $ "tiers :: [" ++ t ++ "]  ="
+  printTiers n $ tiers `asTypeOf` [[a]]
+  putStrLn $ ""
+  putStrLn $ "map length (tiers :: [[ " ++ t ++ " ]])  =  "
+          ++ showDotsLongerThan n (map length $ tiers `asTypeOf` [[a]])
+  putStrLn $ ""
+  putStrLn $ "length (list :: [ " ++ t ++ " ])  =  "
+          ++ showLengthT (tiers `asTypeOf` [[a]])
+  putStrLn $ ""
+  putStrLn $ "allUnique (list :: [ " ++ t ++ " ])  =  "
+          ++ show (allUnique . concat . take n $ tiers `asTypeOf` [[a]])
+  putStrLn $ ""
+  putStrLn $ "ratioRepetitions (list :: [ " ++ t ++ " ])  =  "
+          ++ show (ratioRepetitions . concat . take n $ tiers `asTypeOf` [[a]])
+
+u :: a
+u = undefined
+
+main :: IO ()
+main = do
+  as <- getArgs
+  let (t,n) = case as of
+                []    -> ("Int", 12)
+                [t]   -> (t,     12)
+                [t,n] -> (t, read n)
+  case t of
+    -- simple types
+    "()"               -> put t n (u :: ()                   )
+    "Int"              -> put t n (u :: Int                  )
+    "Nat"              -> put t n (u :: Nat                  )
+    "Integer"          -> put t n (u :: Integer              )
+    "Bool"             -> put t n (u :: Bool                 )
+    "Char"             -> put t n (u :: Char                 )
+    -- lists
+    "[()]"             -> put t n (u :: [()]                 )
+    "[Int]"            -> put t n (u :: [Int]                )
+    "[Nat]"            -> put t n (u :: [Nat]                )
+    "[Integer]"        -> put t n (u :: [Integer]            )
+    "[Bool]"           -> put t n (u :: [Bool]               )
+    "[Char]"           -> put t n (u :: [Char]               )
+    "String"           -> put t n (u :: String               )
+    -- pairs
+    "((),())"          -> put t n (u :: ((),())              )
+    "(Int,Int)"        -> put t n (u :: (Int,Int)            )
+    "(Nat,Nat)"        -> put t n (u :: (Nat,Nat)            )
+    "(Bool,Bool)"      -> put t n (u :: (Bool,Bool)          )
+    "(Bool,Int)"       -> put t n (u :: (Bool,Int)           )
+    "(Int,Bool)"       -> put t n (u :: (Int,Bool)           )
+    "(Int,Int,Int)"    -> put t n (u :: (Int,Int,Int)        )
+    "(Nat,Nat,Nat)"    -> put t n (u :: (Nat,Nat,Nat)        )
+    -- lists & pairs
+    "[((),())]"        -> put t n (u :: [((),())]            )
+    "([()],[()])"      -> put t n (u :: ([()],[()])          )
+    "([Bool],[Bool])"  -> put t n (u :: ([Bool],[Bool])      )
+    "([Int],[Int])"    -> put t n (u :: ([Int],[Int])        )
+    -- functions
+    "()->()"           -> put t n (u :: () -> ()             )
+    "()->Bool"         -> put t n (u :: () -> Bool           )
+    "Bool->()"         -> put t n (u :: Bool -> ()           )
+    "Bool->Bool"       -> put t n (u :: Bool -> Bool         )
+    "Bool->Bool->Bool" -> put t n (u :: Bool -> Bool -> Bool )
+    "Int->Int"         -> put t n (u :: Int -> Int           )
+    "Int->Int->Int"    -> put t n (u :: Int -> Int -> Int    )
+    "()->Nat"          -> put t n (u :: () -> Nat            )
+    "Nat->()"          -> put t n (u :: Nat -> ()            )
+    "Nat->Nat"         -> put t n (u :: Nat -> Nat           )
+    "Nat->Nat->Nat"    -> put t n (u :: Nat -> Nat -> Nat    )
+    "(Nat,Nat)->Nat"   -> put t n (u :: (Nat,Nat) -> Nat     )
+    "Bool->Maybe Bool" -> put t n (u :: Bool -> Maybe Bool   )
+    "Maybe Bool->Bool" -> put t n (u :: Maybe Bool -> Bool   )
+    "Maybe Bool->Maybe Bool" -> put t n (u :: Maybe Bool -> Maybe Bool)
+    -- functions with lists
+    "[()]->[()]"       -> put t n (u :: [()] -> [()]         )
+    "[Bool]->[Bool]"   -> put t n (u :: [Bool] -> [Bool]     )
+    "[Int]->[Int]"     -> put t n (u :: [Int] -> [Int]       )
+    "[Nat]->[Nat]"     -> put t n (u :: [Nat] -> [Nat]       )
+    -- more functions
+    "Nat2->()"         -> put t n (u :: Nat2 -> ()           )
+    "()->Nat2"         -> put t n (u :: () -> Nat2           )
+    "Nat2->Nat2"       -> put t n (u :: Nat2 -> Nat2         )
+    "Nat2->Nat3"       -> put t n (u :: Nat2 -> Nat3         )
+    "Nat3->Nat2"       -> put t n (u :: Nat3 -> Nat2         )
+    "Nat3->Nat3"       -> put t n (u :: Nat3 -> Nat3         )
+    -- special lists
+    "Set Bool"         -> put t n (u :: Set Bool             )
+    "Set ()"           -> put t n (u :: Set ()               )
+    "Set Nat"          -> put t n (u :: Set Nat              )
+    "Set Nat2"         -> put t n (u :: Set Nat2             )
+    "Set Nat3"         -> put t n (u :: Set Nat3             )
+    "Bag Bool"         -> put t n (u :: Bag Bool             )
+    "Bag ()"           -> put t n (u :: Bag ()               )
+    "Bag Nat"          -> put t n (u :: Bag Nat              )
+    "Bag Nat2"         -> put t n (u :: Bag Nat2             )
+    "Bag Nat3"         -> put t n (u :: Bag Nat3             )
+    "NoDup Bool"       -> put t n (u :: NoDup Bool           )
+    "NoDup ()"         -> put t n (u :: NoDup ()             )
+    "NoDup Nat"        -> put t n (u :: NoDup Nat            )
+    "NoDup Nat2"       -> put t n (u :: NoDup Nat2           )
+    "NoDup Nat3"       -> put t n (u :: NoDup Nat3           )
+    -- unhandled
+    _                  -> putStrLn $ "unknown/unhandled type `" ++ t ++ "'"
diff --git a/eg/higher-order.hs b/eg/higher-order.hs
new file mode 100644
--- /dev/null
+++ b/eg/higher-order.hs
@@ -0,0 +1,20 @@
+import Test.LeanCheck
+import Test.LeanCheck.Function
+
+type A = Int
+
+prop_foldlFoldr :: (A -> A -> A) -> A -> [A] -> Bool
+prop_foldlFoldr f z xs  =  foldr f z xs == foldl f z xs
+
+prop_foldl1Foldr1Reverse :: (A -> A -> A) -> [A] -> Bool
+prop_foldl1Foldr1Reverse f xs  =
+  not (null xs) ==> foldl1 f xs ==  foldr1 f (reverse xs)
+
+prop_mapFilter :: (A -> A) -> (A -> Bool) -> [A] -> Bool
+prop_mapFilter f p xs  =  filter p (map f xs) == map f (filter p xs)
+
+main :: IO ()
+main = do
+  check prop_foldlFoldr
+  check prop_foldl1Foldr1Reverse
+  check prop_mapFilter
diff --git a/eg/overflow.hs b/eg/overflow.hs
new file mode 100644
--- /dev/null
+++ b/eg/overflow.hs
@@ -0,0 +1,52 @@
+-- Example taken from Lee Pike's paper on SmartCheck:
+-- https://github.com/leepike/SmartCheck/blob/master/paper/paper.pdf
+--
+-- An enumerative testing library, using a standard enumeration for integers,
+-- won't be able to find a counter-example.
+--
+-- However, if we tweak the enumeration to include extremely large integers
+-- (32767, 32766, 32765...) intercalated with extremely small integers a
+-- counter-example is found quickly.
+--
+-- See the 'X' type from "Test.LeanCheck.Utils.Types" for more details.
+--
+-- The technque shown here could be applied in other enumerative property-based
+-- testing tools.
+import Test.LeanCheck
+import Test.LeanCheck.Utils
+import Data.Int
+
+type I  =  [Int16]
+data T  =  T I I I I I
+  deriving Show
+
+toList :: T -> [[Int16]]
+toList (T i j k l m) = [i,j,k,l,m]
+
+pre :: T -> Bool
+pre t  =  all ((< 256) . sum) (toList t)
+
+post :: T -> Bool
+post t  =  (sum . concat) (toList t) < 5 * 256
+
+prop :: T -> Bool
+prop t  =  pre t ==> post t
+
+instance Listable Int16 where
+  list = map unX list
+
+instance Listable T where
+  tiers = cons5 T
+
+{-
+-- In case we start providing a default Listable instance for Int16 with a
+-- regular enuemration.  We can use the following Listable T instance.
+instance Listable T where
+  tiers = cons5 makeT
+    where
+    makeT (Xs i) (Xs j) (Xs k) (Xs l) (Xs m) = T i j k l m
+-}
+
+main :: IO ()
+main = do
+  checkFor 10000 $ prop
diff --git a/eg/test-bool.hs b/eg/test-bool.hs
new file mode 100644
--- /dev/null
+++ b/eg/test-bool.hs
@@ -0,0 +1,19 @@
+-- test-bool.hs -- example program, testing Bool fns using LeanCheck
+--
+-- Copyright (c) 2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test.LeanCheck
+import Test.LeanCheck.Function
+import Test.LeanCheck.Utils
+
+main :: IO ()
+main = do
+  putStrLn "not . not === id";  check $ identity (not . not)
+  putStrLn "(&&) commutes";     check $ commutative (&&)
+  putStrLn "(||) commutes";     check $ commutative (||)
+
+  putStrLn "\nAll boolean operators are commutative (wrong)."
+  check $ \(&|) -> commutative ((&|) :: Bool -> Bool -> Bool)
+
+  putStrLn "\nAll boolean operators are associative (wrong)."
+  check $ \(&|) -> associative ((&|) :: Bool -> Bool -> Bool)
diff --git a/eg/test-list.hs b/eg/test-list.hs
new file mode 100644
--- /dev/null
+++ b/eg/test-list.hs
@@ -0,0 +1,13 @@
+-- test-list.hs -- example program, testing Data.List using LeanCheck
+--
+-- Copyright (c) 2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test.LeanCheck
+import Data.List
+
+main :: IO ()
+main = do
+  -- three wrong properties about Data.List:
+  check $ \xs ys -> xs `union` ys == ys `union` (xs :: [Int])
+  check $ \xs -> [head xs] == take 1 (xs :: [Int])
+  check $ \xs -> head (sort xs :: [Int]) == minimum xs
diff --git a/eg/test-sort.hs b/eg/test-sort.hs
new file mode 100644
--- /dev/null
+++ b/eg/test-sort.hs
@@ -0,0 +1,30 @@
+-- test-sort.hs -- example program, testing sort using LeanCheck
+--
+-- Copyright (c) 2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test.LeanCheck
+
+-- a faulty sort --
+sort :: Ord a => [a] -> [a]
+sort []      =  []
+sort (x:xs)  =  sort (filter (< x) xs)
+             ++ [x]
+             ++ sort (filter (> x) xs)
+
+-- some properties about it --
+prop_sortOrdered :: Ord a => [a] -> Bool
+prop_sortOrdered xs = ordered (sort xs)
+  where
+  ordered (x:y:xs)  =  x <= y && ordered (y:xs)
+  ordered _         =  True
+
+prop_sortCount :: Ord a => a -> [a] -> Bool
+prop_sortCount x xs = count x (sort xs) == count x xs
+  where
+  count x = length . filter (== x)
+
+main :: IO ()
+main = do
+  check $ (prop_sortOrdered :: [Int] -> Bool)
+  check $ (prop_sortCount :: Int -> [Int] -> Bool)
+  check $ \xs -> sort (sort xs :: [Int]) == sort xs
diff --git a/leancheck.cabal b/leancheck.cabal
--- a/leancheck.cabal
+++ b/leancheck.cabal
@@ -11,7 +11,7 @@
 -- this cabal file too complicated.  -- Rudy
 
 name:                leancheck
-version:             0.6.7
+version:             0.7.0
 synopsis:            Cholesterol-free property-based testing
 description:
   LeanCheck is a simple enumerative property-based testing library.
@@ -40,7 +40,26 @@
                , TODO.md
                , doc/data-invariant.md
                , doc/tutorial.md
-tested-with: GHC==8.0, GHC==7.10, GHC==7.8, GHC==7.6, GHC==7.4
+extra-source-files: .gitignore
+                  , eg/test-bool.hs
+                  , eg/test-list.hs
+                  , eg/test-sort.hs
+                  , eg/overflow.hs
+                  , eg/higher-order.hs
+                  , bench/tiers.hs
+                  , .travis.yml
+                  , stack.yaml
+                  , tests/test-sdist
+                  , Makefile
+                  , mk/haskell.mk
+                  , mk/depend.mk
+                  , mk/ghcdeps
+                  , mk/haddock-i
+                  , mk/All.hs
+                  , mk/Toplibs.hs
+                  , tests/diff/*.out
+                  , tests/diff/eg/*.out
+tested-with: GHC==8.2, GHC==8.0, GHC==7.10, GHC==7.8, GHC==7.6, GHC==7.4
 
 
 source-repository head
@@ -50,7 +69,7 @@
 source-repository this
   type:            git
   location:        https://github.com/rudymatela/leancheck
-  tag:             v0.6.7
+  tag:             v0.7.0
 
 library
   exposed-modules: Test.LeanCheck
@@ -64,13 +83,18 @@
                  , Test.LeanCheck.Utils.Types
                  , Test.LeanCheck.Utils.TypeBinding
                  , Test.LeanCheck.Utils.Operators
+                 , Test.LeanCheck.Stats
                  , Test.LeanCheck.Function
-                 , Test.LeanCheck.Function.ListsOfPairs
-                 , Test.LeanCheck.Function.FunListable
-                 , Test.LeanCheck.Function.CoListable
                  , Test.LeanCheck.Function.Eq
-                 , Test.LeanCheck.Function.Periodic
                  , Test.LeanCheck.Function.Show
+                 , Test.LeanCheck.Function.Listable
+                 , Test.LeanCheck.Function.Listable.ListsOfPairs
+                 , Test.LeanCheck.Function.Listable.FunListable
+                 , Test.LeanCheck.Function.Listable.CoListable
+                 , Test.LeanCheck.Function.Listable.Periodic
+                 , Test.LeanCheck.Function.Listable.Mixed
+                 , Test.LeanCheck.Function.ListsOfPairs
+                 , Test.LeanCheck.Function.CoListable
                  , Test.LeanCheck.Function.ShowFunction
   hs-source-dirs:      src
   build-depends:       base >= 4 && < 5, template-haskell
@@ -119,6 +143,38 @@
 test-suite error
   type:                exitcode-stdio-1.0
   main-is:             test-error.hs
+  other-modules:       Test
+  hs-source-dirs:      tests
+  build-depends:       base >= 4 && < 5, leancheck
+  default-language:    Haskell2010
+
+test-suite io
+  type:                exitcode-stdio-1.0
+  main-is:             test-io.hs
+  other-modules:       Test
+  hs-source-dirs:      tests
+  build-depends:       base >= 4 && < 5, leancheck
+  default-language:    Haskell2010
+
+test-suite fun
+  type:                exitcode-stdio-1.0
+  main-is:             test-fun.hs
+  other-modules:       Test
+  hs-source-dirs:      tests
+  build-depends:       base >= 4 && < 5, leancheck
+  default-language:    Haskell2010
+
+test-suite funshow
+  type:                exitcode-stdio-1.0
+  main-is:             test-funshow.hs
+  other-modules:       Test
+  hs-source-dirs:      tests
+  build-depends:       base >= 4 && < 5, leancheck
+  default-language:    Haskell2010
+
+test-suite stats
+  type:                exitcode-stdio-1.0
+  main-is:             test-stats.hs
   other-modules:       Test
   hs-source-dirs:      tests
   build-depends:       base >= 4 && < 5, leancheck
diff --git a/mk/All.hs b/mk/All.hs
new file mode 100644
--- /dev/null
+++ b/mk/All.hs
@@ -0,0 +1,14 @@
+module All
+  ( module Test.LeanCheck
+  , module Test.LeanCheck.Core
+  , module Test.LeanCheck.Basic
+  , module Test.LeanCheck.Utils
+  , module Test.LeanCheck.Tiers
+  )
+where
+
+import Test.LeanCheck
+import Test.LeanCheck.Core
+import Test.LeanCheck.Basic
+import Test.LeanCheck.Utils
+import Test.LeanCheck.Tiers
diff --git a/mk/Toplibs.hs b/mk/Toplibs.hs
new file mode 100644
--- /dev/null
+++ b/mk/Toplibs.hs
@@ -0,0 +1,7 @@
+-- Using ghc --make in this module triggers compilation of every library.
+module Toplibs () where
+
+import Test.LeanCheck ()
+import Test.LeanCheck.Utils ()
+import Test.LeanCheck.Error ()
+import Test.LeanCheck.Function ()
diff --git a/mk/depend.mk b/mk/depend.mk
new file mode 100644
--- /dev/null
+++ b/mk/depend.mk
@@ -0,0 +1,590 @@
+bench/tiers: \
+  bench/tiers.hs \
+  mk/toplibs
+bench/tiers-colistable: \
+  bench/tiers-colistable.hs \
+  mk/toplibs
+bench/tiers-colistable.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function/Listable/CoListable.hs \
+  src/Test/LeanCheck/Function/Eq.hs \
+  src/Test/LeanCheck/Function/CoListable.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  bench/tiers-colistable.hs
+bench/tiers-funlistable: \
+  bench/tiers-funlistable.hs \
+  mk/toplibs
+bench/tiers-funlistable.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function/Listable/FunListable.hs \
+  src/Test/LeanCheck/Function/Eq.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  bench/tiers-funlistable.hs
+bench/tiers-listsofpairs: \
+  bench/tiers-listsofpairs.hs \
+  mk/toplibs
+bench/tiers-listsofpairs.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Eq.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  bench/tiers-listsofpairs.hs
+bench/tiers-mixed: \
+  bench/tiers-mixed.hs \
+  mk/toplibs
+bench/tiers-mixed.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable/Mixed.hs \
+  src/Test/LeanCheck/Function/Eq.hs \
+  src/Test/LeanCheck/Function/CoListable.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  bench/tiers-mixed.hs
+bench/tiers.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Eq.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  bench/tiers.hs
+eg/higher-order: \
+  eg/higher-order.hs \
+  mk/toplibs
+eg/higher-order.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  eg/higher-order.hs
+eg/overflow: \
+  eg/overflow.hs \
+  mk/toplibs
+eg/overflow.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  eg/overflow.hs
+eg/test-bool: \
+  eg/test-bool.hs \
+  mk/toplibs
+eg/test-bool.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  eg/test-bool.hs
+eg/test-list: \
+  eg/test-list.hs \
+  mk/toplibs
+eg/test-list.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  eg/test-list.hs
+eg/test-sort: \
+  eg/test-sort.hs \
+  mk/toplibs
+eg/test-sort.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  eg/test-sort.hs
+mk/All.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  mk/All.hs
+mk/Toplibs.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs \
+  mk/Toplibs.hs
+src/Test/LeanCheck/Basic.o: \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Core.o: \
+  src/Test/LeanCheck/Core.hs
+src/Test/LeanCheck/Derive.o: \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Error.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/CoListable.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/CoListable.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Eq.o: \
+  src/Test/LeanCheck/Function/Eq.hs \
+  src/Test/LeanCheck/Core.hs
+src/Test/LeanCheck/Function/Listable/CoListable.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Listable/CoListable.hs \
+  src/Test/LeanCheck/Function/CoListable.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Listable/FunListable.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Listable/FunListable.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Listable/ListsOfPairs.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Listable/Mixed.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable/Mixed.hs \
+  src/Test/LeanCheck/Function/CoListable.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Listable.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Listable/Periodic.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Listable/Periodic.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/ListsOfPairs.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Function.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Function/Listable.hs \
+  src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/ShowFunction.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Function/Show.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/IO.o: \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Core.hs
+src/Test/LeanCheck.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Stats.o: \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck/Core.hs
+src/Test/LeanCheck/Tiers.o: \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Utils/Operators.o: \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Utils.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Utils/TypeBinding.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+src/Test/LeanCheck/Utils/Types.o: \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-derive.o: \
+  tests/Test.hs \
+  tests/test-derive.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-derive: \
+  tests/Test.hs \
+  tests/test-derive.hs \
+  mk/toplibs
+tests/test-error.o: \
+  tests/Test.hs \
+  tests/test-error.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-error: \
+  tests/Test.hs \
+  tests/test-error.hs \
+  mk/toplibs
+tests/test-fun.o: \
+  tests/Test.hs \
+  tests/test-fun.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/ListsOfPairs.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-funshow.o: \
+  tests/Test.hs \
+  tests/test-funshow.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Function/Show.hs \
+  src/Test/LeanCheck/Function/ShowFunction.hs \
+  src/Test/LeanCheck/Error.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-funshow: \
+  tests/Test.hs \
+  tests/test-funshow.hs \
+  mk/toplibs
+tests/test-fun: \
+  tests/Test.hs \
+  tests/test-fun.hs \
+  mk/toplibs
+tests/test-io.o: \
+  tests/Test.hs \
+  tests/test-io.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-io: \
+  tests/Test.hs \
+  tests/test-io.hs \
+  mk/toplibs
+tests/test-operators.o: \
+  tests/Test.hs \
+  tests/test-operators.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-operators: \
+  tests/Test.hs \
+  tests/test-operators.hs \
+  mk/toplibs
+tests/Test.o: \
+  tests/Test.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test.o: \
+  tests/Test.hs \
+  tests/test.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-stats.o: \
+  tests/test-stats.hs \
+  tests/Test.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-stats: \
+  tests/test-stats.hs \
+  tests/Test.hs \
+  mk/toplibs
+tests/test: \
+  tests/Test.hs \
+  tests/test.hs \
+  mk/toplibs
+tests/test-tiers.o: \
+  tests/test-tiers.hs \
+  tests/Test.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Utils/TypeBinding.hs \
+  src/Test/LeanCheck/Utils.hs \
+  src/Test/LeanCheck/Utils/Operators.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck/Stats.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-tiers: \
+  tests/test-tiers.hs \
+  tests/Test.hs \
+  mk/toplibs
+tests/test-types.o: \
+  tests/test-types.hs \
+  tests/Test.hs \
+  src/Test/LeanCheck/Utils/Types.hs \
+  src/Test/LeanCheck/Tiers.hs \
+  src/Test/LeanCheck.hs \
+  src/Test/LeanCheck/IO.hs \
+  src/Test/LeanCheck/Derive.hs \
+  src/Test/LeanCheck/Core.hs \
+  src/Test/LeanCheck/Basic.hs
+tests/test-types: \
+  tests/test-types.hs \
+  tests/Test.hs \
+  mk/toplibs
diff --git a/mk/ghcdeps b/mk/ghcdeps
new file mode 100644
--- /dev/null
+++ b/mk/ghcdeps
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# ghcdeps: generate Haskell make dependencies for compiling with GHC.
+#
+# Copyright (c) 2015-2017 Rudy Matela.
+# Distributed under the 3-Clause BSD licence.
+#
+# From a list of files provided on standard input,
+# generate flat make dependencies.
+#
+# Transitive relations are repeated.
+#
+# Usage:
+#   $ ghcdeps -isomedir:someother <<LIST
+#   program.hs
+#   Library.hs
+#   Path/To/Library.hs
+#   LIST
+#   program: ...
+#   Library.o: ...
+#   Path/To/Library.o: ...
+#
+# Or:
+#   $ find -name \*.hs -o -name \*.lhs | ghcdeps [GHCFLAGS]
+#   ...
+#
+# Note that when using find, you have to remember to exclude unecessary files,
+# e.g.:  dist, Setup.hs
+#
+# Yes, this is hacky.  But hey, it works.
+while read fn
+do
+	ghc "$@" -dep-suffix=. -dep-makefile=tmp.mk -M "$fn" ||
+	exit 1
+	deps="`cat tmp.mk |
+	       grep "hs$" |
+	       sort |
+	       sed -e "s/.*: //" |
+	       tac |
+	       tr '\n' ' ' |
+	       sed -e "s/ $//"`"
+	obj=`echo $fn | sed -e 's,^\./,,;s/\.hs$/.o/'`
+	bin=`echo $fn | sed -e 's,^\./,,;s/\.hs$//'`
+	echo "$obj: $deps"
+	grep -q "main" "$fn" && echo "$bin: `echo $deps | sed -e 's|[^ ]*src[^ ]*||g'` mk/toplibs"
+	rm -f tmp.mk
+done |
+sort |
+sed -e 's,  *, \\\n  ,g'
diff --git a/mk/haddock-i b/mk/haddock-i
new file mode 100644
--- /dev/null
+++ b/mk/haddock-i
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# haddock-i: list haddock's -i parameters.
+#
+# Copyright (c) 2015-2017 Rudy Matela.
+# Distributed under the 3-Clause BSD licence.
+#
+# $ haddock-i <package1> <package2> ... <packageN>
+#
+# will print -i parameters necessary for haddock to link to Haddock
+# documentation installed on your system, so you can:
+#
+# $ haddock-i base template-haskell | xargs haddock <files>
+errxit() {
+	echo "$@" > /dev/stderr
+	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/"
diff --git a/mk/haskell.mk b/mk/haskell.mk
new file mode 100644
--- /dev/null
+++ b/mk/haskell.mk
@@ -0,0 +1,65 @@
+# Implicit rules for compiling Haskell code.
+#
+# Copyright (c) 2015-2017 Rudy Matela.
+# Distributed under the 3-Clause BSD licence.
+#
+# You can optionally configure the "Configuration variables" below in your main
+# makefile, e.g.:
+#
+#   GHCIMPORTDIRS = path/to/dir:path/to/another/dir
+#   GHCFLAGS = -O2 -dynamic
+#   GHC = ghc-7.6
+#   include haskell.mk
+
+
+
+# Configuration variables
+
+# GHC Parameters
+GHCIMPORTDIRS ?=
+GHCFLAGS ?=
+GHC ?= ghc
+
+# Makefile where to keep the dependencies
+DEPMK ?= mk/depend.mk
+
+# By default, excludes dist and Setup.hs, so that a Makefile can coexist nicely
+# in a cabalized project.  Also excludes .stack-work.
+HSS ?= $(shell find \( -path "./dist" -o -path "./Setup.hs" -o -path "./.stack-work" \) -prune \
+                 -o -name "*.*hs" -print)
+# You can override HSS in your main Makefile
+# It should include all Haskell sources to be compiled by different targets
+# (even those that are not a dependency to all)
+# It will be used to generate dependencies and for cleaning objects
+
+
+
+# Implicit rules
+GHCCMD = $(GHC) -i$(GHCIMPORTDIRS) $(GHCFLAGS)
+
+%.hi %.o: %.hs
+	$(GHCCMD) $< && touch $@
+
+%: %.hs
+	$(GHCCMD) $< && touch $@
+
+.PHONY: %.ghci
+%.ghci: %.hs
+	$(GHCCMD) -O0 --interactive $<
+
+
+# Cleaning rule (add as a clean dependency)
+.PHONY: clean-hi-o
+clean-hi-o:
+	find $(HSS) | sed -e 's/hs$$/o/'      | xargs rm -f
+	find $(HSS) | sed -e 's/hs$$/hi/'     | xargs rm -f
+	find $(HSS) | sed -e 's/hs$$/dyn_o/'  | xargs rm -f
+	find $(HSS) | sed -e 's/hs$$/dyn_hi/' | xargs rm -f
+
+
+# Update dependency file
+.PHONY: depend
+depend:
+	find $(HSS) | ./mk/ghcdeps -i$(GHCIMPORTDIRS) $(GHCFLAGS) > $(DEPMK)
+
+include $(DEPMK)
diff --git a/src/Test/LeanCheck/Derive.hs b/src/Test/LeanCheck/Derive.hs
--- a/src/Test/LeanCheck/Derive.hs
+++ b/src/Test/LeanCheck/Derive.hs
@@ -19,6 +19,8 @@
   ( deriveListable
   , deriveListableIfNeeded
   , deriveListableCascading
+  , deriveTiers
+  , deriveList
   )
 where
 
@@ -86,19 +88,26 @@
 #endif
 #if __GLASGOW_HASKELL__ >= 708
   cxt |=>| [d| instance Listable $(return nt)
-                 where tiers = $(conse =<< typeConstructors t) |]
+                 where tiers = $(deriveTiers t) |]
 #else
-  tiersE <- conse =<< typeConstructors t
+  tiersE <- deriveTiers t
   return [ InstanceD
              cxt
              (AppT (ConT ''Listable) nt)
              [ValD (VarP 'tiers) (NormalB tiersE) []]
          ]
 #endif
-  where cone n as = do
-          (Just consN) <- lookupValueName $ "cons" ++ show (length as)
-          [| $(varE consN) $(conE n) |]
-        conse = foldr1 (\e1 e2 -> [| $e1 \/ $e2 |]) . map (uncurry cone)
+
+deriveTiers :: Name -> ExpQ
+deriveTiers t = conse =<< typeConstructors t
+  where
+  cone n as = do
+    (Just consN) <- lookupValueName $ "cons" ++ show (length as)
+    [| $(varE consN) $(conE n) |]
+  conse = foldr1 (\e1 e2 -> [| $e1 \/ $e2 |]) . map (uncurry cone)
+
+deriveList :: Name -> ExpQ
+deriveList t = [| concat $(deriveTiers t) |]
 
 -- Not only really derive Listable instances,
 -- but cascade through argument types.
diff --git a/src/Test/LeanCheck/Function.hs b/src/Test/LeanCheck/Function.hs
--- a/src/Test/LeanCheck/Function.hs
+++ b/src/Test/LeanCheck/Function.hs
@@ -11,26 +11,8 @@
 -- These can be useful for testing higher-order properties --- properties that
 -- take functions as arguments.
 --
--- LeanCheck provides several alternative definitions of 'Listable' functions:
---
--- * "Test.LeanCheck.Function.ListsOfPairs":
---   considers functions as a finite list of exceptional input-output cases to
---   a default value (list of pairs of arguments and results).
---   This is the LeanCheck default, and is the one exported by this module.
---
--- * "Test.LeanCheck.Function.CoListable":
---   declares a 'CoListable' typeclass similar to SmallCheck's @CoSerial@.
---   Currently a stub.
---
--- * "Test.LeanCheck.Function.Periodic":
---   similar to ListsOfPairs, but instead of having a default value, functions
---   are periodic.
---
--- Take care: all the above 'Listable' instances are __experimental__.  Only
--- one of the above can be imported at a time.
---
 -- Warning: this is only intended to be used in testing modules.  Avoid
 -- importing this on modules that are used as libraries.
 module Test.LeanCheck.Function () where
-import Test.LeanCheck.Function.ListsOfPairs ()
+import Test.LeanCheck.Function.Listable ()
 import Test.LeanCheck.Function.Show ()
diff --git a/src/Test/LeanCheck/Function/CoListable.hs b/src/Test/LeanCheck/Function/CoListable.hs
--- a/src/Test/LeanCheck/Function/CoListable.hs
+++ b/src/Test/LeanCheck/Function/CoListable.hs
@@ -1,5 +1,5 @@
 -- |
--- Module      : Test.LeanCheck.CoListable
+-- Module      : Test.LeanCheck.Function.CoListable
 -- Copyright   : (c) 2015-2017 Rudy Matela
 -- License     : 3-Clause BSD  (see the file LICENSE)
 -- Maintainer  : Rudy Matela <rudy@matela.com.br>
@@ -7,12 +7,14 @@
 -- This module is part of LeanCheck,
 -- a simple enumerative property-based testing library.
 --
--- This module exports a 'Listable' instance for function enumeration by means
--- of a 'CoListable' typeclass.  This is very similar to the coseries
--- enumeration of SmallCheck.
+-- This module exports functions to define a 'Listable' instance for function
+-- enumeration by means of a 'CoListable' typeclass.  This is very similar to
+-- the coseries enumeration of SmallCheck.
 --
 -- This module /does not currently work/, it it just a sketch and a stub.
 module Test.LeanCheck.Function.CoListable
+  ( CoListable (..)
+  )
 where
 
 
@@ -20,10 +22,6 @@
 import Test.LeanCheck.Tiers
 import Test.LeanCheck.Utils (Nat(..), Nat2(..), Nat3(..))
 import Data.Maybe (fromMaybe)
-
-
-instance (CoListable a, Listable b) => Listable (a -> b) where
-  tiers = cotiers tiers
 
 
 (\+:/) :: [[a]] -> [[a]] -> [[a]]
diff --git a/src/Test/LeanCheck/Function/FunListable.hs b/src/Test/LeanCheck/Function/FunListable.hs
deleted file mode 100644
--- a/src/Test/LeanCheck/Function/FunListable.hs
+++ /dev/null
@@ -1,133 +0,0 @@
--- |
--- Module      : Test.LeanCheck.FunListable
--- Copyright   : (c) 2015-2017 Rudy Matela
--- License     : 3-Clause BSD  (see the file LICENSE)
--- Maintainer  : Rudy Matela <rudy@matela.com.br>
---
--- This module is part of LeanCheck,
--- a simple enumerative property-based testing library.
---
--- This module exports a 'Listable' instance for function enumeration by means
--- of a 'FunListable' typeclass (similar to 'FunListable').
---
--- This module /does not currently work/, it it just a sketch and a stub.
-module Test.LeanCheck.Function.FunListable
-where
-
-
-import Test.LeanCheck
-import Test.LeanCheck.Tiers
-import Test.LeanCheck.Utils (Nat(..), Nat2(..), Nat3(..))
-import Data.Maybe (fromMaybe)
-
-
-sndArgTypeOf :: b -> (a -> b -> c) -> b
-x `sndArgTypeOf` _ = x
-
-
-instance (FunListable a, Listable b) => Listable (a -> b) where
-  tiers = concatMapT mkfss funtiers
-    where
-    mkfss (n, mkf) = mapT mkf (products (replicate n tiers)
-                    `suchThat` validResults (undefined `sndArgTypeOf` mkf))
-
-
-(\+:/) :: [[a]] -> [[a]] -> [[a]]
-xss \+:/ yss = xss \/ ([]:yss)
-infixr 9 \+:/
-
-
-class FunListable a where
-  validResults   :: a -> [b] -> Bool
-  validResults   x  =  not . invalidResults x
-  invalidResults :: a -> [b] -> Bool
-  invalidResults x  =  not .   validResults x
-  funtiers :: [[ (Int, [b] -> (a -> b)) ]]
-
--- maybe the other function FunListable needs is a okResults that checks if
--- results follow required pattern for each type:
---   * for lists, there shouldnt be repeated element suffix
---        a,a,a,a,a,b is ok
---        a,b,c,d,e,e is not ok.
---   * for integers, there shouldnt be adjacent repeated elements
---        a,b,a,b,a,b,a,b is ok
---        a,b,c,d,e,f,f,g is not ok
---        of course, this for the enumeration where I have the points.
---   * for pairs, apply the invariants accordingly in the matrix (is that
---     possible?)
---        I think it is.  Apply one invariant to columns, the other to lines.
-
-instance FunListable () where
-  validResults _ _ = True
-  funtiers = [[ (1, \[r]  () -> r) ]]
-
-
-instance FunListable Bool where
-  validResults _ _ = True
-  funtiers = [[ (2, \[r1,r2]  b -> if b then r1 else r2) ]]
-
--- have funtiers = [[ (1, \[r1]  b -> r1) ]
---                  ,[ (1, \[r1]  b -> if b then r1 else not r1 ]
---                  ]
-
-
-instance FunListable a => FunListable (Maybe a) where
-  validResults _ _   =  True
-  funtiers = mapT (\(n, mkf) -> (n+1, \(r:rs)  m -> case m of
-                                                       Nothing -> r
-                                                       Just x  -> mkf rs x)) funtiers
-
-
-instance (FunListable a, FunListable b) => FunListable (Either a b) where
-  validResults _ _  =  True
-  funtiers = productWith
-                (\(nf, mf) (ng, mg) -> (nf + ng, \rs  e -> case e of
-                                                             Left  x -> mf (take nf rs) x
-                                                             Right y -> mg (drop nf rs) y))
-                funtiers
-                funtiers
-
-
--- NOTE: big problem: adding r1 == r2 below instroduces an Eq restriction on
--- the result type.  Which does not exist for (a->b).  Maybe create a new
--- typeclass: FunResult, then rename FunListable to FunArg.  This way we can
--- have the equality check (or any other special checks) for types that have
--- equality and ignore it for types that don't.
-instance (FunListable a) => FunListable [a] where
-  validResults _ [r1,r2]  {- -- | r1 == r2 -} =  False  -- The results cannot end with repetitions
-  validResults x (r:rs)   =  validResults x rs
-  validResults _ _        =  True
-  funtiers = [[ (1, \[r]  xs -> r) ]]
-         \+:/ mapT (\(n, f) -> (1 + n, \(r:rs)  xs -> case xs of
-                                                        []     -> r
-                                                        (x:xs) -> f rs (x,xs))) funtiers
-
-
-instance (FunListable a, FunListable b) => FunListable (a,b) where
-  validResults _ _  =  True  -- TODO: check lines and columns
-  funtiers = productWith (\(n, f)  (m, g)
-                            -> (n*m, \rs  (x,y) -> toMatrix m rs
-                                                !! f [0..(n-1)] x
-                                                !! g [0..(m-1)] y))
-                funtiers
-                funtiers
-
-
-toMatrix :: Int -> [a] -> [[a]]
-toMatrix n [] = []
-toMatrix n xs = take n xs
-              : toMatrix n (drop n xs)
-
-
-instance FunListable Int where
-  funtiers = [[]] -- TODO: implement funtiers :: [[...Int...]]
-  -- mapT (... findInterval something ...) tiers
-
-instance FunListable Nat where
-  funtiers = [[]] -- TODO: implement funtiers :: [[...Nat...]]
-
-instance FunListable Nat2 where
-  funtiers = [[]] -- TODO: implement funtiers :: [[...Nat2...]]
-
-instance FunListable Nat3 where
-  funtiers = [[]] -- TODO: implement funtiers :: [[...Nat3...]]
diff --git a/src/Test/LeanCheck/Function/Listable.hs b/src/Test/LeanCheck/Function/Listable.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Function/Listable.hs
@@ -0,0 +1,34 @@
+-- |
+-- Module      : Test.LeanCheck.Function.Listable
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports a 'Listable' instance for functions.
+--
+-- LeanCheck provides several alternative definitions of 'Listable' functions:
+--
+-- * "Test.LeanCheck.Function.Listable.ListsOfPairs":
+--   considers functions as a finite list of exceptional input-output cases to
+--   a default value (list of pairs of arguments and results).
+--   This is the LeanCheck default, and is the one exported by this module.
+--
+-- * "Test.LeanCheck.Function.Listable.CoListable":
+--   declares a 'CoListable' typeclass similar to SmallCheck's @CoSerial@.
+--   Currently a stub.
+--
+-- * "Test.LeanCheck.Function.Listable.Periodic":
+--   similar to ListsOfPairs, but instead of having a default value, functions
+--   are periodic.
+--
+-- Take care: all the above 'Listable' instances are __experimental__.  Only
+-- one of the above can be imported at a time.
+--
+-- Warning: this is only intended to be used in testing modules.  Avoid
+-- importing this on modules that are used as libraries.
+module Test.LeanCheck.Function.Listable () where
+
+import Test.LeanCheck.Function.Listable.ListsOfPairs
diff --git a/src/Test/LeanCheck/Function/Listable/CoListable.hs b/src/Test/LeanCheck/Function/Listable/CoListable.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Function/Listable/CoListable.hs
@@ -0,0 +1,21 @@
+-- |
+-- Module      : Test.LeanCheck.Function.Listable.CoListable
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports a 'Listable' instance for function enumeration by means
+-- of a 'CoListable' typeclass.  This is very similar to the coseries
+-- enumeration of SmallCheck.
+--
+-- This module /does not currently work/, it it just a sketch and a stub.
+module Test.LeanCheck.Function.Listable.CoListable () where
+
+import Test.LeanCheck.Core
+import Test.LeanCheck.Function.CoListable
+
+instance (CoListable a, Listable b) => Listable (a -> b) where
+  tiers = cotiers tiers
diff --git a/src/Test/LeanCheck/Function/Listable/FunListable.hs b/src/Test/LeanCheck/Function/Listable/FunListable.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Function/Listable/FunListable.hs
@@ -0,0 +1,133 @@
+-- |
+-- Module      : Test.LeanCheck.FunListable
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports a 'Listable' instance for function enumeration by means
+-- of a 'FunListable' typeclass (similar to 'CoListable').
+--
+-- This module /does not currently work/, it it just a sketch and a stub.
+module Test.LeanCheck.Function.Listable.FunListable
+where
+
+
+import Test.LeanCheck
+import Test.LeanCheck.Tiers
+import Test.LeanCheck.Utils (Nat(..), Nat2(..), Nat3(..))
+import Data.Maybe (fromMaybe)
+
+
+sndArgTypeOf :: b -> (a -> b -> c) -> b
+x `sndArgTypeOf` _ = x
+
+
+instance (FunListable a, Listable b) => Listable (a -> b) where
+  tiers = concatMapT mkfss funtiers
+    where
+    mkfss (n, mkf) = mapT mkf (products (replicate n tiers)
+                    `suchThat` validResults (undefined `sndArgTypeOf` mkf))
+
+
+(\+:/) :: [[a]] -> [[a]] -> [[a]]
+xss \+:/ yss = xss \/ ([]:yss)
+infixr 9 \+:/
+
+
+class FunListable a where
+  validResults   :: a -> [b] -> Bool
+  validResults   x  =  not . invalidResults x
+  invalidResults :: a -> [b] -> Bool
+  invalidResults x  =  not .   validResults x
+  funtiers :: [[ (Int, [b] -> (a -> b)) ]]
+
+-- maybe the other function FunListable needs is a okResults that checks if
+-- results follow required pattern for each type:
+--   * for lists, there shouldnt be repeated element suffix
+--        a,a,a,a,a,b is ok
+--        a,b,c,d,e,e is not ok.
+--   * for integers, there shouldnt be adjacent repeated elements
+--        a,b,a,b,a,b,a,b is ok
+--        a,b,c,d,e,f,f,g is not ok
+--        of course, this for the enumeration where I have the points.
+--   * for pairs, apply the invariants accordingly in the matrix (is that
+--     possible?)
+--        I think it is.  Apply one invariant to columns, the other to lines.
+
+instance FunListable () where
+  validResults _ _ = True
+  funtiers = [[ (1, \[r]  () -> r) ]]
+
+
+instance FunListable Bool where
+  validResults _ _ = True
+  funtiers = [[ (2, \[r1,r2]  b -> if b then r1 else r2) ]]
+
+-- have funtiers = [[ (1, \[r1]  b -> r1) ]
+--                  ,[ (1, \[r1]  b -> if b then r1 else not r1 ]
+--                  ]
+
+
+instance FunListable a => FunListable (Maybe a) where
+  validResults _ _   =  True
+  funtiers = mapT (\(n, mkf) -> (n+1, \(r:rs)  m -> case m of
+                                                       Nothing -> r
+                                                       Just x  -> mkf rs x)) funtiers
+
+
+instance (FunListable a, FunListable b) => FunListable (Either a b) where
+  validResults _ _  =  True
+  funtiers = productWith
+                (\(nf, mf) (ng, mg) -> (nf + ng, \rs  e -> case e of
+                                                             Left  x -> mf (take nf rs) x
+                                                             Right y -> mg (drop nf rs) y))
+                funtiers
+                funtiers
+
+
+-- NOTE: big problem: adding r1 == r2 below instroduces an Eq restriction on
+-- the result type.  Which does not exist for (a->b).  Maybe create a new
+-- typeclass: FunResult, then rename FunListable to FunArg.  This way we can
+-- have the equality check (or any other special checks) for types that have
+-- equality and ignore it for types that don't.
+instance (FunListable a) => FunListable [a] where
+  validResults _ [r1,r2]  {- -- | r1 == r2 -} =  False  -- The results cannot end with repetitions
+  validResults x (r:rs)   =  validResults x rs
+  validResults _ _        =  True
+  funtiers = [[ (1, \[r]  xs -> r) ]]
+         \+:/ mapT (\(n, f) -> (1 + n, \(r:rs)  xs -> case xs of
+                                                        []     -> r
+                                                        (x:xs) -> f rs (x,xs))) funtiers
+
+
+instance (FunListable a, FunListable b) => FunListable (a,b) where
+  validResults _ _  =  True  -- TODO: check lines and columns
+  funtiers = productWith (\(n, f)  (m, g)
+                            -> (n*m, \rs  (x,y) -> toMatrix m rs
+                                                !! f [0..(n-1)] x
+                                                !! g [0..(m-1)] y))
+                funtiers
+                funtiers
+
+
+toMatrix :: Int -> [a] -> [[a]]
+toMatrix n [] = []
+toMatrix n xs = take n xs
+              : toMatrix n (drop n xs)
+
+
+instance FunListable Int where
+  funtiers = [[]] -- TODO: implement funtiers :: [[...Int...]]
+  -- mapT (... findInterval something ...) tiers
+
+instance FunListable Nat where
+  funtiers = [[]] -- TODO: implement funtiers :: [[...Nat...]]
+
+instance FunListable Nat2 where
+  funtiers = [[]] -- TODO: implement funtiers :: [[...Nat2...]]
+
+instance FunListable Nat3 where
+  funtiers = [[]] -- TODO: implement funtiers :: [[...Nat3...]]
diff --git a/src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs b/src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs
@@ -0,0 +1,21 @@
+-- |
+-- Module      : Test.LeanCheck.Function.ListsOfPairs
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports a 'Listable' instance for function enumeration
+-- via lists of pairs.
+--
+-- This module considers functions as a finite list of exceptional input-output
+-- cases to a default value (list of pairs of arguments and results).
+module Test.LeanCheck.Function.Listable.ListsOfPairs () where
+
+import Test.LeanCheck.Core
+import Test.LeanCheck.Function.ListsOfPairs
+
+instance (Eq a, Listable a, Listable b) => Listable (a -> b) where
+  tiers = tiers -->> tiers
diff --git a/src/Test/LeanCheck/Function/Listable/Mixed.hs b/src/Test/LeanCheck/Function/Listable/Mixed.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Function/Listable/Mixed.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.LeanCheck.Function.Mixed
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports a 'Listable' instance for function enumeration
+-- by combining several enumeration strategies.
+module Test.LeanCheck.Function.Listable.Mixed () where
+
+import Test.LeanCheck.Core
+import Test.LeanCheck.Function.ListsOfPairs
+import Test.LeanCheck.Function.CoListable
+
+instance (Eq a, Listable a, CoListable a, Listable b) => Listable (a -> b) where
+  tiers = tiers -->> tiers
+       \/ cotiers tiers
diff --git a/src/Test/LeanCheck/Function/Listable/Periodic.hs b/src/Test/LeanCheck/Function/Listable/Periodic.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Function/Listable/Periodic.hs
@@ -0,0 +1,57 @@
+-- |
+-- Module      : Test.LeanCheck.Function.Periodic
+-- Copyright   : (c) 2015-2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports a 'Listable' instance for enumeration of periodic
+-- functions.
+--
+-- This module /barely works/ and is just a sketch.
+module Test.LeanCheck.Function.Listable.Periodic
+where
+
+
+import Test.LeanCheck
+import Data.List (inits)
+
+
+instance (Eq a, Eq b, Listable a, Listable b) => Listable (a -> b) where
+  tiers = mapT pairsToFunction $ functions list tiers
+
+functions :: Eq b => [a] -> [[b]] -> [[[(a,b)]]]
+functions xs yss = mapT (zip xs . cycle) $ lsPeriodsOfLimit xs yss
+
+functionsz :: Eq b => [[a]] -> [[b]] -> [[[(a,b)]]]
+functionsz xss = functions (concat xss)
+
+
+lsPeriodsOf :: Eq a => [[a]] -> [[[a]]]
+lsPeriodsOf xss = map (filter isPeriod) (listsOf xss)
+
+lsPeriodsOfLimit :: Eq a => [b] -> [[a]] -> [[[a]]]
+lsPeriodsOfLimit ys xss = map (filter isPeriod) (tiersOfLimit ys xss)
+
+
+isPeriod :: Eq a => [a] -> Bool
+isPeriod [] = False
+isPeriod [x] = True
+isPeriod xs = not $ any (`isPeriodOf` xs) $ (tail . init . inits) xs
+
+isPeriodOf :: Eq a => [a] -> [a] -> Bool
+xs `isPeriodOf` ys = length ys `mod` length xs == 0
+                  && and (zipWith (==) (cycle xs) ys)
+
+
+tiersOfLimit :: [b] -> [[a]] -> [[[a]]]
+tiersOfLimit     [] xss = [[[]]]
+tiersOfLimit (_:ys) xss = [[[]]] ++ productWith (:) xss (tiersOfLimit ys xss)
+
+
+pairsToFunction :: Eq a => [(a,b)] -> (a -> b)
+pairsToFunction ((x,y):ps) x' =  if x' == x
+                                   then y
+                                   else pairsToFunction ps x'
diff --git a/src/Test/LeanCheck/Function/ListsOfPairs.hs b/src/Test/LeanCheck/Function/ListsOfPairs.hs
--- a/src/Test/LeanCheck/Function/ListsOfPairs.hs
+++ b/src/Test/LeanCheck/Function/ListsOfPairs.hs
@@ -7,14 +7,13 @@
 -- This module is part of LeanCheck,
 -- a simple enumerative property-based testing library.
 --
--- This module exports a 'Listable' instance for function enumeration
--- via lists of pairs.
+-- This module exports means to enumerate functions via lists of pairs.
 --
 -- This module considers functions as a finite list of exceptional input-output
 -- cases to a default value (list of pairs of arguments and results).
 module Test.LeanCheck.Function.ListsOfPairs
-  ( functionPairs
-  , associations
+  ( (-->>)
+  , exceptionPairs
   )
 where
 
@@ -22,16 +21,12 @@
 import Test.LeanCheck.Tiers
 import Data.Maybe (fromMaybe)
 
-instance (Eq a, Listable a, Listable b) => Listable (a -> b) where
-  tiers = tiers -->> tiers
-
-
 (-->>) :: Eq a => [[a]] -> [[b]] -> [[a->b]]
 xss -->> yss
   | finite xss = mapT ((undefined `mutate`) . zip (concat xss))
                       (products $ replicate (length $ concat xss) yss)
   | otherwise  = concatMapT
-                   (\(r,yss) -> mapT (const r `mutate`) (functionPairs xss yss))
+                   (\(r,yss) -> mapT (const r `mutate`) (exceptionPairs xss yss))
                    (choices yss)
 
 
@@ -41,18 +36,17 @@
   mut (x',fx') f x = if x == x' then fx' else f x
 
 
--- | Given a list of domain values, and tiers of codomain values,
--- return tiers of lists of ordered pairs of domain and codomain values.
---
--- Technically: tiers of left-total functional relations.
-associations :: [a] -> [[b]] -> [[ [(a,b)] ]]
-associations xs sbs = zip xs `mapT` products (const sbs `map` xs)
-
 -- | Given tiers of input values and tiers of output values,
 -- return tiers with all possible lists of input-output pairs.
--- Those represent functional relations.
-functionPairs :: [[a]] -> [[b]] -> [[ [(a,b)] ]]
-functionPairs xss yss = concatMapT (`associations` yss) (incompleteSetsOf xss)
+-- These represent functional relations.
+-- In the implementation of '-->>',
+-- they represent exceptions to a constant function,
+-- hence the name 'exceptionPairs'.
+exceptionPairs :: [[a]] -> [[b]] -> [[ [(a,b)] ]]
+exceptionPairs xss yss = concatMapT (`excep` yss) (incompleteSetsOf xss)
+  where
+  excep :: [a] -> [[b]] -> [[ [(a,b)] ]]
+  excep xs sbs = zip xs `mapT` products (const sbs `map` xs)
 -- incompleteSetsOf is needed, instead of setsOf, because mutating *all* values
 -- of a constant function makes no sense (we would have already enumerated that
 -- function anyway).  As of 2c23c1a, it makes no difference whether
diff --git a/src/Test/LeanCheck/Function/Periodic.hs b/src/Test/LeanCheck/Function/Periodic.hs
deleted file mode 100644
--- a/src/Test/LeanCheck/Function/Periodic.hs
+++ /dev/null
@@ -1,57 +0,0 @@
--- |
--- Module      : Test.LeanCheck.Function.Periodic
--- Copyright   : (c) 2015-2017 Rudy Matela
--- License     : 3-Clause BSD  (see the file LICENSE)
--- Maintainer  : Rudy Matela <rudy@matela.com.br>
---
--- This module is part of LeanCheck,
--- a simple enumerative property-based testing library.
---
--- This module exports a 'Listable' instance for enumeration of periodic
--- functions.
---
--- This module /barely works/ and is just a sketch.
-module Test.LeanCheck.Function.Periodic
-where
-
-
-import Test.LeanCheck
-import Data.List (inits)
-
-
-instance (Eq a, Eq b, Listable a, Listable b) => Listable (a -> b) where
-  tiers = mapT pairsToFunction $ functions list tiers
-
-functions :: Eq b => [a] -> [[b]] -> [[[(a,b)]]]
-functions xs yss = mapT (zip xs . cycle) $ lsPeriodsOfLimit xs yss
-
-functionsz :: Eq b => [[a]] -> [[b]] -> [[[(a,b)]]]
-functionsz xss = functions (concat xss)
-
-
-lsPeriodsOf :: Eq a => [[a]] -> [[[a]]]
-lsPeriodsOf xss = map (filter isPeriod) (listsOf xss)
-
-lsPeriodsOfLimit :: Eq a => [b] -> [[a]] -> [[[a]]]
-lsPeriodsOfLimit ys xss = map (filter isPeriod) (tiersOfLimit ys xss)
-
-
-isPeriod :: Eq a => [a] -> Bool
-isPeriod [] = False
-isPeriod [x] = True
-isPeriod xs = not $ any (`isPeriodOf` xs) $ (tail . init . inits) xs
-
-isPeriodOf :: Eq a => [a] -> [a] -> Bool
-xs `isPeriodOf` ys = length ys `mod` length xs == 0
-                  && and (zipWith (==) (cycle xs) ys)
-
-
-tiersOfLimit :: [b] -> [[a]] -> [[[a]]]
-tiersOfLimit     [] xss = [[[]]]
-tiersOfLimit (_:ys) xss = [[[]]] ++ productWith (:) xss (tiersOfLimit ys xss)
-
-
-pairsToFunction :: Eq a => [(a,b)] -> (a -> b)
-pairsToFunction ((x,y):ps) x' =  if x' == x
-                                   then y
-                                   else pairsToFunction ps x'
diff --git a/src/Test/LeanCheck/IO.hs b/src/Test/LeanCheck/IO.hs
--- a/src/Test/LeanCheck/IO.hs
+++ b/src/Test/LeanCheck/IO.hs
@@ -90,13 +90,13 @@
 showResult m (OK n)             = "+++ OK, passed " ++ show n ++ " tests"
                                ++ takeWhile (\_ -> n < m) " (exhausted)" ++ "."
 showResult m (Falsified i ce)   = "*** Failed! Falsifiable (after "
-                               ++ show i ++ " tests):\n" ++ join ce
+                               ++ show i ++ " tests):\n" ++ joinArgs ce
 showResult m (Exception i ce e) = "*** Failed! Exception '" ++ e ++ "' (after "
-                               ++ show i ++ " tests):\n" ++ join ce
+                               ++ show i ++ " tests):\n" ++ joinArgs ce
 
--- join the counter-example arguments
-join :: [String] -> String
-join ce | any ('\n' `elem`) ce = unlines $ map chopBreak ce
+-- joinArgs the counter-example arguments
+joinArgs :: [String] -> String
+joinArgs ce | any ('\n' `elem`) ce = unlines $ map chopBreak ce
         | otherwise            = unwords ce
 
 -- chops a line break at the end if there is any
diff --git a/src/Test/LeanCheck/Stats.hs b/src/Test/LeanCheck/Stats.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LeanCheck/Stats.hs
@@ -0,0 +1,126 @@
+-- |
+-- Module      : Test.LeanCheck.Stats
+-- Copyright   : (c) 2017 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of LeanCheck,
+-- a simple enumerative property-based testing library.
+--
+-- This module exports functions to compute statistics of Listable instances.
+module Test.LeanCheck.Stats
+  ( classStats
+  , classStatsT
+  , conditionStats
+  , conditionStatsT
+
+  , classify
+  , classifyBy
+  , classifyOn
+  , counts
+  , countsBy
+  , countsOn
+  )
+where
+
+import Test.LeanCheck.Core
+import Data.Function (on)
+import Data.List (intercalate, transpose)
+
+classStats :: (Listable a, Show b) => Int -> (a -> b) -> IO ()
+classStats n f = putStrLn
+               . table " "
+               . map showCount
+               $ countsOn (unquote . show . f) xs
+  where
+  xs = take n list
+  len = length xs
+  showCount (s,n) = [ s ++ ":"
+                    , show n ++ "/" ++ show len
+                    , show (100 * n `div` len) ++ "%"
+                    ]
+
+-- TODO: implement this
+classStatsT :: (Listable a, Show b) => Int -> (a -> b) -> IO ()
+classStatsT = error "classStatsT: not implemented yet, use classStats for now"
+
+conditionStats :: Listable a => Int -> [(String,a->Bool)] -> IO ()
+conditionStats n = putStrLn . table " " . map show1
+  where
+  xs = take n list
+  len = length xs
+  show1 (s,f) = let c = count f xs
+                in [ s ++ ":"
+                   , show c ++ "/" ++ show len
+                   , show (100 * c `div` len) ++ "%" ]
+  count f = length . filter f
+
+-- TODO: implement this
+conditionStatsT :: Listable a => Int -> [(String,a->Bool)] -> IO ()
+conditionStatsT = error "conditionsStatsT: not implemented yet, use classStats for now"
+
+classify :: Eq a => [a] -> [[a]]
+classify = classifyBy (==)
+
+classifyBy :: (a -> a -> Bool) -> [a] -> [[a]]
+classifyBy (==) []     = []
+classifyBy (==) (x:xs) = (x:filter (== x) xs)
+                       : classifyBy (==) (filter (/= x) xs)
+  where
+  x /= y = not (x == y)
+
+classifyOn :: Eq b => (a -> b) -> [a] -> [[a]]
+classifyOn f xs = map (map fst)
+                . classifyBy ((==) `on` snd)
+                $ map (\x -> (x,f x)) xs
+
+counts :: Eq a => [a] -> [(a,Int)]
+counts = map headLength . classify
+
+countsBy :: (a -> a -> Bool) -> [a] -> [(a,Int)]
+countsBy (==) = map headLength . classifyBy (==)
+
+countsOn :: Eq b => (a -> b) -> [a] -> [(b,Int)]
+countsOn f = map (\xs -> (f $ head xs, length xs)) . classifyOn f
+
+headLength :: [a] -> (a,Int)
+headLength xs = (head xs, length xs)
+
+unquote :: String -> String
+unquote ('"':s) | last s == '"' = init s
+unquote s = s
+
+table :: String -> [[String]] -> String
+table s []  = ""
+table s sss = unlines
+            . map (removeTrailing ' ')
+            . map (intercalate s)
+            . transpose
+            . map (normalize ' ')
+            . foldr1 (zipWith (++))
+            . map (normalize "" . map lines)
+            . normalize ""
+            $ sss
+
+-- | Fits a list to a certain width by appending a certain value
+--
+-- > fit ' ' 6 "str" == "str   "
+--
+-- > fit 0 6 [1,2,3] == [1,2,3,0,0,0]
+fit :: a -> Int -> [a] -> [a]
+fit x n xs = replicate (n - length xs) x ++ xs
+
+-- | normalize makes all list the same length by adding a value
+--
+-- > normalize ["asdf","qw","er"] == normalize ["asdf","qw  ","er  "]
+normalize :: a -> [[a]] -> [[a]]
+normalize x xs = map (x `fit` maxLength xs) xs
+
+-- | Given a list of lists returns the maximum length
+maxLength :: [[a]] -> Int
+maxLength = maximum . (0:) . map length
+
+removeTrailing :: Eq a => a -> [a] -> [a]
+removeTrailing x = reverse
+                 . dropWhile (==x)
+                 . reverse
diff --git a/src/Test/LeanCheck/Utils.hs b/src/Test/LeanCheck/Utils.hs
--- a/src/Test/LeanCheck/Utils.hs
+++ b/src/Test/LeanCheck/Utils.hs
@@ -19,9 +19,11 @@
   ( module Test.LeanCheck.Utils.Types
   , module Test.LeanCheck.Utils.Operators
   , module Test.LeanCheck.Utils.TypeBinding
+  , module Test.LeanCheck.Stats
   )
 where
 
 import Test.LeanCheck.Utils.Types
 import Test.LeanCheck.Utils.Operators
 import Test.LeanCheck.Utils.TypeBinding
+import Test.LeanCheck.Stats
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,15 @@
+# stack.yaml docs:
+# https://docs.haskellstack.org/en/stable/yaml_configuration/
+
+# resolver: nightly-2015-09-21
+# resolver: ghc-7.10.2
+resolver: lts-9.0
+
+packages:
+- .
+
+extra-deps: []
+
+flags: {}
+
+extra-package-dbs: []
diff --git a/tests/diff/eg/higher-order.out b/tests/diff/eg/higher-order.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/eg/higher-order.out
@@ -0,0 +1,50 @@
+*** Failed! Falsifiable (after 75 tests):
+\x y -> case (x,y) of
+          (0,0) -> 1
+          (0,1) -> 1
+          (1,0) -> 0
+          (0,-1) -> 1
+          (1,1) -> 0
+          (-1,0) -> 0
+          (0,2) -> 1
+          (1,-1) -> 0
+          ...
+0
+[0,0]
+
+*** Failed! Falsifiable (after 130 tests):
+\x y -> case (x,y) of
+          (0,0) -> 1
+          (0,1) -> 1
+          (1,0) -> 0
+          (0,-1) -> 1
+          (1,1) -> 0
+          (-1,0) -> 0
+          (0,2) -> 1
+          (1,-1) -> 0
+          ...
+[0,0,0]
+
+*** Failed! Falsifiable (after 36 tests):
+\x -> case x of
+        0 -> 0
+        1 -> 0
+        -1 -> 0
+        2 -> 0
+        -2 -> 0
+        3 -> 0
+        -3 -> 0
+        4 -> 0
+        ...
+\x -> case x of
+        0 -> True
+        1 -> False
+        -1 -> False
+        2 -> False
+        -2 -> False
+        3 -> False
+        -3 -> False
+        4 -> False
+        ...
+[1]
+
diff --git a/tests/diff/eg/overflow.out b/tests/diff/eg/overflow.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/eg/overflow.out
@@ -0,0 +1,2 @@
+*** Failed! Falsifiable (after 8792 tests):
+(T [] [] [] [-1] [-32768])
diff --git a/tests/diff/eg/test-bool.out b/tests/diff/eg/test-bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/eg/test-bool.out
@@ -0,0 +1,29 @@
+not . not === id
++++ OK, passed 2 tests (exhausted).
+(&&) commutes
++++ OK, passed 4 tests (exhausted).
+(||) commutes
++++ OK, passed 4 tests (exhausted).
+
+All boolean operators are commutative (wrong).
+*** Failed! Falsifiable (after 10 tests):
+\x y -> case (x,y) of
+          (False,False) -> False
+          (False,True) -> False
+          (True,False) -> True
+          (True,True) -> False
+False
+True
+
+
+All boolean operators are associative (wrong).
+*** Failed! Falsifiable (after 22 tests):
+\x y -> case (x,y) of
+          (False,False) -> False
+          (False,True) -> False
+          (True,False) -> True
+          (True,True) -> False
+True
+False
+True
+
diff --git a/tests/diff/eg/test-list.out b/tests/diff/eg/test-list.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/eg/test-list.out
@@ -0,0 +1,6 @@
+*** Failed! Falsifiable (after 4 tests):
+[] [0,0]
+*** Failed! Falsifiable (after 1 tests):
+[]
+*** Failed! Exception 'Prelude.head: empty list' (after 1 tests):
+[]
diff --git a/tests/diff/eg/test-sort.out b/tests/diff/eg/test-sort.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/eg/test-sort.out
@@ -0,0 +1,4 @@
++++ OK, passed 200 tests.
+*** Failed! Falsifiable (after 4 tests):
+0 [0,0]
++++ OK, passed 200 tests.
diff --git a/tests/diff/tiers-BagBool.out b/tests/diff/tiers-BagBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-BagBool.out
@@ -0,0 +1,100 @@
+tiers :: [Bag Bool]  =
+  [ [Bag []]
+  , [ Bag [False]
+    , Bag [True]
+    ]
+  , [ Bag [False,False]
+    , Bag [False,True]
+    , Bag [True,True]
+    ]
+  , [ Bag [False,False,False]
+    , Bag [False,False,True]
+    , Bag [False,True,True]
+    , Bag [True,True,True]
+    ]
+  , [ Bag [False,False,False,False]
+    , Bag [False,False,False,True]
+    , Bag [False,False,True,True]
+    , Bag [False,True,True,True]
+    , Bag [True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False]
+    , Bag [False,False,False,False,True]
+    , Bag [False,False,False,True,True]
+    , Bag [False,False,True,True,True]
+    , Bag [False,True,True,True,True]
+    , Bag [True,True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False,False]
+    , Bag [False,False,False,False,False,True]
+    , Bag [False,False,False,False,True,True]
+    , Bag [False,False,False,True,True,True]
+    , Bag [False,False,True,True,True,True]
+    , Bag [False,True,True,True,True,True]
+    , Bag [True,True,True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False,False,False]
+    , Bag [False,False,False,False,False,False,True]
+    , Bag [False,False,False,False,False,True,True]
+    , Bag [False,False,False,False,True,True,True]
+    , Bag [False,False,False,True,True,True,True]
+    , Bag [False,False,True,True,True,True,True]
+    , Bag [False,True,True,True,True,True,True]
+    , Bag [True,True,True,True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False,False,False,False]
+    , Bag [False,False,False,False,False,False,False,True]
+    , Bag [False,False,False,False,False,False,True,True]
+    , Bag [False,False,False,False,False,True,True,True]
+    , Bag [False,False,False,False,True,True,True,True]
+    , Bag [False,False,False,True,True,True,True,True]
+    , Bag [False,False,True,True,True,True,True,True]
+    , Bag [False,True,True,True,True,True,True,True]
+    , Bag [True,True,True,True,True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False,False,False,False,False]
+    , Bag [False,False,False,False,False,False,False,False,True]
+    , Bag [False,False,False,False,False,False,False,True,True]
+    , Bag [False,False,False,False,False,False,True,True,True]
+    , Bag [False,False,False,False,False,True,True,True,True]
+    , Bag [False,False,False,False,True,True,True,True,True]
+    , Bag [False,False,False,True,True,True,True,True,True]
+    , Bag [False,False,True,True,True,True,True,True,True]
+    , Bag [False,True,True,True,True,True,True,True,True]
+    , Bag [True,True,True,True,True,True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False,False,False,False,False,False]
+    , Bag [False,False,False,False,False,False,False,False,False,True]
+    , Bag [False,False,False,False,False,False,False,False,True,True]
+    , Bag [False,False,False,False,False,False,False,True,True,True]
+    , Bag [False,False,False,False,False,False,True,True,True,True]
+    , Bag [False,False,False,False,False,True,True,True,True,True]
+    , Bag [False,False,False,False,True,True,True,True,True,True]
+    , Bag [False,False,False,True,True,True,True,True,True,True]
+    , Bag [False,False,True,True,True,True,True,True,True,True]
+    , Bag [False,True,True,True,True,True,True,True,True,True]
+    , Bag [True,True,True,True,True,True,True,True,True,True]
+    ]
+  , [ Bag [False,False,False,False,False,False,False,False,False,False,False]
+    , Bag [False,False,False,False,False,False,False,False,False,False,True]
+    , Bag [False,False,False,False,False,False,False,False,False,True,True]
+    , Bag [False,False,False,False,False,False,False,False,True,True,True]
+    , Bag [False,False,False,False,False,False,False,True,True,True,True]
+    , Bag [False,False,False,False,False,False,True,True,True,True,True]
+    , Bag [False,False,False,False,False,True,True,True,True,True,True]
+    , Bag [False,False,False,False,True,True,True,True,True,True,True]
+    , Bag [False,False,False,True,True,True,True,True,True,True,True]
+    , Bag [False,False,True,True,True,True,True,True,True,True,True]
+    , Bag [False,True,True,True,True,True,True,True,True,True,True]
+    , Bag [True,True,True,True,True,True,True,True,True,True,True]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Bag Bool ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]
+
+length (list :: [ Bag Bool ])  =  Infinity
+
+allUnique (list :: [ Bag Bool ])  =  True
+
+ratioRepetitions (list :: [ Bag Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-BagNat.out b/tests/diff/tiers-BagNat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-BagNat.out
@@ -0,0 +1,216 @@
+tiers :: [Bag Nat]  =
+  [ [Bag []]
+  , [Bag [0]]
+  , [ Bag [0,0]
+    , Bag [1]
+    ]
+  , [ Bag [0,0,0]
+    , Bag [0,1]
+    , Bag [2]
+    ]
+  , [ Bag [0,0,0,0]
+    , Bag [0,0,1]
+    , Bag [0,2]
+    , Bag [1,1]
+    , Bag [3]
+    ]
+  , [ Bag [0,0,0,0,0]
+    , Bag [0,0,0,1]
+    , Bag [0,0,2]
+    , Bag [0,1,1]
+    , Bag [0,3]
+    , Bag [1,2]
+    , Bag [4]
+    ]
+  , [ Bag [0,0,0,0,0,0]
+    , Bag [0,0,0,0,1]
+    , Bag [0,0,0,2]
+    , Bag [0,0,1,1]
+    , Bag [0,0,3]
+    , Bag [0,1,2]
+    , Bag [0,4]
+    , Bag [1,1,1]
+    , Bag [1,3]
+    , Bag [2,2]
+    , Bag [5]
+    ]
+  , [ Bag [0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,1]
+    , Bag [0,0,0,0,2]
+    , Bag [0,0,0,1,1]
+    , Bag [0,0,0,3]
+    , Bag [0,0,1,2]
+    , Bag [0,0,4]
+    , Bag [0,1,1,1]
+    , Bag [0,1,3]
+    , Bag [0,2,2]
+    , Bag [0,5]
+    , Bag [1,1,2]
+    , Bag [1,4]
+    , Bag [2,3]
+    , Bag [6]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,2]
+    , Bag [0,0,0,0,1,1]
+    , Bag [0,0,0,0,3]
+    , Bag [0,0,0,1,2]
+    , Bag [0,0,0,4]
+    , Bag [0,0,1,1,1]
+    , Bag [0,0,1,3]
+    , Bag [0,0,2,2]
+    , Bag [0,0,5]
+    , Bag [0,1,1,2]
+    , Bag [0,1,4]
+    , Bag [0,2,3]
+    , Bag [0,6]
+    , Bag [1,1,1,1]
+    , Bag [1,1,3]
+    , Bag [1,2,2]
+    , Bag [1,5]
+    , Bag [2,4]
+    , Bag [3,3]
+    , Bag [7]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,2]
+    , Bag [0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,0,3]
+    , Bag [0,0,0,0,1,2]
+    , Bag [0,0,0,0,4]
+    , Bag [0,0,0,1,1,1]
+    , Bag [0,0,0,1,3]
+    , Bag [0,0,0,2,2]
+    , Bag [0,0,0,5]
+    , Bag [0,0,1,1,2]
+    , Bag [0,0,1,4]
+    , Bag [0,0,2,3]
+    , Bag [0,0,6]
+    , Bag [0,1,1,1,1]
+    , Bag [0,1,1,3]
+    , Bag [0,1,2,2]
+    , Bag [0,1,5]
+    , Bag [0,2,4]
+    , Bag [0,3,3]
+    , Bag [0,7]
+    , Bag [1,1,1,2]
+    , Bag [1,1,4]
+    , Bag [1,2,3]
+    , Bag [1,6]
+    , Bag [2,2,2]
+    , Bag [2,5]
+    , Bag [3,4]
+    , Bag [8]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,0,2]
+    , Bag [0,0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,0,0,3]
+    , Bag [0,0,0,0,0,1,2]
+    , Bag [0,0,0,0,0,4]
+    , Bag [0,0,0,0,1,1,1]
+    , Bag [0,0,0,0,1,3]
+    , Bag [0,0,0,0,2,2]
+    , Bag [0,0,0,0,5]
+    , Bag [0,0,0,1,1,2]
+    , Bag [0,0,0,1,4]
+    , Bag [0,0,0,2,3]
+    , Bag [0,0,0,6]
+    , Bag [0,0,1,1,1,1]
+    , Bag [0,0,1,1,3]
+    , Bag [0,0,1,2,2]
+    , Bag [0,0,1,5]
+    , Bag [0,0,2,4]
+    , Bag [0,0,3,3]
+    , Bag [0,0,7]
+    , Bag [0,1,1,1,2]
+    , Bag [0,1,1,4]
+    , Bag [0,1,2,3]
+    , Bag [0,1,6]
+    , Bag [0,2,2,2]
+    , Bag [0,2,5]
+    , Bag [0,3,4]
+    , Bag [0,8]
+    , Bag [1,1,1,1,1]
+    , Bag [1,1,1,3]
+    , Bag [1,1,2,2]
+    , Bag [1,1,5]
+    , Bag [1,2,4]
+    , Bag [1,3,3]
+    , Bag [1,7]
+    , Bag [2,2,3]
+    , Bag [2,6]
+    , Bag [3,5]
+    , Bag [4,4]
+    , Bag [9]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,0,0,2]
+    , Bag [0,0,0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,0,0,0,3]
+    , Bag [0,0,0,0,0,0,1,2]
+    , Bag [0,0,0,0,0,0,4]
+    , Bag [0,0,0,0,0,1,1,1]
+    , Bag [0,0,0,0,0,1,3]
+    , Bag [0,0,0,0,0,2,2]
+    , Bag [0,0,0,0,0,5]
+    , Bag [0,0,0,0,1,1,2]
+    , Bag [0,0,0,0,1,4]
+    , Bag [0,0,0,0,2,3]
+    , Bag [0,0,0,0,6]
+    , Bag [0,0,0,1,1,1,1]
+    , Bag [0,0,0,1,1,3]
+    , Bag [0,0,0,1,2,2]
+    , Bag [0,0,0,1,5]
+    , Bag [0,0,0,2,4]
+    , Bag [0,0,0,3,3]
+    , Bag [0,0,0,7]
+    , Bag [0,0,1,1,1,2]
+    , Bag [0,0,1,1,4]
+    , Bag [0,0,1,2,3]
+    , Bag [0,0,1,6]
+    , Bag [0,0,2,2,2]
+    , Bag [0,0,2,5]
+    , Bag [0,0,3,4]
+    , Bag [0,0,8]
+    , Bag [0,1,1,1,1,1]
+    , Bag [0,1,1,1,3]
+    , Bag [0,1,1,2,2]
+    , Bag [0,1,1,5]
+    , Bag [0,1,2,4]
+    , Bag [0,1,3,3]
+    , Bag [0,1,7]
+    , Bag [0,2,2,3]
+    , Bag [0,2,6]
+    , Bag [0,3,5]
+    , Bag [0,4,4]
+    , Bag [0,9]
+    , Bag [1,1,1,1,2]
+    , Bag [1,1,1,4]
+    , Bag [1,1,2,3]
+    , Bag [1,1,6]
+    , Bag [1,2,2,2]
+    , Bag [1,2,5]
+    , Bag [1,3,4]
+    , Bag [1,8]
+    , Bag [2,2,4]
+    , Bag [2,3,3]
+    , Bag [2,7]
+    , Bag [3,6]
+    , Bag [4,5]
+    , Bag [10]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Bag Nat ]])  =  [1,1,2,3,5,7,11,15,22,30,42,56,...]
+
+length (list :: [ Bag Nat ])  =  Infinity
+
+allUnique (list :: [ Bag Nat ])  =  True
+
+ratioRepetitions (list :: [ Bag Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-BagNat2.out b/tests/diff/tiers-BagNat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-BagNat2.out
@@ -0,0 +1,63 @@
+tiers :: [Bag Nat2]  =
+  [ [Bag []]
+  , [Bag [0]]
+  , [ Bag [0,0]
+    , Bag [1]
+    ]
+  , [ Bag [0,0,0]
+    , Bag [0,1]
+    ]
+  , [ Bag [0,0,0,0]
+    , Bag [0,0,1]
+    , Bag [1,1]
+    ]
+  , [ Bag [0,0,0,0,0]
+    , Bag [0,0,0,1]
+    , Bag [0,1,1]
+    ]
+  , [ Bag [0,0,0,0,0,0]
+    , Bag [0,0,0,0,1]
+    , Bag [0,0,1,1]
+    , Bag [1,1,1]
+    ]
+  , [ Bag [0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,1]
+    , Bag [0,0,0,1,1]
+    , Bag [0,1,1,1]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,1,1]
+    , Bag [0,0,1,1,1]
+    , Bag [1,1,1,1]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,1,1]
+    , Bag [0,0,0,1,1,1]
+    , Bag [0,1,1,1,1]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,1,1,1]
+    , Bag [0,0,1,1,1,1]
+    , Bag [1,1,1,1,1]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,0,1,1,1]
+    , Bag [0,0,0,1,1,1,1]
+    , Bag [0,1,1,1,1,1]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Bag Nat2 ]])  =  [1,1,2,2,3,3,4,4,5,5,6,6,...]
+
+length (list :: [ Bag Nat2 ])  =  Infinity
+
+allUnique (list :: [ Bag Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Bag Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-BagNat3.out b/tests/diff/tiers-BagNat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-BagNat3.out
@@ -0,0 +1,104 @@
+tiers :: [Bag Nat3]  =
+  [ [Bag []]
+  , [Bag [0]]
+  , [ Bag [0,0]
+    , Bag [1]
+    ]
+  , [ Bag [0,0,0]
+    , Bag [0,1]
+    , Bag [2]
+    ]
+  , [ Bag [0,0,0,0]
+    , Bag [0,0,1]
+    , Bag [0,2]
+    , Bag [1,1]
+    ]
+  , [ Bag [0,0,0,0,0]
+    , Bag [0,0,0,1]
+    , Bag [0,0,2]
+    , Bag [0,1,1]
+    , Bag [1,2]
+    ]
+  , [ Bag [0,0,0,0,0,0]
+    , Bag [0,0,0,0,1]
+    , Bag [0,0,0,2]
+    , Bag [0,0,1,1]
+    , Bag [0,1,2]
+    , Bag [1,1,1]
+    , Bag [2,2]
+    ]
+  , [ Bag [0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,1]
+    , Bag [0,0,0,0,2]
+    , Bag [0,0,0,1,1]
+    , Bag [0,0,1,2]
+    , Bag [0,1,1,1]
+    , Bag [0,2,2]
+    , Bag [1,1,2]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,2]
+    , Bag [0,0,0,0,1,1]
+    , Bag [0,0,0,1,2]
+    , Bag [0,0,1,1,1]
+    , Bag [0,0,2,2]
+    , Bag [0,1,1,2]
+    , Bag [1,1,1,1]
+    , Bag [1,2,2]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,2]
+    , Bag [0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,1,2]
+    , Bag [0,0,0,1,1,1]
+    , Bag [0,0,0,2,2]
+    , Bag [0,0,1,1,2]
+    , Bag [0,1,1,1,1]
+    , Bag [0,1,2,2]
+    , Bag [1,1,1,2]
+    , Bag [2,2,2]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,0,2]
+    , Bag [0,0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,0,1,2]
+    , Bag [0,0,0,0,1,1,1]
+    , Bag [0,0,0,0,2,2]
+    , Bag [0,0,0,1,1,2]
+    , Bag [0,0,1,1,1,1]
+    , Bag [0,0,1,2,2]
+    , Bag [0,1,1,1,2]
+    , Bag [0,2,2,2]
+    , Bag [1,1,1,1,1]
+    , Bag [1,1,2,2]
+    ]
+  , [ Bag [0,0,0,0,0,0,0,0,0,0,0]
+    , Bag [0,0,0,0,0,0,0,0,0,1]
+    , Bag [0,0,0,0,0,0,0,0,2]
+    , Bag [0,0,0,0,0,0,0,1,1]
+    , Bag [0,0,0,0,0,0,1,2]
+    , Bag [0,0,0,0,0,1,1,1]
+    , Bag [0,0,0,0,0,2,2]
+    , Bag [0,0,0,0,1,1,2]
+    , Bag [0,0,0,1,1,1,1]
+    , Bag [0,0,0,1,2,2]
+    , Bag [0,0,1,1,1,2]
+    , Bag [0,0,2,2,2]
+    , Bag [0,1,1,1,1,1]
+    , Bag [0,1,1,2,2]
+    , Bag [1,1,1,1,2]
+    , Bag [1,2,2,2]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Bag Nat3 ]])  =  [1,1,2,3,4,5,7,8,10,12,14,16,...]
+
+length (list :: [ Bag Nat3 ])  =  Infinity
+
+allUnique (list :: [ Bag Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Bag Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-BagU.out b/tests/diff/tiers-BagU.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-BagU.out
@@ -0,0 +1,23 @@
+tiers :: [Bag ()]  =
+  [ [Bag []]
+  , [Bag [()]]
+  , [Bag [(),()]]
+  , [Bag [(),(),()]]
+  , [Bag [(),(),(),()]]
+  , [Bag [(),(),(),(),()]]
+  , [Bag [(),(),(),(),(),()]]
+  , [Bag [(),(),(),(),(),(),()]]
+  , [Bag [(),(),(),(),(),(),(),()]]
+  , [Bag [(),(),(),(),(),(),(),(),()]]
+  , [Bag [(),(),(),(),(),(),(),(),(),()]]
+  , [Bag [(),(),(),(),(),(),(),(),(),(),()]]
+  , ...
+  ]
+
+map length (tiers :: [[ Bag () ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ Bag () ])  =  Infinity
+
+allUnique (list :: [ Bag () ])  =  True
+
+ratioRepetitions (list :: [ Bag () ])  =  0 % 1
diff --git a/tests/diff/tiers-Bool.out b/tests/diff/tiers-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Bool.out
@@ -0,0 +1,13 @@
+tiers :: [Bool]  =
+  [ [ False
+    , True
+    ]
+  ]
+
+map length (tiers :: [[ Bool ]])  =  [2]
+
+length (list :: [ Bool ])  =  2
+
+allUnique (list :: [ Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-Bools.out b/tests/diff/tiers-Bools.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Bools.out
@@ -0,0 +1,79 @@
+tiers :: [[Bool]]  =
+  [ [[]]
+  , [ [False]
+    , [True]
+    ]
+  , [ [False,False]
+    , [False,True]
+    , [True,False]
+    , [True,True]
+    ]
+  , [ [False,False,False]
+    , [False,False,True]
+    , [False,True,False]
+    , [False,True,True]
+    , [True,False,False]
+    , [True,False,True]
+    , [True,True,False]
+    , [True,True,True]
+    ]
+  , [ [False,False,False,False]
+    , [False,False,False,True]
+    , [False,False,True,False]
+    , [False,False,True,True]
+    , [False,True,False,False]
+    , [False,True,False,True]
+    , [False,True,True,False]
+    , [False,True,True,True]
+    , [True,False,False,False]
+    , [True,False,False,True]
+    , [True,False,True,False]
+    , [True,False,True,True]
+    , [True,True,False,False]
+    , [True,True,False,True]
+    , [True,True,True,False]
+    , [True,True,True,True]
+    ]
+  , [ [False,False,False,False,False]
+    , [False,False,False,False,True]
+    , [False,False,False,True,False]
+    , [False,False,False,True,True]
+    , [False,False,True,False,False]
+    , [False,False,True,False,True]
+    , [False,False,True,True,False]
+    , [False,False,True,True,True]
+    , [False,True,False,False,False]
+    , [False,True,False,False,True]
+    , [False,True,False,True,False]
+    , [False,True,False,True,True]
+    , [False,True,True,False,False]
+    , [False,True,True,False,True]
+    , [False,True,True,True,False]
+    , [False,True,True,True,True]
+    , [True,False,False,False,False]
+    , [True,False,False,False,True]
+    , [True,False,False,True,False]
+    , [True,False,False,True,True]
+    , [True,False,True,False,False]
+    , [True,False,True,False,True]
+    , [True,False,True,True,False]
+    , [True,False,True,True,True]
+    , [True,True,False,False,False]
+    , [True,True,False,False,True]
+    , [True,True,False,True,False]
+    , [True,True,False,True,True]
+    , [True,True,True,False,False]
+    , [True,True,True,False,True]
+    , [True,True,True,True,False]
+    , [True,True,True,True,True]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Bool] ]])  =  [1,2,4,8,16,32,...]
+
+length (list :: [ [Bool] ])  =  Infinity
+
+allUnique (list :: [ [Bool] ])  =  True
+
+ratioRepetitions (list :: [ [Bool] ])  =  0 % 1
diff --git a/tests/diff/tiers-Char.out b/tests/diff/tiers-Char.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Char.out
@@ -0,0 +1,23 @@
+tiers :: [Char]  =
+  [ ['a']
+  , [' ']
+  , ['b']
+  , ['A']
+  , ['c']
+  , ['\n']
+  , ['d']
+  , ['0']
+  , ['e']
+  , ['B']
+  , ['f']
+  , ['!']
+  , ...
+  ]
+
+map length (tiers :: [[ Char ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ Char ])  =  Infinity
+
+allUnique (list :: [ Char ])  =  True
+
+ratioRepetitions (list :: [ Char ])  =  0 % 1
diff --git a/tests/diff/tiers-Int,Int,Int.out b/tests/diff/tiers-Int,Int,Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Int,Int,Int.out
@@ -0,0 +1,72 @@
+tiers :: [(Int,Int,Int)]  =
+  [ [(0,0,0)]
+  , [ (0,0,1)
+    , (0,1,0)
+    , (1,0,0)
+    ]
+  , [ (0,0,-1)
+    , (0,1,1)
+    , (0,-1,0)
+    , (1,0,1)
+    , (1,1,0)
+    , (-1,0,0)
+    ]
+  , [ (0,0,2)
+    , (0,1,-1)
+    , (0,-1,1)
+    , (0,2,0)
+    , (1,0,-1)
+    , (1,1,1)
+    , (1,-1,0)
+    , (-1,0,1)
+    , (-1,1,0)
+    , (2,0,0)
+    ]
+  , [ (0,0,-2)
+    , (0,1,2)
+    , (0,-1,-1)
+    , (0,2,1)
+    , (0,-2,0)
+    , (1,0,2)
+    , (1,1,-1)
+    , (1,-1,1)
+    , (1,2,0)
+    , (-1,0,-1)
+    , (-1,1,1)
+    , (-1,-1,0)
+    , (2,0,1)
+    , (2,1,0)
+    , (-2,0,0)
+    ]
+  , [ (0,0,3)
+    , (0,1,-2)
+    , (0,-1,2)
+    , (0,2,-1)
+    , (0,-2,1)
+    , (0,3,0)
+    , (1,0,-2)
+    , (1,1,2)
+    , (1,-1,-1)
+    , (1,2,1)
+    , (1,-2,0)
+    , (-1,0,2)
+    , (-1,1,-1)
+    , (-1,-1,1)
+    , (-1,2,0)
+    , (2,0,-1)
+    , (2,1,1)
+    , (2,-1,0)
+    , (-2,0,1)
+    , (-2,1,0)
+    , (3,0,0)
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Int,Int,Int) ]])  =  [1,3,6,10,15,21,...]
+
+length (list :: [ (Int,Int,Int) ])  =  Infinity
+
+allUnique (list :: [ (Int,Int,Int) ])  =  True
+
+ratioRepetitions (list :: [ (Int,Int,Int) ])  =  0 % 1
diff --git a/tests/diff/tiers-Int,Int.out b/tests/diff/tiers-Int,Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Int,Int.out
@@ -0,0 +1,100 @@
+tiers :: [(Int,Int)]  =
+  [ [(0,0)]
+  , [ (0,1)
+    , (1,0)
+    ]
+  , [ (0,-1)
+    , (1,1)
+    , (-1,0)
+    ]
+  , [ (0,2)
+    , (1,-1)
+    , (-1,1)
+    , (2,0)
+    ]
+  , [ (0,-2)
+    , (1,2)
+    , (-1,-1)
+    , (2,1)
+    , (-2,0)
+    ]
+  , [ (0,3)
+    , (1,-2)
+    , (-1,2)
+    , (2,-1)
+    , (-2,1)
+    , (3,0)
+    ]
+  , [ (0,-3)
+    , (1,3)
+    , (-1,-2)
+    , (2,2)
+    , (-2,-1)
+    , (3,1)
+    , (-3,0)
+    ]
+  , [ (0,4)
+    , (1,-3)
+    , (-1,3)
+    , (2,-2)
+    , (-2,2)
+    , (3,-1)
+    , (-3,1)
+    , (4,0)
+    ]
+  , [ (0,-4)
+    , (1,4)
+    , (-1,-3)
+    , (2,3)
+    , (-2,-2)
+    , (3,2)
+    , (-3,-1)
+    , (4,1)
+    , (-4,0)
+    ]
+  , [ (0,5)
+    , (1,-4)
+    , (-1,4)
+    , (2,-3)
+    , (-2,3)
+    , (3,-2)
+    , (-3,2)
+    , (4,-1)
+    , (-4,1)
+    , (5,0)
+    ]
+  , [ (0,-5)
+    , (1,5)
+    , (-1,-4)
+    , (2,4)
+    , (-2,-3)
+    , (3,3)
+    , (-3,-2)
+    , (4,2)
+    , (-4,-1)
+    , (5,1)
+    , (-5,0)
+    ]
+  , [ (0,6)
+    , (1,-5)
+    , (-1,5)
+    , (2,-4)
+    , (-2,4)
+    , (3,-3)
+    , (-3,3)
+    , (4,-2)
+    , (-4,2)
+    , (5,-1)
+    , (-5,1)
+    , (6,0)
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Int,Int) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]
+
+length (list :: [ (Int,Int) ])  =  Infinity
+
+allUnique (list :: [ (Int,Int) ])  =  True
+
+ratioRepetitions (list :: [ (Int,Int) ])  =  0 % 1
diff --git a/tests/diff/tiers-Int.out b/tests/diff/tiers-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Int.out
@@ -0,0 +1,23 @@
+tiers :: [Int]  =
+  [ [0]
+  , [1]
+  , [-1]
+  , [2]
+  , [-2]
+  , [3]
+  , [-3]
+  , [4]
+  , [-4]
+  , [5]
+  , [-5]
+  , [6]
+  , ...
+  ]
+
+map length (tiers :: [[ Int ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ Int ])  =  Infinity
+
+allUnique (list :: [ Int ])  =  True
+
+ratioRepetitions (list :: [ Int ])  =  0 % 1
diff --git a/tests/diff/tiers-Integer.out b/tests/diff/tiers-Integer.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Integer.out
@@ -0,0 +1,23 @@
+tiers :: [Integer]  =
+  [ [0]
+  , [1]
+  , [-1]
+  , [2]
+  , [-2]
+  , [3]
+  , [-3]
+  , [4]
+  , [-4]
+  , [5]
+  , [-5]
+  , [6]
+  , ...
+  ]
+
+map length (tiers :: [[ Integer ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ Integer ])  =  Infinity
+
+allUnique (list :: [ Integer ])  =  True
+
+ratioRepetitions (list :: [ Integer ])  =  0 % 1
diff --git a/tests/diff/tiers-Ints.out b/tests/diff/tiers-Ints.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Ints.out
@@ -0,0 +1,47 @@
+tiers :: [[Int]]  =
+  [ [[]]
+  , [[0]]
+  , [ [0,0]
+    , [1]
+    ]
+  , [ [0,0,0]
+    , [0,1]
+    , [1,0]
+    , [-1]
+    ]
+  , [ [0,0,0,0]
+    , [0,0,1]
+    , [0,1,0]
+    , [0,-1]
+    , [1,0,0]
+    , [1,1]
+    , [-1,0]
+    , [2]
+    ]
+  , [ [0,0,0,0,0]
+    , [0,0,0,1]
+    , [0,0,1,0]
+    , [0,0,-1]
+    , [0,1,0,0]
+    , [0,1,1]
+    , [0,-1,0]
+    , [0,2]
+    , [1,0,0,0]
+    , [1,0,1]
+    , [1,1,0]
+    , [1,-1]
+    , [-1,0,0]
+    , [-1,1]
+    , [2,0]
+    , [-2]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Int] ]])  =  [1,1,2,4,8,16,...]
+
+length (list :: [ [Int] ])  =  Infinity
+
+allUnique (list :: [ [Int] ])  =  True
+
+ratioRepetitions (list :: [ [Int] ])  =  0 % 1
diff --git a/tests/diff/tiers-Nat,Nat,Nat.out b/tests/diff/tiers-Nat,Nat,Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Nat,Nat,Nat.out
@@ -0,0 +1,72 @@
+tiers :: [(Nat,Nat,Nat)]  =
+  [ [(0,0,0)]
+  , [ (0,0,1)
+    , (0,1,0)
+    , (1,0,0)
+    ]
+  , [ (0,0,2)
+    , (0,1,1)
+    , (0,2,0)
+    , (1,0,1)
+    , (1,1,0)
+    , (2,0,0)
+    ]
+  , [ (0,0,3)
+    , (0,1,2)
+    , (0,2,1)
+    , (0,3,0)
+    , (1,0,2)
+    , (1,1,1)
+    , (1,2,0)
+    , (2,0,1)
+    , (2,1,0)
+    , (3,0,0)
+    ]
+  , [ (0,0,4)
+    , (0,1,3)
+    , (0,2,2)
+    , (0,3,1)
+    , (0,4,0)
+    , (1,0,3)
+    , (1,1,2)
+    , (1,2,1)
+    , (1,3,0)
+    , (2,0,2)
+    , (2,1,1)
+    , (2,2,0)
+    , (3,0,1)
+    , (3,1,0)
+    , (4,0,0)
+    ]
+  , [ (0,0,5)
+    , (0,1,4)
+    , (0,2,3)
+    , (0,3,2)
+    , (0,4,1)
+    , (0,5,0)
+    , (1,0,4)
+    , (1,1,3)
+    , (1,2,2)
+    , (1,3,1)
+    , (1,4,0)
+    , (2,0,3)
+    , (2,1,2)
+    , (2,2,1)
+    , (2,3,0)
+    , (3,0,2)
+    , (3,1,1)
+    , (3,2,0)
+    , (4,0,1)
+    , (4,1,0)
+    , (5,0,0)
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Nat,Nat,Nat) ]])  =  [1,3,6,10,15,21,...]
+
+length (list :: [ (Nat,Nat,Nat) ])  =  Infinity
+
+allUnique (list :: [ (Nat,Nat,Nat) ])  =  True
+
+ratioRepetitions (list :: [ (Nat,Nat,Nat) ])  =  0 % 1
diff --git a/tests/diff/tiers-Nat,Nat.out b/tests/diff/tiers-Nat,Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Nat,Nat.out
@@ -0,0 +1,100 @@
+tiers :: [(Nat,Nat)]  =
+  [ [(0,0)]
+  , [ (0,1)
+    , (1,0)
+    ]
+  , [ (0,2)
+    , (1,1)
+    , (2,0)
+    ]
+  , [ (0,3)
+    , (1,2)
+    , (2,1)
+    , (3,0)
+    ]
+  , [ (0,4)
+    , (1,3)
+    , (2,2)
+    , (3,1)
+    , (4,0)
+    ]
+  , [ (0,5)
+    , (1,4)
+    , (2,3)
+    , (3,2)
+    , (4,1)
+    , (5,0)
+    ]
+  , [ (0,6)
+    , (1,5)
+    , (2,4)
+    , (3,3)
+    , (4,2)
+    , (5,1)
+    , (6,0)
+    ]
+  , [ (0,7)
+    , (1,6)
+    , (2,5)
+    , (3,4)
+    , (4,3)
+    , (5,2)
+    , (6,1)
+    , (7,0)
+    ]
+  , [ (0,8)
+    , (1,7)
+    , (2,6)
+    , (3,5)
+    , (4,4)
+    , (5,3)
+    , (6,2)
+    , (7,1)
+    , (8,0)
+    ]
+  , [ (0,9)
+    , (1,8)
+    , (2,7)
+    , (3,6)
+    , (4,5)
+    , (5,4)
+    , (6,3)
+    , (7,2)
+    , (8,1)
+    , (9,0)
+    ]
+  , [ (0,10)
+    , (1,9)
+    , (2,8)
+    , (3,7)
+    , (4,6)
+    , (5,5)
+    , (6,4)
+    , (7,3)
+    , (8,2)
+    , (9,1)
+    , (10,0)
+    ]
+  , [ (0,11)
+    , (1,10)
+    , (2,9)
+    , (3,8)
+    , (4,7)
+    , (5,6)
+    , (6,5)
+    , (7,4)
+    , (8,3)
+    , (9,2)
+    , (10,1)
+    , (11,0)
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Nat,Nat) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]
+
+length (list :: [ (Nat,Nat) ])  =  Infinity
+
+allUnique (list :: [ (Nat,Nat) ])  =  True
+
+ratioRepetitions (list :: [ (Nat,Nat) ])  =  0 % 1
diff --git a/tests/diff/tiers-Nat.out b/tests/diff/tiers-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Nat.out
@@ -0,0 +1,23 @@
+tiers :: [Nat]  =
+  [ [0]
+  , [1]
+  , [2]
+  , [3]
+  , [4]
+  , [5]
+  , [6]
+  , [7]
+  , [8]
+  , [9]
+  , [10]
+  , [11]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ Nat ])  =  Infinity
+
+allUnique (list :: [ Nat ])  =  True
+
+ratioRepetitions (list :: [ Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-Nats.out b/tests/diff/tiers-Nats.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Nats.out
@@ -0,0 +1,47 @@
+tiers :: [[Nat]]  =
+  [ [[]]
+  , [[0]]
+  , [ [0,0]
+    , [1]
+    ]
+  , [ [0,0,0]
+    , [0,1]
+    , [1,0]
+    , [2]
+    ]
+  , [ [0,0,0,0]
+    , [0,0,1]
+    , [0,1,0]
+    , [0,2]
+    , [1,0,0]
+    , [1,1]
+    , [2,0]
+    , [3]
+    ]
+  , [ [0,0,0,0,0]
+    , [0,0,0,1]
+    , [0,0,1,0]
+    , [0,0,2]
+    , [0,1,0,0]
+    , [0,1,1]
+    , [0,2,0]
+    , [0,3]
+    , [1,0,0,0]
+    , [1,0,1]
+    , [1,1,0]
+    , [1,2]
+    , [2,0,0]
+    , [2,1]
+    , [3,0]
+    , [4]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Nat] ]])  =  [1,1,2,4,8,16,...]
+
+length (list :: [ [Nat] ])  =  Infinity
+
+allUnique (list :: [ [Nat] ])  =  True
+
+ratioRepetitions (list :: [ [Nat] ])  =  0 % 1
diff --git a/tests/diff/tiers-NoDupBool.out b/tests/diff/tiers-NoDupBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-NoDupBool.out
@@ -0,0 +1,17 @@
+tiers :: [NoDup Bool]  =
+  [ [NoDup []]
+  , [ NoDup [False]
+    , NoDup [True]
+    ]
+  , [ NoDup [False,True]
+    , NoDup [True,False]
+    ]
+  ]
+
+map length (tiers :: [[ NoDup Bool ]])  =  [1,2,2]
+
+length (list :: [ NoDup Bool ])  =  5
+
+allUnique (list :: [ NoDup Bool ])  =  True
+
+ratioRepetitions (list :: [ NoDup Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-NoDupNat.out b/tests/diff/tiers-NoDupNat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-NoDupNat.out
@@ -0,0 +1,226 @@
+tiers :: [NoDup Nat]  =
+  [ [NoDup []]
+  , [NoDup [0]]
+  , [NoDup [1]]
+  , [ NoDup [0,1]
+    , NoDup [1,0]
+    , NoDup [2]
+    ]
+  , [ NoDup [0,2]
+    , NoDup [2,0]
+    , NoDup [3]
+    ]
+  , [ NoDup [0,3]
+    , NoDup [1,2]
+    , NoDup [2,1]
+    , NoDup [3,0]
+    , NoDup [4]
+    ]
+  , [ NoDup [0,1,2]
+    , NoDup [0,2,1]
+    , NoDup [0,4]
+    , NoDup [1,0,2]
+    , NoDup [1,2,0]
+    , NoDup [1,3]
+    , NoDup [2,0,1]
+    , NoDup [2,1,0]
+    , NoDup [3,1]
+    , NoDup [4,0]
+    , NoDup [5]
+    ]
+  , [ NoDup [0,1,3]
+    , NoDup [0,3,1]
+    , NoDup [0,5]
+    , NoDup [1,0,3]
+    , NoDup [1,3,0]
+    , NoDup [1,4]
+    , NoDup [2,3]
+    , NoDup [3,0,1]
+    , NoDup [3,1,0]
+    , NoDup [3,2]
+    , NoDup [4,1]
+    , NoDup [5,0]
+    , NoDup [6]
+    ]
+  , [ NoDup [0,1,4]
+    , NoDup [0,2,3]
+    , NoDup [0,3,2]
+    , NoDup [0,4,1]
+    , NoDup [0,6]
+    , NoDup [1,0,4]
+    , NoDup [1,4,0]
+    , NoDup [1,5]
+    , NoDup [2,0,3]
+    , NoDup [2,3,0]
+    , NoDup [2,4]
+    , NoDup [3,0,2]
+    , NoDup [3,2,0]
+    , NoDup [4,0,1]
+    , NoDup [4,1,0]
+    , NoDup [4,2]
+    , NoDup [5,1]
+    , NoDup [6,0]
+    , NoDup [7]
+    ]
+  , [ NoDup [0,1,5]
+    , NoDup [0,2,4]
+    , NoDup [0,4,2]
+    , NoDup [0,5,1]
+    , NoDup [0,7]
+    , NoDup [1,0,5]
+    , NoDup [1,2,3]
+    , NoDup [1,3,2]
+    , NoDup [1,5,0]
+    , NoDup [1,6]
+    , NoDup [2,0,4]
+    , NoDup [2,1,3]
+    , NoDup [2,3,1]
+    , NoDup [2,4,0]
+    , NoDup [2,5]
+    , NoDup [3,1,2]
+    , NoDup [3,2,1]
+    , NoDup [3,4]
+    , NoDup [4,0,2]
+    , NoDup [4,2,0]
+    , NoDup [4,3]
+    , NoDup [5,0,1]
+    , NoDup [5,1,0]
+    , NoDup [5,2]
+    , NoDup [6,1]
+    , NoDup [7,0]
+    , NoDup [8]
+    ]
+  , [ NoDup [0,1,2,3]
+    , NoDup [0,1,3,2]
+    , NoDup [0,1,6]
+    , NoDup [0,2,1,3]
+    , NoDup [0,2,3,1]
+    , NoDup [0,2,5]
+    , NoDup [0,3,1,2]
+    , NoDup [0,3,2,1]
+    , NoDup [0,3,4]
+    , NoDup [0,4,3]
+    , NoDup [0,5,2]
+    , NoDup [0,6,1]
+    , NoDup [0,8]
+    , NoDup [1,0,2,3]
+    , NoDup [1,0,3,2]
+    , NoDup [1,0,6]
+    , NoDup [1,2,0,3]
+    , NoDup [1,2,3,0]
+    , NoDup [1,2,4]
+    , NoDup [1,3,0,2]
+    , NoDup [1,3,2,0]
+    , NoDup [1,4,2]
+    , NoDup [1,6,0]
+    , NoDup [1,7]
+    , NoDup [2,0,1,3]
+    , NoDup [2,0,3,1]
+    , NoDup [2,0,5]
+    , NoDup [2,1,0,3]
+    , NoDup [2,1,3,0]
+    , NoDup [2,1,4]
+    , NoDup [2,3,0,1]
+    , NoDup [2,3,1,0]
+    , NoDup [2,4,1]
+    , NoDup [2,5,0]
+    , NoDup [2,6]
+    , NoDup [3,0,1,2]
+    , NoDup [3,0,2,1]
+    , NoDup [3,0,4]
+    , NoDup [3,1,0,2]
+    , NoDup [3,1,2,0]
+    , NoDup [3,2,0,1]
+    , NoDup [3,2,1,0]
+    , NoDup [3,4,0]
+    , NoDup [3,5]
+    , NoDup [4,0,3]
+    , NoDup [4,1,2]
+    , NoDup [4,2,1]
+    , NoDup [4,3,0]
+    , NoDup [5,0,2]
+    , NoDup [5,2,0]
+    , NoDup [5,3]
+    , NoDup [6,0,1]
+    , NoDup [6,1,0]
+    , NoDup [6,2]
+    , NoDup [7,1]
+    , NoDup [8,0]
+    , NoDup [9]
+    ]
+  , [ NoDup [0,1,2,4]
+    , NoDup [0,1,4,2]
+    , NoDup [0,1,7]
+    , NoDup [0,2,1,4]
+    , NoDup [0,2,4,1]
+    , NoDup [0,2,6]
+    , NoDup [0,3,5]
+    , NoDup [0,4,1,2]
+    , NoDup [0,4,2,1]
+    , NoDup [0,5,3]
+    , NoDup [0,6,2]
+    , NoDup [0,7,1]
+    , NoDup [0,9]
+    , NoDup [1,0,2,4]
+    , NoDup [1,0,4,2]
+    , NoDup [1,0,7]
+    , NoDup [1,2,0,4]
+    , NoDup [1,2,4,0]
+    , NoDup [1,2,5]
+    , NoDup [1,3,4]
+    , NoDup [1,4,0,2]
+    , NoDup [1,4,2,0]
+    , NoDup [1,4,3]
+    , NoDup [1,5,2]
+    , NoDup [1,7,0]
+    , NoDup [1,8]
+    , NoDup [2,0,1,4]
+    , NoDup [2,0,4,1]
+    , NoDup [2,0,6]
+    , NoDup [2,1,0,4]
+    , NoDup [2,1,4,0]
+    , NoDup [2,1,5]
+    , NoDup [2,4,0,1]
+    , NoDup [2,4,1,0]
+    , NoDup [2,5,1]
+    , NoDup [2,6,0]
+    , NoDup [2,7]
+    , NoDup [3,0,5]
+    , NoDup [3,1,4]
+    , NoDup [3,4,1]
+    , NoDup [3,5,0]
+    , NoDup [3,6]
+    , NoDup [4,0,1,2]
+    , NoDup [4,0,2,1]
+    , NoDup [4,1,0,2]
+    , NoDup [4,1,2,0]
+    , NoDup [4,1,3]
+    , NoDup [4,2,0,1]
+    , NoDup [4,2,1,0]
+    , NoDup [4,3,1]
+    , NoDup [4,5]
+    , NoDup [5,0,3]
+    , NoDup [5,1,2]
+    , NoDup [5,2,1]
+    , NoDup [5,3,0]
+    , NoDup [5,4]
+    , NoDup [6,0,2]
+    , NoDup [6,2,0]
+    , NoDup [6,3]
+    , NoDup [7,0,1]
+    , NoDup [7,1,0]
+    , NoDup [7,2]
+    , NoDup [8,1]
+    , NoDup [9,0]
+    , NoDup [10]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ NoDup Nat ]])  =  [1,1,1,3,3,5,11,13,19,27,57,65,...]
+
+length (list :: [ NoDup Nat ])  =  Infinity
+
+allUnique (list :: [ NoDup Nat ])  =  True
+
+ratioRepetitions (list :: [ NoDup Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-NoDupNat2.out b/tests/diff/tiers-NoDupNat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-NoDupNat2.out
@@ -0,0 +1,16 @@
+tiers :: [NoDup Nat2]  =
+  [ [NoDup []]
+  , [NoDup [0]]
+  , [NoDup [1]]
+  , [ NoDup [0,1]
+    , NoDup [1,0]
+    ]
+  ]
+
+map length (tiers :: [[ NoDup Nat2 ]])  =  [1,1,1,2]
+
+length (list :: [ NoDup Nat2 ])  =  5
+
+allUnique (list :: [ NoDup Nat2 ])  =  True
+
+ratioRepetitions (list :: [ NoDup Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-NoDupNat3.out b/tests/diff/tiers-NoDupNat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-NoDupNat3.out
@@ -0,0 +1,30 @@
+tiers :: [NoDup Nat3]  =
+  [ [NoDup []]
+  , [NoDup [0]]
+  , [NoDup [1]]
+  , [ NoDup [0,1]
+    , NoDup [1,0]
+    , NoDup [2]
+    ]
+  , [ NoDup [0,2]
+    , NoDup [2,0]
+    ]
+  , [ NoDup [1,2]
+    , NoDup [2,1]
+    ]
+  , [ NoDup [0,1,2]
+    , NoDup [0,2,1]
+    , NoDup [1,0,2]
+    , NoDup [1,2,0]
+    , NoDup [2,0,1]
+    , NoDup [2,1,0]
+    ]
+  ]
+
+map length (tiers :: [[ NoDup Nat3 ]])  =  [1,1,1,3,2,2,6]
+
+length (list :: [ NoDup Nat3 ])  =  Infinity
+
+allUnique (list :: [ NoDup Nat3 ])  =  True
+
+ratioRepetitions (list :: [ NoDup Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-NoDupU.out b/tests/diff/tiers-NoDupU.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-NoDupU.out
@@ -0,0 +1,12 @@
+tiers :: [NoDup ()]  =
+  [ [NoDup []]
+  , [NoDup [()]]
+  ]
+
+map length (tiers :: [[ NoDup () ]])  =  [1,1]
+
+length (list :: [ NoDup () ])  =  2
+
+allUnique (list :: [ NoDup () ])  =  True
+
+ratioRepetitions (list :: [ NoDup () ])  =  0 % 1
diff --git a/tests/diff/tiers-SetBool.out b/tests/diff/tiers-SetBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-SetBool.out
@@ -0,0 +1,15 @@
+tiers :: [Set Bool]  =
+  [ [Set []]
+  , [ Set [False]
+    , Set [True]
+    ]
+  , [Set [False,True]]
+  ]
+
+map length (tiers :: [[ Set Bool ]])  =  [1,2,1]
+
+length (list :: [ Set Bool ])  =  4
+
+allUnique (list :: [ Set Bool ])  =  True
+
+ratioRepetitions (list :: [ Set Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-SetNat.out b/tests/diff/tiers-SetNat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-SetNat.out
@@ -0,0 +1,75 @@
+tiers :: [Set Nat]  =
+  [ [Set []]
+  , [Set [0]]
+  , [Set [1]]
+  , [ Set [0,1]
+    , Set [2]
+    ]
+  , [ Set [0,2]
+    , Set [3]
+    ]
+  , [ Set [0,3]
+    , Set [1,2]
+    , Set [4]
+    ]
+  , [ Set [0,1,2]
+    , Set [0,4]
+    , Set [1,3]
+    , Set [5]
+    ]
+  , [ Set [0,1,3]
+    , Set [0,5]
+    , Set [1,4]
+    , Set [2,3]
+    , Set [6]
+    ]
+  , [ Set [0,1,4]
+    , Set [0,2,3]
+    , Set [0,6]
+    , Set [1,5]
+    , Set [2,4]
+    , Set [7]
+    ]
+  , [ Set [0,1,5]
+    , Set [0,2,4]
+    , Set [0,7]
+    , Set [1,2,3]
+    , Set [1,6]
+    , Set [2,5]
+    , Set [3,4]
+    , Set [8]
+    ]
+  , [ Set [0,1,2,3]
+    , Set [0,1,6]
+    , Set [0,2,5]
+    , Set [0,3,4]
+    , Set [0,8]
+    , Set [1,2,4]
+    , Set [1,7]
+    , Set [2,6]
+    , Set [3,5]
+    , Set [9]
+    ]
+  , [ Set [0,1,2,4]
+    , Set [0,1,7]
+    , Set [0,2,6]
+    , Set [0,3,5]
+    , Set [0,9]
+    , Set [1,2,5]
+    , Set [1,3,4]
+    , Set [1,8]
+    , Set [2,7]
+    , Set [3,6]
+    , Set [4,5]
+    , Set [10]
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Set Nat ]])  =  [1,1,1,2,2,3,4,5,6,8,10,12,...]
+
+length (list :: [ Set Nat ])  =  Infinity
+
+allUnique (list :: [ Set Nat ])  =  True
+
+ratioRepetitions (list :: [ Set Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-SetNat2.out b/tests/diff/tiers-SetNat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-SetNat2.out
@@ -0,0 +1,14 @@
+tiers :: [Set Nat2]  =
+  [ [Set []]
+  , [Set [0]]
+  , [Set [1]]
+  , [Set [0,1]]
+  ]
+
+map length (tiers :: [[ Set Nat2 ]])  =  [1,1,1,1]
+
+length (list :: [ Set Nat2 ])  =  4
+
+allUnique (list :: [ Set Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Set Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-SetNat3.out b/tests/diff/tiers-SetNat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-SetNat3.out
@@ -0,0 +1,19 @@
+tiers :: [Set Nat3]  =
+  [ [Set []]
+  , [Set [0]]
+  , [Set [1]]
+  , [ Set [0,1]
+    , Set [2]
+    ]
+  , [Set [0,2]]
+  , [Set [1,2]]
+  , [Set [0,1,2]]
+  ]
+
+map length (tiers :: [[ Set Nat3 ]])  =  [1,1,1,2,1,1,1]
+
+length (list :: [ Set Nat3 ])  =  8
+
+allUnique (list :: [ Set Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Set Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-SetU.out b/tests/diff/tiers-SetU.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-SetU.out
@@ -0,0 +1,12 @@
+tiers :: [Set ()]  =
+  [ [Set []]
+  , [Set [()]]
+  ]
+
+map length (tiers :: [[ Set () ]])  =  [1,1]
+
+length (list :: [ Set () ])  =  2
+
+allUnique (list :: [ Set () ])  =  True
+
+ratioRepetitions (list :: [ Set () ])  =  0 % 1
diff --git a/tests/diff/tiers-String.out b/tests/diff/tiers-String.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-String.out
@@ -0,0 +1,47 @@
+tiers :: [String]  =
+  [ [""]
+  , ["a"]
+  , [ "aa"
+    , " "
+    ]
+  , [ "aaa"
+    , "a "
+    , " a"
+    , "b"
+    ]
+  , [ "aaaa"
+    , "aa "
+    , "a a"
+    , "ab"
+    , " aa"
+    , "  "
+    , "ba"
+    , "A"
+    ]
+  , [ "aaaaa"
+    , "aaa "
+    , "aa a"
+    , "aab"
+    , "a aa"
+    , "a  "
+    , "aba"
+    , "aA"
+    , " aaa"
+    , " a "
+    , "  a"
+    , " b"
+    , "baa"
+    , "b "
+    , "Aa"
+    , "c"
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ String ]])  =  [1,1,2,4,8,16,...]
+
+length (list :: [ String ])  =  Infinity
+
+allUnique (list :: [ String ])  =  True
+
+ratioRepetitions (list :: [ String ])  =  0 % 1
diff --git a/tests/diff/tiers-U,Us.out b/tests/diff/tiers-U,Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-U,Us.out
@@ -0,0 +1,23 @@
+tiers :: [[((),())]]  =
+  [ [[]]
+  , [[((),())]]
+  , [[((),()),((),())]]
+  , [[((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),())]]
+  , [[((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),())]]
+  , ...
+  ]
+
+map length (tiers :: [[ [((),())] ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ [((),())] ])  =  Infinity
+
+allUnique (list :: [ [((),())] ])  =  True
+
+ratioRepetitions (list :: [ [((),())] ])  =  0 % 1
diff --git a/tests/diff/tiers-Us,Us.out b/tests/diff/tiers-Us,Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Us,Us.out
@@ -0,0 +1,100 @@
+tiers :: [([()],[()])]  =
+  [ [([],[])]
+  , [ ([],[()])
+    , ([()],[])
+    ]
+  , [ ([],[(),()])
+    , ([()],[()])
+    , ([(),()],[])
+    ]
+  , [ ([],[(),(),()])
+    , ([()],[(),()])
+    , ([(),()],[()])
+    , ([(),(),()],[])
+    ]
+  , [ ([],[(),(),(),()])
+    , ([()],[(),(),()])
+    , ([(),()],[(),()])
+    , ([(),(),()],[()])
+    , ([(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),()])
+    , ([()],[(),(),(),()])
+    , ([(),()],[(),(),()])
+    , ([(),(),()],[(),()])
+    , ([(),(),(),()],[()])
+    , ([(),(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),(),()])
+    , ([()],[(),(),(),(),()])
+    , ([(),()],[(),(),(),()])
+    , ([(),(),()],[(),(),()])
+    , ([(),(),(),()],[(),()])
+    , ([(),(),(),(),()],[()])
+    , ([(),(),(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),(),(),()])
+    , ([()],[(),(),(),(),(),()])
+    , ([(),()],[(),(),(),(),()])
+    , ([(),(),()],[(),(),(),()])
+    , ([(),(),(),()],[(),(),()])
+    , ([(),(),(),(),()],[(),()])
+    , ([(),(),(),(),(),()],[()])
+    , ([(),(),(),(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),(),(),(),()])
+    , ([()],[(),(),(),(),(),(),()])
+    , ([(),()],[(),(),(),(),(),()])
+    , ([(),(),()],[(),(),(),(),()])
+    , ([(),(),(),()],[(),(),(),()])
+    , ([(),(),(),(),()],[(),(),()])
+    , ([(),(),(),(),(),()],[(),()])
+    , ([(),(),(),(),(),(),()],[()])
+    , ([(),(),(),(),(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),(),(),(),(),()])
+    , ([()],[(),(),(),(),(),(),(),()])
+    , ([(),()],[(),(),(),(),(),(),()])
+    , ([(),(),()],[(),(),(),(),(),()])
+    , ([(),(),(),()],[(),(),(),(),()])
+    , ([(),(),(),(),()],[(),(),(),()])
+    , ([(),(),(),(),(),()],[(),(),()])
+    , ([(),(),(),(),(),(),()],[(),()])
+    , ([(),(),(),(),(),(),(),()],[()])
+    , ([(),(),(),(),(),(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),(),(),(),(),(),()])
+    , ([()],[(),(),(),(),(),(),(),(),()])
+    , ([(),()],[(),(),(),(),(),(),(),()])
+    , ([(),(),()],[(),(),(),(),(),(),()])
+    , ([(),(),(),()],[(),(),(),(),(),()])
+    , ([(),(),(),(),()],[(),(),(),(),()])
+    , ([(),(),(),(),(),()],[(),(),(),()])
+    , ([(),(),(),(),(),(),()],[(),(),()])
+    , ([(),(),(),(),(),(),(),()],[(),()])
+    , ([(),(),(),(),(),(),(),(),()],[()])
+    , ([(),(),(),(),(),(),(),(),(),()],[])
+    ]
+  , [ ([],[(),(),(),(),(),(),(),(),(),(),()])
+    , ([()],[(),(),(),(),(),(),(),(),(),()])
+    , ([(),()],[(),(),(),(),(),(),(),(),()])
+    , ([(),(),()],[(),(),(),(),(),(),(),()])
+    , ([(),(),(),()],[(),(),(),(),(),(),()])
+    , ([(),(),(),(),()],[(),(),(),(),(),()])
+    , ([(),(),(),(),(),()],[(),(),(),(),()])
+    , ([(),(),(),(),(),(),()],[(),(),(),()])
+    , ([(),(),(),(),(),(),(),()],[(),(),()])
+    , ([(),(),(),(),(),(),(),(),()],[(),()])
+    , ([(),(),(),(),(),(),(),(),(),()],[()])
+    , ([(),(),(),(),(),(),(),(),(),(),()],[])
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ ([()],[()]) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]
+
+length (list :: [ ([()],[()]) ])  =  Infinity
+
+allUnique (list :: [ ([()],[()]) ])  =  True
+
+ratioRepetitions (list :: [ ([()],[()]) ])  =  0 % 1
diff --git a/tests/diff/tiers-Us.out b/tests/diff/tiers-Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-Us.out
@@ -0,0 +1,23 @@
+tiers :: [[()]]  =
+  [ [[]]
+  , [[()]]
+  , [[(),()]]
+  , [[(),(),()]]
+  , [[(),(),(),()]]
+  , [[(),(),(),(),()]]
+  , [[(),(),(),(),(),()]]
+  , [[(),(),(),(),(),(),()]]
+  , [[(),(),(),(),(),(),(),()]]
+  , [[(),(),(),(),(),(),(),(),()]]
+  , [[(),(),(),(),(),(),(),(),(),()]]
+  , [[(),(),(),(),(),(),(),(),(),(),()]]
+  , ...
+  ]
+
+map length (tiers :: [[ [()] ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]
+
+length (list :: [ [()] ])  =  Infinity
+
+allUnique (list :: [ [()] ])  =  True
+
+ratioRepetitions (list :: [ [()] ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Bool-Bool.out b/tests/diff/tiers-colistable-Bool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Bool-Bool.out
@@ -0,0 +1,23 @@
+tiers :: [Bool->Bool]  =
+  [ [ \x -> case x of
+              False -> False
+              True -> False
+    , \x -> case x of
+              False -> True
+              True -> False
+    , \x -> case x of
+              False -> False
+              True -> True
+    , \x -> case x of
+              False -> True
+              True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Bool ]])  =  [4]
+
+length (list :: [ Bool->Bool ])  =  4
+
+allUnique (list :: [ Bool->Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Bool-MBool.out b/tests/diff/tiers-colistable-Bool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Bool-MBool.out
@@ -0,0 +1,40 @@
+tiers :: [Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              False -> Nothing
+              True -> Nothing
+    ]
+  , [ \x -> case x of
+              False -> Just False
+              True -> Nothing
+    , \x -> case x of
+              False -> Just True
+              True -> Nothing
+    , \x -> case x of
+              False -> Nothing
+              True -> Just False
+    , \x -> case x of
+              False -> Nothing
+              True -> Just True
+    ]
+  , [ \x -> case x of
+              False -> Just False
+              True -> Just False
+    , \x -> case x of
+              False -> Just True
+              True -> Just False
+    , \x -> case x of
+              False -> Just False
+              True -> Just True
+    , \x -> case x of
+              False -> Just True
+              True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]
+
+length (list :: [ Bool->Maybe Bool ])  =  9
+
+allUnique (list :: [ Bool->Maybe Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Bool-U.out b/tests/diff/tiers-colistable-Bool-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Bool-U.out
@@ -0,0 +1,14 @@
+tiers :: [Bool->()]  =
+  [ [ \x -> case x of
+              False -> ()
+              True -> ()
+    ]
+  ]
+
+map length (tiers :: [[ Bool->() ]])  =  [1]
+
+length (list :: [ Bool->() ])  =  1
+
+allUnique (list :: [ Bool->() ])  =  True
+
+ratioRepetitions (list :: [ Bool->() ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Bools-Bools.out b/tests/diff/tiers-colistable-Bools-Bools.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Bools-Bools.out
@@ -0,0 +1,745 @@
+tiers :: [[Bool]->[Bool]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False,False]
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False,False,False]
+              [False] -> [False,False,False]
+              [True] -> [False,False,False]
+              [False,False] -> [False,False,False]
+              [False,True] -> [False,False,False]
+              [True,False] -> [False,False,False]
+              [True,True] -> [False,False,False]
+              [False,False,False] -> [False,False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,False,True]
+              [False] -> [False,False,True]
+              [True] -> [False,False,True]
+              [False,False] -> [False,False,True]
+              [False,True] -> [False,False,True]
+              [True,False] -> [False,False,True]
+              [True,True] -> [False,False,True]
+              [False,False,False] -> [False,False,True]
+              ...
+    , \x -> case x of
+              [] -> [False,True,False]
+              [False] -> [False,True,False]
+              [True] -> [False,True,False]
+              [False,False] -> [False,True,False]
+              [False,True] -> [False,True,False]
+              [True,False] -> [False,True,False]
+              [True,True] -> [False,True,False]
+              [False,False,False] -> [False,True,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True,True]
+              [False] -> [False,True,True]
+              [True] -> [False,True,True]
+              [False,False] -> [False,True,True]
+              [False,True] -> [False,True,True]
+              [True,False] -> [False,True,True]
+              [True,True] -> [False,True,True]
+              [False,False,False] -> [False,True,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False,False]
+              [False] -> [True,False,False]
+              [True] -> [True,False,False]
+              [False,False] -> [True,False,False]
+              [False,True] -> [True,False,False]
+              [True,False] -> [True,False,False]
+              [True,True] -> [True,False,False]
+              [False,False,False] -> [True,False,False]
+              ...
+    , \x -> case x of
+              [] -> [True,False,True]
+              [False] -> [True,False,True]
+              [True] -> [True,False,True]
+              [False,False] -> [True,False,True]
+              [False,True] -> [True,False,True]
+              [True,False] -> [True,False,True]
+              [True,True] -> [True,False,True]
+              [False,False,False] -> [True,False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,True,False]
+              [False] -> [True,True,False]
+              [True] -> [True,True,False]
+              [False,False] -> [True,True,False]
+              [False,True] -> [True,True,False]
+              [True,False] -> [True,True,False]
+              [True,True] -> [True,True,False]
+              [False,False,False] -> [True,True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True,True]
+              [False] -> [True,True,True]
+              [True] -> [True,True,True]
+              [False,False] -> [True,True,True]
+              [False,True] -> [True,True,True]
+              [True,False] -> [True,True,True]
+              [True,True] -> [True,True,True]
+              [False,False,False] -> [True,True,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,False]
+              [True] -> []
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,True]
+              [True] -> []
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,False]
+              [True] -> []
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,True]
+              [True] -> []
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> [False]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> [True]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False,False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False,True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True,False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True,True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,3,12,57,...]
+
+length (list :: [ [Bool]->[Bool] ])  =  Infinity
+
+allUnique (list :: [ [Bool]->[Bool] ])  =  False
+
+ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  16 % 73
diff --git a/tests/diff/tiers-colistable-Int-Int-Int.out b/tests/diff/tiers-colistable-Int-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Int-Int-Int.out
@@ -0,0 +1,625 @@
+tiers :: [Int->Int->Int]  =
+  [ [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,-1) -> 2
+                (1,1) -> 2
+                (-1,0) -> 2
+                (0,2) -> 2
+                (1,-1) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Int->Int->Int ]])  =  [1,3,11,46,...]
+
+length (list :: [ Int->Int->Int ])  =  Infinity
+
+allUnique (list :: [ Int->Int->Int ])  =  False
+
+ratioRepetitions (list :: [ Int->Int->Int ])  =  37 % 61
diff --git a/tests/diff/tiers-colistable-Int-Int.out b/tests/diff/tiers-colistable-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Int-Int.out
@@ -0,0 +1,2637 @@
+tiers :: [Int->Int]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> -2
+              1 -> -2
+              -1 -> -2
+              2 -> -2
+              -2 -> -2
+              3 -> -2
+              -3 -> -2
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 2
+              2 -> 0
+              -2 -> 2
+              3 -> 0
+              -3 -> 2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> -1
+              2 -> 1
+              -2 -> -1
+              3 -> 1
+              -3 -> -1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 1
+              2 -> -1
+              -2 -> 1
+              3 -> -1
+              -3 -> 1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 0
+              2 -> 2
+              -2 -> 0
+              3 -> 2
+              -3 -> 0
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 3
+              1 -> 3
+              -1 -> 3
+              2 -> 3
+              -2 -> 3
+              3 -> 3
+              -3 -> 3
+              4 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -2
+              2 -> 0
+              -2 -> -2
+              3 -> 0
+              -3 -> -2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 2
+              3 -> 0
+              -3 -> 2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 2
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 2
+              2 -> 1
+              -2 -> 2
+              3 -> 1
+              -3 -> 2
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> -1
+              3 -> 1
+              -3 -> -1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> -1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 2
+              2 -> 0
+              -2 -> 2
+              3 -> 0
+              -3 -> 2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 1
+              3 -> -1
+              -3 -> 1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 1
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> -1
+              2 -> 1
+              -2 -> -1
+              3 -> 1
+              -3 -> -1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 1
+              2 -> 2
+              -2 -> 1
+              3 -> 2
+              -3 -> 1
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 0
+              2 -> 2
+              -2 -> 0
+              3 -> 2
+              -3 -> 0
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 1
+              2 -> -1
+              -2 -> 1
+              3 -> -1
+              -3 -> 1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -2
+              1 -> -2
+              -1 -> 0
+              2 -> -2
+              -2 -> 0
+              3 -> -2
+              -3 -> 0
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              -1 -> 0
+              2 -> 2
+              -2 -> 0
+              3 -> 2
+              -3 -> 0
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Int->Int ]])  =  [1,2,5,15,51,188,...]
+
+length (list :: [ Int->Int ])  =  Infinity
+
+allUnique (list :: [ Int->Int ])  =  False
+
+ratioRepetitions (list :: [ Int->Int ])  =  96 % 131
diff --git a/tests/diff/tiers-colistable-Ints-Ints.out b/tests/diff/tiers-colistable-Ints-Ints.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Ints-Ints.out
@@ -0,0 +1,315 @@
+tiers :: [[Int]->[Int]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [-1] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [-1] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [-1] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [-1]
+              [0] -> [-1]
+              [0,0] -> [-1]
+              [1] -> [-1]
+              [0,0,0] -> [-1]
+              [0,1] -> [-1]
+              [1,0] -> [-1]
+              [-1] -> [-1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> []
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> [0]
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Int]->[Int] ]])  =  [1,2,6,21,...]
+
+length (list :: [ [Int]->[Int] ])  =  Infinity
+
+allUnique (list :: [ [Int]->[Int] ])  =  False
+
+ratioRepetitions (list :: [ [Int]->[Int] ])  =  2 % 5
diff --git a/tests/diff/tiers-colistable-MBool-Bool.out b/tests/diff/tiers-colistable-MBool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-MBool-Bool.out
@@ -0,0 +1,43 @@
+tiers :: [Maybe Bool->Bool]  =
+  [ [ \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]
+
+length (list :: [ Maybe Bool->Bool ])  =  8
+
+allUnique (list :: [ Maybe Bool->Bool ])  =  True
+
+ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-MBool-MBool.out b/tests/diff/tiers-colistable-MBool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-MBool-MBool.out
@@ -0,0 +1,122 @@
+tiers :: [Maybe Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just True
+    ]
+  , [ \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]
+
+length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity
+
+allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True
+
+ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Nat,Nat-Nat.out b/tests/diff/tiers-colistable-Nat,Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat,Nat-Nat.out
@@ -0,0 +1,625 @@
+tiers :: [(Nat,Nat)->Nat]  =
+  [ [ \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 2
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 2
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 3
+              (0,1) -> 3
+              (1,0) -> 3
+              (0,2) -> 3
+              (1,1) -> 3
+              (2,0) -> 3
+              (0,3) -> 3
+              (1,2) -> 3
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 2
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 2
+              (2,0) -> 0
+              (0,3) -> 2
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 0
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 0
+              (2,0) -> 2
+              (0,3) -> 0
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 2
+              (0,2) -> 0
+              (1,1) -> 2
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 2
+              (1,0) -> 0
+              (0,2) -> 2
+              (1,1) -> 0
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [1,3,11,46,...]
+
+length (list :: [ (Nat,Nat)->Nat ])  =  Infinity
+
+allUnique (list :: [ (Nat,Nat)->Nat ])  =  False
+
+ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  37 % 61
diff --git a/tests/diff/tiers-colistable-Nat-Nat-Nat.out b/tests/diff/tiers-colistable-Nat-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat-Nat-Nat.out
@@ -0,0 +1,625 @@
+tiers :: [Nat->Nat->Nat]  =
+  [ [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 3
+                (0,1) -> 3
+                (1,0) -> 3
+                (0,2) -> 3
+                (1,1) -> 3
+                (2,0) -> 3
+                (0,3) -> 3
+                (1,2) -> 3
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [1,3,11,46,...]
+
+length (list :: [ Nat->Nat->Nat ])  =  Infinity
+
+allUnique (list :: [ Nat->Nat->Nat ])  =  False
+
+ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  37 % 61
diff --git a/tests/diff/tiers-colistable-Nat-Nat.out b/tests/diff/tiers-colistable-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat-Nat.out
@@ -0,0 +1,2637 @@
+tiers :: [Nat->Nat]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 3
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 4
+              1 -> 4
+              2 -> 4
+              3 -> 4
+              4 -> 4
+              5 -> 4
+              6 -> 4
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 3
+              4 -> 0
+              5 -> 3
+              6 -> 0
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+              3 -> 2
+              4 -> 1
+              5 -> 2
+              6 -> 1
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+              3 -> 1
+              4 -> 2
+              5 -> 1
+              6 -> 2
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 3
+              3 -> 0
+              4 -> 3
+              5 -> 0
+              6 -> 3
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 5
+              1 -> 5
+              2 -> 5
+              3 -> 5
+              4 -> 5
+              5 -> 5
+              6 -> 5
+              7 -> 5
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 4
+              2 -> 0
+              3 -> 4
+              4 -> 0
+              5 -> 4
+              6 -> 0
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 3
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 3
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 3
+              2 -> 1
+              3 -> 3
+              4 -> 1
+              5 -> 3
+              6 -> 1
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 2
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 2
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 3
+              4 -> 0
+              5 -> 3
+              6 -> 0
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 1
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 1
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 1
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 1
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 1
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 1
+              2 -> 3
+              3 -> 1
+              4 -> 3
+              5 -> 1
+              6 -> 3
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 3
+              3 -> 0
+              4 -> 3
+              5 -> 0
+              6 -> 3
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 2
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 2
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 2
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 4
+              1 -> 0
+              2 -> 4
+              3 -> 0
+              4 -> 4
+              5 -> 0
+              6 -> 4
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 3
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 3
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 3
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->Nat ]])  =  [1,2,5,15,51,188,...]
+
+length (list :: [ Nat->Nat ])  =  Infinity
+
+allUnique (list :: [ Nat->Nat ])  =  False
+
+ratioRepetitions (list :: [ Nat->Nat ])  =  82 % 131
diff --git a/tests/diff/tiers-colistable-Nat-U.out b/tests/diff/tiers-colistable-Nat-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat-U.out
@@ -0,0 +1,667 @@
+tiers :: [Nat->()]  =
+  [ [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->() ]])  =  [1,1,2,5,14,42,...]
+
+length (list :: [ Nat->() ])  =  Infinity
+
+allUnique (list :: [ Nat->() ])  =  False
+
+ratioRepetitions (list :: [ Nat->() ])  =  64 % 65
diff --git a/tests/diff/tiers-colistable-Nat2-Nat2.out b/tests/diff/tiers-colistable-Nat2-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat2-Nat2.out
@@ -0,0 +1,25 @@
+tiers :: [Nat2->Nat2]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+    ]
+  ]
+
+map length (tiers :: [[ Nat2->Nat2 ]])  =  [1,2,1]
+
+length (list :: [ Nat2->Nat2 ])  =  4
+
+allUnique (list :: [ Nat2->Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Nat2-Nat3.out b/tests/diff/tiers-colistable-Nat2-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat2-Nat3.out
@@ -0,0 +1,42 @@
+tiers :: [Nat2->Nat3]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+    ]
+  ]
+
+map length (tiers :: [[ Nat2->Nat3 ]])  =  [1,2,3,2,1]
+
+length (list :: [ Nat2->Nat3 ])  =  9
+
+allUnique (list :: [ Nat2->Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Nat3-Nat2.out b/tests/diff/tiers-colistable-Nat3-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat3-Nat2.out
@@ -0,0 +1,46 @@
+tiers :: [Nat3->Nat2]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    ]
+  ]
+
+map length (tiers :: [[ Nat3->Nat2 ]])  =  [1,3,3,1]
+
+length (list :: [ Nat3->Nat2 ])  =  8
+
+allUnique (list :: [ Nat3->Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Nat3-Nat3.out b/tests/diff/tiers-colistable-Nat3-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nat3-Nat3.out
@@ -0,0 +1,125 @@
+tiers :: [Nat3->Nat3]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 1
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+    ]
+  ]
+
+map length (tiers :: [[ Nat3->Nat3 ]])  =  [1,3,6,7,6,3,1]
+
+length (list :: [ Nat3->Nat3 ])  =  Infinity
+
+allUnique (list :: [ Nat3->Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Nats-Nats.out b/tests/diff/tiers-colistable-Nats-Nats.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Nats-Nats.out
@@ -0,0 +1,315 @@
+tiers :: [[Nat]->[Nat]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [2] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [2] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [2] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [2]
+              [0] -> [2]
+              [0,0] -> [2]
+              [1] -> [2]
+              [0,0,0] -> [2]
+              [0,1] -> [2]
+              [1,0] -> [2]
+              [2] -> [2]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> []
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> [0]
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> [0]
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> [0]
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> []
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> []
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,2,6,21,...]
+
+length (list :: [ [Nat]->[Nat] ])  =  Infinity
+
+allUnique (list :: [ [Nat]->[Nat] ])  =  False
+
+ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  2 % 5
diff --git a/tests/diff/tiers-colistable-U-Bool.out b/tests/diff/tiers-colistable-U-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-U-Bool.out
@@ -0,0 +1,15 @@
+tiers :: [()->Bool]  =
+  [ [ \x -> case x of
+              () -> False
+    , \x -> case x of
+              () -> True
+    ]
+  ]
+
+map length (tiers :: [[ ()->Bool ]])  =  [2]
+
+length (list :: [ ()->Bool ])  =  2
+
+allUnique (list :: [ ()->Bool ])  =  True
+
+ratioRepetitions (list :: [ ()->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-U-Nat.out b/tests/diff/tiers-colistable-U-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-U-Nat.out
@@ -0,0 +1,29 @@
+tiers :: [()->Nat]  =
+  [ [ \x -> case x of
+              () -> 0
+    ]
+  , [ \x -> case x of
+              () -> 1
+    ]
+  , [ \x -> case x of
+              () -> 2
+    ]
+  , [ \x -> case x of
+              () -> 3
+    ]
+  , [ \x -> case x of
+              () -> 4
+    ]
+  , [ \x -> case x of
+              () -> 5
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]
+
+length (list :: [ ()->Nat ])  =  Infinity
+
+allUnique (list :: [ ()->Nat ])  =  True
+
+ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-U-U.out b/tests/diff/tiers-colistable-U-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-U-U.out
@@ -0,0 +1,13 @@
+tiers :: [()->()]  =
+  [ [ \x -> case x of
+              () -> ()
+    ]
+  ]
+
+map length (tiers :: [[ ()->() ]])  =  [1]
+
+length (list :: [ ()->() ])  =  1
+
+allUnique (list :: [ ()->() ])  =  True
+
+ratioRepetitions (list :: [ ()->() ])  =  0 % 1
diff --git a/tests/diff/tiers-colistable-Us-Us.out b/tests/diff/tiers-colistable-Us-Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-colistable-Us-Us.out
@@ -0,0 +1,165 @@
+tiers :: [[()]->[()]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [(),()]
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [(),(),()]
+              [()] -> [(),(),()]
+              [(),()] -> [(),(),()]
+              [(),(),()] -> [(),(),()]
+              [(),(),(),()] -> [(),(),()]
+              [(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),(),()] -> [(),(),()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [(),()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [()]->[()] ]])  =  [1,2,4,8,...]
+
+length (list :: [ [()]->[()] ])  =  Infinity
+
+allUnique (list :: [ [()]->[()] ])  =  False
+
+ratioRepetitions (list :: [ [()]->[()] ])  =  1 % 3
diff --git a/tests/diff/tiers-funlistable-Bool-Bool.out b/tests/diff/tiers-funlistable-Bool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Bool-Bool.out
@@ -0,0 +1,23 @@
+tiers :: [Bool->Bool]  =
+  [ [ \x -> case x of
+              False -> False
+              True -> False
+    , \x -> case x of
+              False -> True
+              True -> False
+    , \x -> case x of
+              False -> False
+              True -> True
+    , \x -> case x of
+              False -> True
+              True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Bool ]])  =  [4]
+
+length (list :: [ Bool->Bool ])  =  4
+
+allUnique (list :: [ Bool->Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Bool-MBool.out b/tests/diff/tiers-funlistable-Bool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Bool-MBool.out
@@ -0,0 +1,40 @@
+tiers :: [Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              False -> Nothing
+              True -> Nothing
+    ]
+  , [ \x -> case x of
+              False -> Just False
+              True -> Nothing
+    , \x -> case x of
+              False -> Just True
+              True -> Nothing
+    , \x -> case x of
+              False -> Nothing
+              True -> Just False
+    , \x -> case x of
+              False -> Nothing
+              True -> Just True
+    ]
+  , [ \x -> case x of
+              False -> Just False
+              True -> Just False
+    , \x -> case x of
+              False -> Just True
+              True -> Just False
+    , \x -> case x of
+              False -> Just False
+              True -> Just True
+    , \x -> case x of
+              False -> Just True
+              True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]
+
+length (list :: [ Bool->Maybe Bool ])  =  9
+
+allUnique (list :: [ Bool->Maybe Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Bool-U.out b/tests/diff/tiers-funlistable-Bool-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Bool-U.out
@@ -0,0 +1,14 @@
+tiers :: [Bool->()]  =
+  [ [ \x -> case x of
+              False -> ()
+              True -> ()
+    ]
+  ]
+
+map length (tiers :: [[ Bool->() ]])  =  [1]
+
+length (list :: [ Bool->() ])  =  1
+
+allUnique (list :: [ Bool->() ])  =  True
+
+ratioRepetitions (list :: [ Bool->() ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Bools-Bools.out b/tests/diff/tiers-funlistable-Bools-Bools.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Bools-Bools.out
@@ -0,0 +1,165 @@
+tiers :: [[Bool]->[Bool]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False,False]
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False,False,False]
+              [False] -> [False,False,False]
+              [True] -> [False,False,False]
+              [False,False] -> [False,False,False]
+              [False,True] -> [False,False,False]
+              [True,False] -> [False,False,False]
+              [True,True] -> [False,False,False]
+              [False,False,False] -> [False,False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,False,True]
+              [False] -> [False,False,True]
+              [True] -> [False,False,True]
+              [False,False] -> [False,False,True]
+              [False,True] -> [False,False,True]
+              [True,False] -> [False,False,True]
+              [True,True] -> [False,False,True]
+              [False,False,False] -> [False,False,True]
+              ...
+    , \x -> case x of
+              [] -> [False,True,False]
+              [False] -> [False,True,False]
+              [True] -> [False,True,False]
+              [False,False] -> [False,True,False]
+              [False,True] -> [False,True,False]
+              [True,False] -> [False,True,False]
+              [True,True] -> [False,True,False]
+              [False,False,False] -> [False,True,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True,True]
+              [False] -> [False,True,True]
+              [True] -> [False,True,True]
+              [False,False] -> [False,True,True]
+              [False,True] -> [False,True,True]
+              [True,False] -> [False,True,True]
+              [True,True] -> [False,True,True]
+              [False,False,False] -> [False,True,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False,False]
+              [False] -> [True,False,False]
+              [True] -> [True,False,False]
+              [False,False] -> [True,False,False]
+              [False,True] -> [True,False,False]
+              [True,False] -> [True,False,False]
+              [True,True] -> [True,False,False]
+              [False,False,False] -> [True,False,False]
+              ...
+    , \x -> case x of
+              [] -> [True,False,True]
+              [False] -> [True,False,True]
+              [True] -> [True,False,True]
+              [False,False] -> [True,False,True]
+              [False,True] -> [True,False,True]
+              [True,False] -> [True,False,True]
+              [True,True] -> [True,False,True]
+              [False,False,False] -> [True,False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,True,False]
+              [False] -> [True,True,False]
+              [True] -> [True,True,False]
+              [False,False] -> [True,True,False]
+              [False,True] -> [True,True,False]
+              [True,False] -> [True,True,False]
+              [True,True] -> [True,True,False]
+              [False,False,False] -> [True,True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True,True]
+              [False] -> [True,True,True]
+              [True] -> [True,True,True]
+              [False,False] -> [True,True,True]
+              [False,True] -> [True,True,True]
+              [True,False] -> [True,True,True]
+              [True,True] -> [True,True,True]
+              [False,False,False] -> [True,True,True]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,2,4,8,...]
+
+length (list :: [ [Bool]->[Bool] ])  =  Infinity
+
+allUnique (list :: [ [Bool]->[Bool] ])  =  True
+
+ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Int-Int-Int.out b/tests/diff/tiers-funlistable-Int-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Int-Int-Int.out
@@ -0,0 +1,10 @@
+tiers :: [Int->Int->Int]  =
+  [[]]
+
+map length (tiers :: [[ Int->Int->Int ]])  =  [0]
+
+length (list :: [ Int->Int->Int ])  =  0
+
+allUnique (list :: [ Int->Int->Int ])  =  True
+
+ratioRepetitions (list :: [ Int->Int->Int ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Int-Int.out b/tests/diff/tiers-funlistable-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Int-Int.out
@@ -0,0 +1,10 @@
+tiers :: [Int->Int]  =
+  [[]]
+
+map length (tiers :: [[ Int->Int ]])  =  [0]
+
+length (list :: [ Int->Int ])  =  0
+
+allUnique (list :: [ Int->Int ])  =  True
+
+ratioRepetitions (list :: [ Int->Int ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Ints-Ints.out b/tests/diff/tiers-funlistable-Ints-Ints.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Ints-Ints.out
@@ -0,0 +1,95 @@
+tiers :: [[Int]->[Int]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [-1] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [-1] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [-1] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [-1]
+              [0] -> [-1]
+              [0,0] -> [-1]
+              [1] -> [-1]
+              [0,0,0] -> [-1]
+              [0,1] -> [-1]
+              [1,0] -> [-1]
+              [-1] -> [-1]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Int]->[Int] ]])  =  [1,1,2,4,...]
+
+length (list :: [ [Int]->[Int] ])  =  Infinity
+
+allUnique (list :: [ [Int]->[Int] ])  =  True
+
+ratioRepetitions (list :: [ [Int]->[Int] ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-MBool-Bool.out b/tests/diff/tiers-funlistable-MBool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-MBool-Bool.out
@@ -0,0 +1,43 @@
+tiers :: [Maybe Bool->Bool]  =
+  [ [ \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]
+
+length (list :: [ Maybe Bool->Bool ])  =  8
+
+allUnique (list :: [ Maybe Bool->Bool ])  =  True
+
+ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-MBool-MBool.out b/tests/diff/tiers-funlistable-MBool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-MBool-MBool.out
@@ -0,0 +1,122 @@
+tiers :: [Maybe Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just True
+    ]
+  , [ \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]
+
+length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity
+
+allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True
+
+ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat,Nat-Nat.out b/tests/diff/tiers-funlistable-Nat,Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat,Nat-Nat.out
@@ -0,0 +1,10 @@
+tiers :: [(Nat,Nat)->Nat]  =
+  [[]]
+
+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [0]
+
+length (list :: [ (Nat,Nat)->Nat ])  =  0
+
+allUnique (list :: [ (Nat,Nat)->Nat ])  =  True
+
+ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat-Nat-Nat.out b/tests/diff/tiers-funlistable-Nat-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat-Nat-Nat.out
@@ -0,0 +1,10 @@
+tiers :: [Nat->Nat->Nat]  =
+  [[]]
+
+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [0]
+
+length (list :: [ Nat->Nat->Nat ])  =  0
+
+allUnique (list :: [ Nat->Nat->Nat ])  =  True
+
+ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat-Nat.out b/tests/diff/tiers-funlistable-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat-Nat.out
@@ -0,0 +1,10 @@
+tiers :: [Nat->Nat]  =
+  [[]]
+
+map length (tiers :: [[ Nat->Nat ]])  =  [0]
+
+length (list :: [ Nat->Nat ])  =  0
+
+allUnique (list :: [ Nat->Nat ])  =  True
+
+ratioRepetitions (list :: [ Nat->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat-U.out b/tests/diff/tiers-funlistable-Nat-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat-U.out
@@ -0,0 +1,10 @@
+tiers :: [Nat->()]  =
+  [[]]
+
+map length (tiers :: [[ Nat->() ]])  =  [0]
+
+length (list :: [ Nat->() ])  =  0
+
+allUnique (list :: [ Nat->() ])  =  True
+
+ratioRepetitions (list :: [ Nat->() ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat2-Nat2.out b/tests/diff/tiers-funlistable-Nat2-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat2-Nat2.out
@@ -0,0 +1,10 @@
+tiers :: [Nat2->Nat2]  =
+  [[]]
+
+map length (tiers :: [[ Nat2->Nat2 ]])  =  [0]
+
+length (list :: [ Nat2->Nat2 ])  =  0
+
+allUnique (list :: [ Nat2->Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat2-Nat3.out b/tests/diff/tiers-funlistable-Nat2-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat2-Nat3.out
@@ -0,0 +1,10 @@
+tiers :: [Nat2->Nat3]  =
+  [[]]
+
+map length (tiers :: [[ Nat2->Nat3 ]])  =  [0]
+
+length (list :: [ Nat2->Nat3 ])  =  0
+
+allUnique (list :: [ Nat2->Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat3-Nat2.out b/tests/diff/tiers-funlistable-Nat3-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat3-Nat2.out
@@ -0,0 +1,10 @@
+tiers :: [Nat3->Nat2]  =
+  [[]]
+
+map length (tiers :: [[ Nat3->Nat2 ]])  =  [0]
+
+length (list :: [ Nat3->Nat2 ])  =  0
+
+allUnique (list :: [ Nat3->Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nat3-Nat3.out b/tests/diff/tiers-funlistable-Nat3-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nat3-Nat3.out
@@ -0,0 +1,10 @@
+tiers :: [Nat3->Nat3]  =
+  [[]]
+
+map length (tiers :: [[ Nat3->Nat3 ]])  =  [0]
+
+length (list :: [ Nat3->Nat3 ])  =  0
+
+allUnique (list :: [ Nat3->Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Nats-Nats.out b/tests/diff/tiers-funlistable-Nats-Nats.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Nats-Nats.out
@@ -0,0 +1,95 @@
+tiers :: [[Nat]->[Nat]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [2] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [2] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [2] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [2]
+              [0] -> [2]
+              [0,0] -> [2]
+              [1] -> [2]
+              [0,0,0] -> [2]
+              [0,1] -> [2]
+              [1,0] -> [2]
+              [2] -> [2]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,1,2,4,...]
+
+length (list :: [ [Nat]->[Nat] ])  =  Infinity
+
+allUnique (list :: [ [Nat]->[Nat] ])  =  True
+
+ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-U-Bool.out b/tests/diff/tiers-funlistable-U-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-U-Bool.out
@@ -0,0 +1,15 @@
+tiers :: [()->Bool]  =
+  [ [ \x -> case x of
+              () -> False
+    , \x -> case x of
+              () -> True
+    ]
+  ]
+
+map length (tiers :: [[ ()->Bool ]])  =  [2]
+
+length (list :: [ ()->Bool ])  =  2
+
+allUnique (list :: [ ()->Bool ])  =  True
+
+ratioRepetitions (list :: [ ()->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-U-Nat.out b/tests/diff/tiers-funlistable-U-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-U-Nat.out
@@ -0,0 +1,29 @@
+tiers :: [()->Nat]  =
+  [ [ \x -> case x of
+              () -> 0
+    ]
+  , [ \x -> case x of
+              () -> 1
+    ]
+  , [ \x -> case x of
+              () -> 2
+    ]
+  , [ \x -> case x of
+              () -> 3
+    ]
+  , [ \x -> case x of
+              () -> 4
+    ]
+  , [ \x -> case x of
+              () -> 5
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]
+
+length (list :: [ ()->Nat ])  =  Infinity
+
+allUnique (list :: [ ()->Nat ])  =  True
+
+ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-U-U.out b/tests/diff/tiers-funlistable-U-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-U-U.out
@@ -0,0 +1,13 @@
+tiers :: [()->()]  =
+  [ [ \x -> case x of
+              () -> ()
+    ]
+  ]
+
+map length (tiers :: [[ ()->() ]])  =  [1]
+
+length (list :: [ ()->() ])  =  1
+
+allUnique (list :: [ ()->() ])  =  True
+
+ratioRepetitions (list :: [ ()->() ])  =  0 % 1
diff --git a/tests/diff/tiers-funlistable-Us-Us.out b/tests/diff/tiers-funlistable-Us-Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-funlistable-Us-Us.out
@@ -0,0 +1,55 @@
+tiers :: [[()]->[()]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [(),()]
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [(),(),()]
+              [()] -> [(),(),()]
+              [(),()] -> [(),(),()]
+              [(),(),()] -> [(),(),()]
+              [(),(),(),()] -> [(),(),()]
+              [(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),(),()] -> [(),(),()]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [()]->[()] ]])  =  [1,1,1,1,...]
+
+length (list :: [ [()]->[()] ])  =  Infinity
+
+allUnique (list :: [ [()]->[()] ])  =  True
+
+ratioRepetitions (list :: [ [()]->[()] ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Bool-Bool.out b/tests/diff/tiers-listsofpairs-Bool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Bool-Bool.out
@@ -0,0 +1,23 @@
+tiers :: [Bool->Bool]  =
+  [ [ \x -> case x of
+              False -> False
+              True -> False
+    , \x -> case x of
+              False -> False
+              True -> True
+    , \x -> case x of
+              False -> True
+              True -> False
+    , \x -> case x of
+              False -> True
+              True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Bool ]])  =  [4]
+
+length (list :: [ Bool->Bool ])  =  4
+
+allUnique (list :: [ Bool->Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Bool-MBool.out b/tests/diff/tiers-listsofpairs-Bool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Bool-MBool.out
@@ -0,0 +1,40 @@
+tiers :: [Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              False -> Nothing
+              True -> Nothing
+    ]
+  , [ \x -> case x of
+              False -> Nothing
+              True -> Just False
+    , \x -> case x of
+              False -> Nothing
+              True -> Just True
+    , \x -> case x of
+              False -> Just False
+              True -> Nothing
+    , \x -> case x of
+              False -> Just True
+              True -> Nothing
+    ]
+  , [ \x -> case x of
+              False -> Just False
+              True -> Just False
+    , \x -> case x of
+              False -> Just False
+              True -> Just True
+    , \x -> case x of
+              False -> Just True
+              True -> Just False
+    , \x -> case x of
+              False -> Just True
+              True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]
+
+length (list :: [ Bool->Maybe Bool ])  =  9
+
+allUnique (list :: [ Bool->Maybe Bool ])  =  True
+
+ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Bool-U.out b/tests/diff/tiers-listsofpairs-Bool-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Bool-U.out
@@ -0,0 +1,14 @@
+tiers :: [Bool->()]  =
+  [ [ \x -> case x of
+              False -> ()
+              True -> ()
+    ]
+  ]
+
+map length (tiers :: [[ Bool->() ]])  =  [1]
+
+length (list :: [ Bool->() ])  =  1
+
+allUnique (list :: [ Bool->() ])  =  True
+
+ratioRepetitions (list :: [ Bool->() ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Bools-Bools.out b/tests/diff/tiers-listsofpairs-Bools-Bools.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Bools-Bools.out
@@ -0,0 +1,385 @@
+tiers :: [[Bool]->[Bool]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [False,False]
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> [False,False,False]
+              [False] -> [False,False,False]
+              [True] -> [False,False,False]
+              [False,False] -> [False,False,False]
+              [False,True] -> [False,False,False]
+              [True,False] -> [False,False,False]
+              [True,True] -> [False,False,False]
+              [False,False,False] -> [False,False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,False,True]
+              [False] -> [False,False,True]
+              [True] -> [False,False,True]
+              [False,False] -> [False,False,True]
+              [False,True] -> [False,False,True]
+              [True,False] -> [False,False,True]
+              [True,True] -> [False,False,True]
+              [False,False,False] -> [False,False,True]
+              ...
+    , \x -> case x of
+              [] -> [False,True,False]
+              [False] -> [False,True,False]
+              [True] -> [False,True,False]
+              [False,False] -> [False,True,False]
+              [False,True] -> [False,True,False]
+              [True,False] -> [False,True,False]
+              [True,True] -> [False,True,False]
+              [False,False,False] -> [False,True,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True,True]
+              [False] -> [False,True,True]
+              [True] -> [False,True,True]
+              [False,False] -> [False,True,True]
+              [False,True] -> [False,True,True]
+              [True,False] -> [False,True,True]
+              [True,True] -> [False,True,True]
+              [False,False,False] -> [False,True,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False,False]
+              [False] -> [True,False,False]
+              [True] -> [True,False,False]
+              [False,False] -> [True,False,False]
+              [False,True] -> [True,False,False]
+              [True,False] -> [True,False,False]
+              [True,True] -> [True,False,False]
+              [False,False,False] -> [True,False,False]
+              ...
+    , \x -> case x of
+              [] -> [True,False,True]
+              [False] -> [True,False,True]
+              [True] -> [True,False,True]
+              [False,False] -> [True,False,True]
+              [False,True] -> [True,False,True]
+              [True,False] -> [True,False,True]
+              [True,True] -> [True,False,True]
+              [False,False,False] -> [True,False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,True,False]
+              [False] -> [True,True,False]
+              [True] -> [True,True,False]
+              [False,False] -> [True,True,False]
+              [False,True] -> [True,True,False]
+              [True,False] -> [True,True,False]
+              [True,True] -> [True,True,False]
+              [False,False,False] -> [True,True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True,True]
+              [False] -> [True,True,True]
+              [True] -> [True,True,True]
+              [False,False] -> [True,True,True]
+              [False,True] -> [True,True,True]
+              [True,False] -> [True,True,True]
+              [True,True] -> [True,True,True]
+              [False,False,False] -> [True,True,True]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,2,8,26,...]
+
+length (list :: [ [Bool]->[Bool] ])  =  Infinity
+
+allUnique (list :: [ [Bool]->[Bool] ])  =  True
+
+ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Int-Int-Int.out b/tests/diff/tiers-listsofpairs-Int-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Int-Int-Int.out
@@ -0,0 +1,215 @@
+tiers :: [Int->Int->Int]  =
+  [ [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,-1) -> 2
+                (1,1) -> 2
+                (-1,0) -> 2
+                (0,2) -> 2
+                (1,-1) -> 2
+                ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Int->Int->Int ]])  =  [1,1,5,13,...]
+
+length (list :: [ Int->Int->Int ])  =  Infinity
+
+allUnique (list :: [ Int->Int->Int ])  =  True
+
+ratioRepetitions (list :: [ Int->Int->Int ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Int-Int.out b/tests/diff/tiers-listsofpairs-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Int-Int.out
@@ -0,0 +1,377 @@
+tiers :: [Int->Int]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> -2
+              1 -> -2
+              -1 -> -2
+              2 -> -2
+              -2 -> -2
+              3 -> -2
+              -3 -> -2
+              4 -> -2
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> -2
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> -1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -2
+              -1 -> -2
+              2 -> -2
+              -2 -> -2
+              3 -> -2
+              -3 -> -2
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 3
+              -1 -> 3
+              2 -> 3
+              -2 -> 3
+              3 -> 3
+              -3 -> 3
+              4 -> 3
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Int->Int ]])  =  [1,1,3,5,10,16,...]
+
+length (list :: [ Int->Int ])  =  Infinity
+
+allUnique (list :: [ Int->Int ])  =  True
+
+ratioRepetitions (list :: [ Int->Int ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Ints-Ints.out b/tests/diff/tiers-listsofpairs-Ints-Ints.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Ints-Ints.out
@@ -0,0 +1,175 @@
+tiers :: [[Int]->[Int]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [-1] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [-1] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [-1] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [-1]
+              [0] -> [-1]
+              [0,0] -> [-1]
+              [1] -> [-1]
+              [0,0,0] -> [-1]
+              [0,1] -> [-1]
+              [1,0] -> [-1]
+              [-1] -> [-1]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Int]->[Int] ]])  =  [1,1,4,10,...]
+
+length (list :: [ [Int]->[Int] ])  =  Infinity
+
+allUnique (list :: [ [Int]->[Int] ])  =  True
+
+ratioRepetitions (list :: [ [Int]->[Int] ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-MBool-Bool.out b/tests/diff/tiers-listsofpairs-MBool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-MBool-Bool.out
@@ -0,0 +1,43 @@
+tiers :: [Maybe Bool->Bool]  =
+  [ [ \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]
+
+length (list :: [ Maybe Bool->Bool ])  =  8
+
+allUnique (list :: [ Maybe Bool->Bool ])  =  True
+
+ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-MBool-MBool.out b/tests/diff/tiers-listsofpairs-MBool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-MBool-MBool.out
@@ -0,0 +1,122 @@
+tiers :: [Maybe Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]
+
+length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity
+
+allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True
+
+ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat,Nat-Nat.out b/tests/diff/tiers-listsofpairs-Nat,Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat,Nat-Nat.out
@@ -0,0 +1,135 @@
+tiers :: [(Nat,Nat)->Nat]  =
+  [ [ \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 2
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 2
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 2
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 2
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 2
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 3
+              (0,1) -> 3
+              (1,0) -> 3
+              (0,2) -> 3
+              (1,1) -> 3
+              (2,0) -> 3
+              (0,3) -> 3
+              (1,2) -> 3
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [1,1,3,7,...]
+
+length (list :: [ (Nat,Nat)->Nat ])  =  Infinity
+
+allUnique (list :: [ (Nat,Nat)->Nat ])  =  True
+
+ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat-Nat-Nat.out b/tests/diff/tiers-listsofpairs-Nat-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat-Nat-Nat.out
@@ -0,0 +1,215 @@
+tiers :: [Nat->Nat->Nat]  =
+  [ [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 3
+                (0,1) -> 3
+                (1,0) -> 3
+                (0,2) -> 3
+                (1,1) -> 3
+                (2,0) -> 3
+                (0,3) -> 3
+                (1,2) -> 3
+                ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [1,1,5,13,...]
+
+length (list :: [ Nat->Nat->Nat ])  =  Infinity
+
+allUnique (list :: [ Nat->Nat->Nat ])  =  True
+
+ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat-Nat.out b/tests/diff/tiers-listsofpairs-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat-Nat.out
@@ -0,0 +1,377 @@
+tiers :: [Nat->Nat]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 4
+              1 -> 4
+              2 -> 4
+              3 -> 4
+              4 -> 4
+              5 -> 4
+              6 -> 4
+              7 -> 4
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 4
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 4
+              2 -> 4
+              3 -> 4
+              4 -> 4
+              5 -> 4
+              6 -> 4
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 5
+              1 -> 5
+              2 -> 5
+              3 -> 5
+              4 -> 5
+              5 -> 5
+              6 -> 5
+              7 -> 5
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->Nat ]])  =  [1,1,3,5,10,16,...]
+
+length (list :: [ Nat->Nat ])  =  Infinity
+
+allUnique (list :: [ Nat->Nat ])  =  True
+
+ratioRepetitions (list :: [ Nat->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat-U.out b/tests/diff/tiers-listsofpairs-Nat-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat-U.out
@@ -0,0 +1,27 @@
+tiers :: [Nat->()]  =
+  [ [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , []
+  , []
+  , []
+  , []
+  , []
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->() ]])  =  [1,0,0,0,0,0,...]
+
+length (list :: [ Nat->() ])  =  1
+
+allUnique (list :: [ Nat->() ])  =  True
+
+ratioRepetitions (list :: [ Nat->() ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat2-Nat2.out b/tests/diff/tiers-listsofpairs-Nat2-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat2-Nat2.out
@@ -0,0 +1,25 @@
+tiers :: [Nat2->Nat2]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+    ]
+  ]
+
+map length (tiers :: [[ Nat2->Nat2 ]])  =  [1,2,1]
+
+length (list :: [ Nat2->Nat2 ])  =  4
+
+allUnique (list :: [ Nat2->Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat2-Nat3.out b/tests/diff/tiers-listsofpairs-Nat2-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat2-Nat3.out
@@ -0,0 +1,42 @@
+tiers :: [Nat2->Nat3]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+    ]
+  ]
+
+map length (tiers :: [[ Nat2->Nat3 ]])  =  [1,2,3,2,1]
+
+length (list :: [ Nat2->Nat3 ])  =  9
+
+allUnique (list :: [ Nat2->Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat3-Nat2.out b/tests/diff/tiers-listsofpairs-Nat3-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat3-Nat2.out
@@ -0,0 +1,46 @@
+tiers :: [Nat3->Nat2]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    ]
+  ]
+
+map length (tiers :: [[ Nat3->Nat2 ]])  =  [1,3,3,1]
+
+length (list :: [ Nat3->Nat2 ])  =  8
+
+allUnique (list :: [ Nat3->Nat2 ])  =  True
+
+ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nat3-Nat3.out b/tests/diff/tiers-listsofpairs-Nat3-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nat3-Nat3.out
@@ -0,0 +1,125 @@
+tiers :: [Nat3->Nat3]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 1
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+    ]
+  ]
+
+map length (tiers :: [[ Nat3->Nat3 ]])  =  [1,3,6,7,6,3,1]
+
+length (list :: [ Nat3->Nat3 ])  =  Infinity
+
+allUnique (list :: [ Nat3->Nat3 ])  =  True
+
+ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Nats-Nats.out b/tests/diff/tiers-listsofpairs-Nats-Nats.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Nats-Nats.out
@@ -0,0 +1,175 @@
+tiers :: [[Nat]->[Nat]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [2] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [2] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [2] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [2]
+              [0] -> [2]
+              [0,0] -> [2]
+              [1] -> [2]
+              [0,0,0] -> [2]
+              [0,1] -> [2]
+              [1,0] -> [2]
+              [2] -> [2]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,1,4,10,...]
+
+length (list :: [ [Nat]->[Nat] ])  =  Infinity
+
+allUnique (list :: [ [Nat]->[Nat] ])  =  True
+
+ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-U-Bool.out b/tests/diff/tiers-listsofpairs-U-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-U-Bool.out
@@ -0,0 +1,15 @@
+tiers :: [()->Bool]  =
+  [ [ \x -> case x of
+              () -> False
+    , \x -> case x of
+              () -> True
+    ]
+  ]
+
+map length (tiers :: [[ ()->Bool ]])  =  [2]
+
+length (list :: [ ()->Bool ])  =  2
+
+allUnique (list :: [ ()->Bool ])  =  True
+
+ratioRepetitions (list :: [ ()->Bool ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-U-Nat.out b/tests/diff/tiers-listsofpairs-U-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-U-Nat.out
@@ -0,0 +1,29 @@
+tiers :: [()->Nat]  =
+  [ [ \x -> case x of
+              () -> 0
+    ]
+  , [ \x -> case x of
+              () -> 1
+    ]
+  , [ \x -> case x of
+              () -> 2
+    ]
+  , [ \x -> case x of
+              () -> 3
+    ]
+  , [ \x -> case x of
+              () -> 4
+    ]
+  , [ \x -> case x of
+              () -> 5
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]
+
+length (list :: [ ()->Nat ])  =  Infinity
+
+allUnique (list :: [ ()->Nat ])  =  True
+
+ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-U-U.out b/tests/diff/tiers-listsofpairs-U-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-U-U.out
@@ -0,0 +1,13 @@
+tiers :: [()->()]  =
+  [ [ \x -> case x of
+              () -> ()
+    ]
+  ]
+
+map length (tiers :: [[ ()->() ]])  =  [1]
+
+length (list :: [ ()->() ])  =  1
+
+allUnique (list :: [ ()->() ])  =  True
+
+ratioRepetitions (list :: [ ()->() ])  =  0 % 1
diff --git a/tests/diff/tiers-listsofpairs-Us-Us.out b/tests/diff/tiers-listsofpairs-Us-Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-listsofpairs-Us-Us.out
@@ -0,0 +1,115 @@
+tiers :: [[()]->[()]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> [(),()]
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [(),()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> [(),(),()]
+              [()] -> [(),(),()]
+              [(),()] -> [(),(),()]
+              [(),(),()] -> [(),(),()]
+              [(),(),(),()] -> [(),(),()]
+              [(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),(),()] -> [(),(),()]
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [()]->[()] ]])  =  [1,1,3,5,...]
+
+length (list :: [ [()]->[()] ])  =  Infinity
+
+allUnique (list :: [ [()]->[()] ])  =  True
+
+ratioRepetitions (list :: [ [()]->[()] ])  =  0 % 1
diff --git a/tests/diff/tiers-mixed-Bool-Bool.out b/tests/diff/tiers-mixed-Bool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Bool-Bool.out
@@ -0,0 +1,35 @@
+tiers :: [Bool->Bool]  =
+  [ [ \x -> case x of
+              False -> False
+              True -> False
+    , \x -> case x of
+              False -> False
+              True -> True
+    , \x -> case x of
+              False -> True
+              True -> False
+    , \x -> case x of
+              False -> True
+              True -> True
+    , \x -> case x of
+              False -> False
+              True -> False
+    , \x -> case x of
+              False -> True
+              True -> False
+    , \x -> case x of
+              False -> False
+              True -> True
+    , \x -> case x of
+              False -> True
+              True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Bool ]])  =  [8]
+
+length (list :: [ Bool->Bool ])  =  8
+
+allUnique (list :: [ Bool->Bool ])  =  False
+
+ratioRepetitions (list :: [ Bool->Bool ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Bool-MBool.out b/tests/diff/tiers-mixed-Bool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Bool-MBool.out
@@ -0,0 +1,67 @@
+tiers :: [Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              False -> Nothing
+              True -> Nothing
+    , \x -> case x of
+              False -> Nothing
+              True -> Nothing
+    ]
+  , [ \x -> case x of
+              False -> Nothing
+              True -> Just False
+    , \x -> case x of
+              False -> Nothing
+              True -> Just True
+    , \x -> case x of
+              False -> Just False
+              True -> Nothing
+    , \x -> case x of
+              False -> Just True
+              True -> Nothing
+    , \x -> case x of
+              False -> Just False
+              True -> Nothing
+    , \x -> case x of
+              False -> Just True
+              True -> Nothing
+    , \x -> case x of
+              False -> Nothing
+              True -> Just False
+    , \x -> case x of
+              False -> Nothing
+              True -> Just True
+    ]
+  , [ \x -> case x of
+              False -> Just False
+              True -> Just False
+    , \x -> case x of
+              False -> Just False
+              True -> Just True
+    , \x -> case x of
+              False -> Just True
+              True -> Just False
+    , \x -> case x of
+              False -> Just True
+              True -> Just True
+    , \x -> case x of
+              False -> Just False
+              True -> Just False
+    , \x -> case x of
+              False -> Just True
+              True -> Just False
+    , \x -> case x of
+              False -> Just False
+              True -> Just True
+    , \x -> case x of
+              False -> Just True
+              True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [2,8,8]
+
+length (list :: [ Bool->Maybe Bool ])  =  Infinity
+
+allUnique (list :: [ Bool->Maybe Bool ])  =  False
+
+ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Bool-U.out b/tests/diff/tiers-mixed-Bool-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Bool-U.out
@@ -0,0 +1,17 @@
+tiers :: [Bool->()]  =
+  [ [ \x -> case x of
+              False -> ()
+              True -> ()
+    , \x -> case x of
+              False -> ()
+              True -> ()
+    ]
+  ]
+
+map length (tiers :: [[ Bool->() ]])  =  [2]
+
+length (list :: [ Bool->() ])  =  2
+
+allUnique (list :: [ Bool->() ])  =  False
+
+ratioRepetitions (list :: [ Bool->() ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Bools-Bools.out b/tests/diff/tiers-mixed-Bools-Bools.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Bools-Bools.out
@@ -0,0 +1,1115 @@
+tiers :: [[Bool]->[Bool]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [False,False]
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> [False,False]
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [False,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,False]
+              [True] -> [False,False]
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,True]
+              [True] -> [False,True]
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,False]
+              [True] -> [True,False]
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,True]
+              [True] -> [True,True]
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> [False,False,False]
+              [False] -> [False,False,False]
+              [True] -> [False,False,False]
+              [False,False] -> [False,False,False]
+              [False,True] -> [False,False,False]
+              [True,False] -> [False,False,False]
+              [True,True] -> [False,False,False]
+              [False,False,False] -> [False,False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,False,True]
+              [False] -> [False,False,True]
+              [True] -> [False,False,True]
+              [False,False] -> [False,False,True]
+              [False,True] -> [False,False,True]
+              [True,False] -> [False,False,True]
+              [True,True] -> [False,False,True]
+              [False,False,False] -> [False,False,True]
+              ...
+    , \x -> case x of
+              [] -> [False,True,False]
+              [False] -> [False,True,False]
+              [True] -> [False,True,False]
+              [False,False] -> [False,True,False]
+              [False,True] -> [False,True,False]
+              [True,False] -> [False,True,False]
+              [True,True] -> [False,True,False]
+              [False,False,False] -> [False,True,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True,True]
+              [False] -> [False,True,True]
+              [True] -> [False,True,True]
+              [False,False] -> [False,True,True]
+              [False,True] -> [False,True,True]
+              [True,False] -> [False,True,True]
+              [True,True] -> [False,True,True]
+              [False,False,False] -> [False,True,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False,False]
+              [False] -> [True,False,False]
+              [True] -> [True,False,False]
+              [False,False] -> [True,False,False]
+              [False,True] -> [True,False,False]
+              [True,False] -> [True,False,False]
+              [True,True] -> [True,False,False]
+              [False,False,False] -> [True,False,False]
+              ...
+    , \x -> case x of
+              [] -> [True,False,True]
+              [False] -> [True,False,True]
+              [True] -> [True,False,True]
+              [False,False] -> [True,False,True]
+              [False,True] -> [True,False,True]
+              [True,False] -> [True,False,True]
+              [True,True] -> [True,False,True]
+              [False,False,False] -> [True,False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,True,False]
+              [False] -> [True,True,False]
+              [True] -> [True,True,False]
+              [False,False] -> [True,True,False]
+              [False,True] -> [True,True,False]
+              [True,False] -> [True,True,False]
+              [True,True] -> [True,True,False]
+              [False,False,False] -> [True,True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True,True]
+              [False] -> [True,True,True]
+              [True] -> [True,True,True]
+              [False,False] -> [True,True,True]
+              [False,True] -> [True,True,True]
+              [True,False] -> [True,True,True]
+              [True,True] -> [True,True,True]
+              [False,False,False] -> [True,True,True]
+              ...
+    , \x -> case x of
+              [] -> [False,False,False]
+              [False] -> [False,False,False]
+              [True] -> [False,False,False]
+              [False,False] -> [False,False,False]
+              [False,True] -> [False,False,False]
+              [True,False] -> [False,False,False]
+              [True,True] -> [False,False,False]
+              [False,False,False] -> [False,False,False]
+              ...
+    , \x -> case x of
+              [] -> [False,False,True]
+              [False] -> [False,False,True]
+              [True] -> [False,False,True]
+              [False,False] -> [False,False,True]
+              [False,True] -> [False,False,True]
+              [True,False] -> [False,False,True]
+              [True,True] -> [False,False,True]
+              [False,False,False] -> [False,False,True]
+              ...
+    , \x -> case x of
+              [] -> [False,True,False]
+              [False] -> [False,True,False]
+              [True] -> [False,True,False]
+              [False,False] -> [False,True,False]
+              [False,True] -> [False,True,False]
+              [True,False] -> [False,True,False]
+              [True,True] -> [False,True,False]
+              [False,False,False] -> [False,True,False]
+              ...
+    , \x -> case x of
+              [] -> [False,True,True]
+              [False] -> [False,True,True]
+              [True] -> [False,True,True]
+              [False,False] -> [False,True,True]
+              [False,True] -> [False,True,True]
+              [True,False] -> [False,True,True]
+              [True,True] -> [False,True,True]
+              [False,False,False] -> [False,True,True]
+              ...
+    , \x -> case x of
+              [] -> [True,False,False]
+              [False] -> [True,False,False]
+              [True] -> [True,False,False]
+              [False,False] -> [True,False,False]
+              [False,True] -> [True,False,False]
+              [True,False] -> [True,False,False]
+              [True,True] -> [True,False,False]
+              [False,False,False] -> [True,False,False]
+              ...
+    , \x -> case x of
+              [] -> [True,False,True]
+              [False] -> [True,False,True]
+              [True] -> [True,False,True]
+              [False,False] -> [True,False,True]
+              [False,True] -> [True,False,True]
+              [True,False] -> [True,False,True]
+              [True,True] -> [True,False,True]
+              [False,False,False] -> [True,False,True]
+              ...
+    , \x -> case x of
+              [] -> [True,True,False]
+              [False] -> [True,True,False]
+              [True] -> [True,True,False]
+              [False,False] -> [True,True,False]
+              [False,True] -> [True,True,False]
+              [True,False] -> [True,True,False]
+              [True,True] -> [True,True,False]
+              [False,False,False] -> [True,True,False]
+              ...
+    , \x -> case x of
+              [] -> [True,True,True]
+              [False] -> [True,True,True]
+              [True] -> [True,True,True]
+              [False,False] -> [True,True,True]
+              [False,True] -> [True,True,True]
+              [True,False] -> [True,True,True]
+              [True,True] -> [True,True,True]
+              [False,False,False] -> [True,True,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,False]
+              [True] -> []
+              [False,False] -> [False,False]
+              [False,True] -> [False,False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False,True]
+              [True] -> []
+              [False,False] -> [False,True]
+              [False,True] -> [False,True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,False]
+              [True] -> []
+              [False,False] -> [True,False]
+              [False,True] -> [True,False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True,False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True,True]
+              [True] -> []
+              [False,False] -> [True,True]
+              [False,True] -> [True,True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True,True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> [False]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> [False]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> [True]
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> [True]
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False,False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False,False]
+              [True,True] -> [False,False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False,True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False,True]
+              [True,True] -> [False,True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True,False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True,False]
+              [True,True] -> [True,False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True,True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True,True]
+              [True,True] -> [True,True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [False]
+              [True] -> []
+              [False,False] -> [False]
+              [False,True] -> [False]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [False]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> [True]
+              [True] -> []
+              [False,False] -> [True]
+              [False,True] -> [True]
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> [True]
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> [False]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [False]
+              [True,True] -> [False]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> [True]
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> [True]
+              [True,True] -> [True]
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [False,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,False]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    , \x -> case x of
+              [] -> [True,True]
+              [False] -> []
+              [True] -> []
+              [False,False] -> []
+              [False,True] -> []
+              [True,False] -> []
+              [True,True] -> []
+              [False,False,False] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [2,5,20,83,...]
+
+length (list :: [ [Bool]->[Bool] ])  =  Infinity
+
+allUnique (list :: [ [Bool]->[Bool] ])  =  False
+
+ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  43 % 110
diff --git a/tests/diff/tiers-mixed-Int-Int-Int.out b/tests/diff/tiers-mixed-Int-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Int-Int-Int.out
@@ -0,0 +1,3625 @@
+tiers :: [Int->Int->Int]  =
+  [ [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,-1) -> 2
+                (1,1) -> 2
+                (-1,0) -> 2
+                (0,2) -> 2
+                (1,-1) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,-1) -> 2
+                (1,1) -> 2
+                (-1,0) -> 2
+                (0,2) -> 2
+                (1,-1) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> 0
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> -1
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,-1) -> 2
+                (1,1) -> 2
+                (-1,0) -> 2
+                (0,2) -> 2
+                (1,-1) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,-1) -> 2
+                (1,1) -> 2
+                (-1,0) -> 2
+                (0,2) -> 2
+                (1,-1) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> -1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> 0
+                (1,1) -> -1
+                (-1,0) -> -1
+                (0,2) -> -1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> -1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 1
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 1
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> -1
+                (0,1) -> -1
+                (1,0) -> -1
+                (0,-1) -> -1
+                (1,1) -> -1
+                (-1,0) -> 0
+                (0,2) -> -1
+                (1,-1) -> -1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,-1) -> 1
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 1
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,-1) -> 0
+                (1,1) -> 1
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,-1) -> 0
+                (1,1) -> 0
+                (-1,0) -> 0
+                (0,2) -> 0
+                (1,-1) -> 0
+                ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Int->Int->Int ]])  =  [4,12,58,287,...]
+
+length (list :: [ Int->Int->Int ])  =  Infinity
+
+allUnique (list :: [ Int->Int->Int ])  =  False
+
+ratioRepetitions (list :: [ Int->Int->Int ])  =  315 % 361
diff --git a/tests/diff/tiers-mixed-Int-Int.out b/tests/diff/tiers-mixed-Int-Int.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Int-Int.out
@@ -0,0 +1,2997 @@
+tiers :: [Int->Int]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> -2
+              1 -> -2
+              -1 -> -2
+              2 -> -2
+              -2 -> -2
+              3 -> -2
+              -3 -> -2
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> -2
+              1 -> -2
+              -1 -> -2
+              2 -> -2
+              -2 -> -2
+              3 -> -2
+              -3 -> -2
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 2
+              2 -> 0
+              -2 -> 2
+              3 -> 0
+              -3 -> 2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> -1
+              2 -> 1
+              -2 -> -1
+              3 -> 1
+              -3 -> -1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 1
+              2 -> -1
+              -2 -> 1
+              3 -> -1
+              -3 -> 1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 0
+              2 -> 2
+              -2 -> 0
+              3 -> 2
+              -3 -> 0
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> -2
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> -1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              -1 -> 2
+              2 -> 2
+              -2 -> 2
+              3 -> 2
+              -3 -> 2
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -2
+              -1 -> -2
+              2 -> -2
+              -2 -> -2
+              3 -> -2
+              -3 -> -2
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 3
+              -1 -> 3
+              2 -> 3
+              -2 -> 3
+              3 -> 3
+              -3 -> 3
+              4 -> 3
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 3
+              -1 -> 3
+              2 -> 3
+              -2 -> 3
+              3 -> 3
+              -3 -> 3
+              4 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -2
+              2 -> 0
+              -2 -> -2
+              3 -> 0
+              -3 -> -2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 2
+              3 -> 0
+              -3 -> 2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 2
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 2
+              2 -> 1
+              -2 -> 2
+              3 -> 1
+              -3 -> 2
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> -1
+              3 -> 1
+              -3 -> -1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> -1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 2
+              2 -> 0
+              -2 -> 2
+              3 -> 0
+              -3 -> 2
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> -1
+              2 -> -1
+              -2 -> -1
+              3 -> -1
+              -3 -> -1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 1
+              3 -> -1
+              -3 -> 1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 1
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> -1
+              2 -> 1
+              -2 -> -1
+              3 -> 1
+              -3 -> -1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> -1
+              2 -> 0
+              -2 -> -1
+              3 -> 0
+              -3 -> -1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 1
+              2 -> 2
+              -2 -> 1
+              3 -> 2
+              -3 -> 1
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              -1 -> 0
+              2 -> 2
+              -2 -> 0
+              3 -> 2
+              -3 -> 0
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 1
+              2 -> -1
+              -2 -> 1
+              3 -> -1
+              -3 -> 1
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 1
+              -2 -> 1
+              3 -> 1
+              -3 -> 1
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 1
+              2 -> 0
+              -2 -> 1
+              3 -> 0
+              -3 -> 1
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -2
+              1 -> -2
+              -1 -> 0
+              2 -> -2
+              -2 -> 0
+              3 -> -2
+              -3 -> 0
+              4 -> -2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> -1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              -1 -> 0
+              2 -> 2
+              -2 -> 0
+              3 -> 2
+              -3 -> 0
+              4 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> -1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> -1
+              -2 -> 0
+              3 -> -1
+              -3 -> 0
+              4 -> -1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 1
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 1
+              -3 -> 0
+              4 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              -1 -> 0
+              2 -> 0
+              -2 -> 0
+              3 -> 0
+              -3 -> 0
+              4 -> 0
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Int->Int ]])  =  [2,3,8,20,61,204,...]
+
+length (list :: [ Int->Int ])  =  Infinity
+
+allUnique (list :: [ Int->Int ])  =  False
+
+ratioRepetitions (list :: [ Int->Int ])  =  211 % 298
diff --git a/tests/diff/tiers-mixed-Ints-Ints.out b/tests/diff/tiers-mixed-Ints-Ints.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Ints-Ints.out
@@ -0,0 +1,475 @@
+tiers :: [[Int]->[Int]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [-1] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [-1] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [-1] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [-1]
+              [0] -> [-1]
+              [0,0] -> [-1]
+              [1] -> [-1]
+              [0,0,0] -> [-1]
+              [0,1] -> [-1]
+              [1,0] -> [-1]
+              [-1] -> [-1]
+              ...
+    , \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [-1] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [-1] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [-1] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [-1]
+              [0] -> [-1]
+              [0,0] -> [-1]
+              [1] -> [-1]
+              [0,0,0] -> [-1]
+              [0,1] -> [-1]
+              [1,0] -> [-1]
+              [-1] -> [-1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [-1] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [-1] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> []
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> [0]
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [-1] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [-1] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Int]->[Int] ]])  =  [2,3,10,31,...]
+
+length (list :: [ [Int]->[Int] ])  =  Infinity
+
+allUnique (list :: [ [Int]->[Int] ])  =  False
+
+ratioRepetitions (list :: [ [Int]->[Int] ])  =  13 % 23
diff --git a/tests/diff/tiers-mixed-MBool-Bool.out b/tests/diff/tiers-mixed-MBool-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-MBool-Bool.out
@@ -0,0 +1,75 @@
+tiers :: [Maybe Bool->Bool]  =
+  [ [ \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> True
+    , \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> False
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> False
+              Just False -> True
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> False
+    , \x -> case x of
+              Nothing -> True
+              Just False -> False
+              Just True -> True
+    , \x -> case x of
+              Nothing -> True
+              Just False -> True
+              Just True -> True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [16]
+
+length (list :: [ Maybe Bool->Bool ])  =  Infinity
+
+allUnique (list :: [ Maybe Bool->Bool ])  =  False
+
+ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-MBool-MBool.out b/tests/diff/tiers-mixed-MBool-MBool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-MBool-MBool.out
@@ -0,0 +1,230 @@
+tiers :: [Maybe Bool->Maybe Bool]  =
+  [ [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Nothing
+    ]
+  , [ \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Nothing
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Nothing
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Nothing
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Nothing
+              Just True -> Just True
+    ]
+  , [ \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just False
+              Just False -> Just True
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just False
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just False
+              Just True -> Just True
+    , \x -> case x of
+              Nothing -> Just True
+              Just False -> Just True
+              Just True -> Just True
+    ]
+  ]
+
+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [2,12,24,16]
+
+length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity
+
+allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  False
+
+ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Nat,Nat-Nat.out b/tests/diff/tiers-mixed-Nat,Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat,Nat-Nat.out
@@ -0,0 +1,745 @@
+tiers :: [(Nat,Nat)->Nat]  =
+  [ [ \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 2
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 2
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 2
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 2
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 2
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 2
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 3
+              (0,1) -> 3
+              (1,0) -> 3
+              (0,2) -> 3
+              (1,1) -> 3
+              (2,0) -> 3
+              (0,3) -> 3
+              (1,2) -> 3
+              ...
+    , \x -> case x of
+              (0,0) -> 3
+              (0,1) -> 3
+              (1,0) -> 3
+              (0,2) -> 3
+              (1,1) -> 3
+              (2,0) -> 3
+              (0,3) -> 3
+              (1,2) -> 3
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 2
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 2
+              (2,0) -> 0
+              (0,3) -> 2
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 0
+              (1,0) -> 2
+              (0,2) -> 2
+              (1,1) -> 0
+              (2,0) -> 2
+              (0,3) -> 0
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 2
+              (0,2) -> 0
+              (1,1) -> 2
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 2
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 1
+              (0,2) -> 1
+              (1,1) -> 1
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 1
+              (0,2) -> 0
+              (1,1) -> 1
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 1
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 2
+              (0,1) -> 2
+              (1,0) -> 0
+              (0,2) -> 2
+              (1,1) -> 0
+              (2,0) -> 2
+              (0,3) -> 2
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 1
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 1
+              (0,1) -> 1
+              (1,0) -> 0
+              (0,2) -> 1
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 1
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    , \x -> case x of
+              (0,0) -> 0
+              (0,1) -> 0
+              (1,0) -> 0
+              (0,2) -> 0
+              (1,1) -> 0
+              (2,0) -> 0
+              (0,3) -> 0
+              (1,2) -> 0
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [2,4,14,53,...]
+
+length (list :: [ (Nat,Nat)->Nat ])  =  Infinity
+
+allUnique (list :: [ (Nat,Nat)->Nat ])  =  False
+
+ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  41 % 73
diff --git a/tests/diff/tiers-mixed-Nat-Nat-Nat.out b/tests/diff/tiers-mixed-Nat-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat-Nat-Nat.out
@@ -0,0 +1,3625 @@
+tiers :: [Nat->Nat->Nat]  =
+  [ [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , [ \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 3
+                (0,1) -> 3
+                (1,0) -> 3
+                (0,2) -> 3
+                (1,1) -> 3
+                (2,0) -> 3
+                (0,3) -> 3
+                (1,2) -> 3
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 3
+                (0,1) -> 3
+                (1,0) -> 3
+                (0,2) -> 3
+                (1,1) -> 3
+                (2,0) -> 3
+                (0,3) -> 3
+                (1,2) -> 3
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 3
+                (0,1) -> 3
+                (1,0) -> 3
+                (0,2) -> 3
+                (1,1) -> 3
+                (2,0) -> 3
+                (0,3) -> 3
+                (1,2) -> 3
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 3
+                (0,1) -> 3
+                (1,0) -> 3
+                (0,2) -> 3
+                (1,1) -> 3
+                (2,0) -> 3
+                (0,3) -> 3
+                (1,2) -> 3
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 2
+                (0,2) -> 0
+                (1,1) -> 2
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 2
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 1
+                (0,2) -> 1
+                (1,1) -> 1
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 1
+                (0,2) -> 0
+                (1,1) -> 1
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 1
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 2
+                (0,1) -> 2
+                (1,0) -> 0
+                (0,2) -> 2
+                (1,1) -> 0
+                (2,0) -> 2
+                (0,3) -> 2
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 1
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 1
+                (0,1) -> 1
+                (1,0) -> 0
+                (0,2) -> 1
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 1
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    , \x y -> case (x,y) of
+                (0,0) -> 0
+                (0,1) -> 0
+                (1,0) -> 0
+                (0,2) -> 0
+                (1,1) -> 0
+                (2,0) -> 0
+                (0,3) -> 0
+                (1,2) -> 0
+                ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [4,12,58,287,...]
+
+length (list :: [ Nat->Nat->Nat ])  =  Infinity
+
+allUnique (list :: [ Nat->Nat->Nat ])  =  False
+
+ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  313 % 361
diff --git a/tests/diff/tiers-mixed-Nat-Nat.out b/tests/diff/tiers-mixed-Nat-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat-Nat.out
@@ -0,0 +1,2997 @@
+tiers :: [Nat->Nat]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 4
+              1 -> 4
+              2 -> 4
+              3 -> 4
+              4 -> 4
+              5 -> 4
+              6 -> 4
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 4
+              1 -> 4
+              2 -> 4
+              3 -> 4
+              4 -> 4
+              5 -> 4
+              6 -> 4
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 3
+              4 -> 0
+              5 -> 3
+              6 -> 0
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+              3 -> 2
+              4 -> 1
+              5 -> 2
+              6 -> 1
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+              3 -> 1
+              4 -> 2
+              5 -> 1
+              6 -> 2
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 3
+              3 -> 0
+              4 -> 3
+              5 -> 0
+              6 -> 3
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> 4
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 3
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 3
+              3 -> 3
+              4 -> 3
+              5 -> 3
+              6 -> 3
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 4
+              2 -> 4
+              3 -> 4
+              4 -> 4
+              5 -> 4
+              6 -> 4
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 5
+              1 -> 5
+              2 -> 5
+              3 -> 5
+              4 -> 5
+              5 -> 5
+              6 -> 5
+              7 -> 5
+              ...
+    , \x -> case x of
+              0 -> 5
+              1 -> 5
+              2 -> 5
+              3 -> 5
+              4 -> 5
+              5 -> 5
+              6 -> 5
+              7 -> 5
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 4
+              2 -> 0
+              3 -> 4
+              4 -> 0
+              5 -> 4
+              6 -> 0
+              7 -> 4
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 3
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 3
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 3
+              2 -> 1
+              3 -> 3
+              4 -> 1
+              5 -> 3
+              6 -> 1
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 2
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 2
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 3
+              2 -> 0
+              3 -> 3
+              4 -> 0
+              5 -> 3
+              6 -> 0
+              7 -> 3
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+              3 -> 2
+              4 -> 2
+              5 -> 2
+              6 -> 2
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 1
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 1
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 1
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 1
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 1
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+              3 -> 2
+              4 -> 0
+              5 -> 2
+              6 -> 0
+              7 -> 2
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 1
+              2 -> 3
+              3 -> 1
+              4 -> 3
+              5 -> 1
+              6 -> 3
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 3
+              3 -> 0
+              4 -> 3
+              5 -> 0
+              6 -> 3
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 2
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 2
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 1
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 2
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 1
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+              3 -> 1
+              4 -> 0
+              5 -> 1
+              6 -> 0
+              7 -> 1
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 4
+              1 -> 0
+              2 -> 4
+              3 -> 0
+              4 -> 4
+              5 -> 0
+              6 -> 4
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 3
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 3
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 2
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 1
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 3
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 3
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 2
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 1
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+              3 -> 0
+              4 -> 0
+              5 -> 0
+              6 -> 0
+              7 -> 0
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->Nat ]])  =  [2,3,8,20,61,204,...]
+
+length (list :: [ Nat->Nat ])  =  Infinity
+
+allUnique (list :: [ Nat->Nat ])  =  False
+
+ratioRepetitions (list :: [ Nat->Nat ])  =  85 % 149
diff --git a/tests/diff/tiers-mixed-Nat-U.out b/tests/diff/tiers-mixed-Nat-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat-U.out
@@ -0,0 +1,677 @@
+tiers :: [Nat->()]  =
+  [ [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , [ \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    , \x -> case x of
+              0 -> ()
+              1 -> ()
+              2 -> ()
+              3 -> ()
+              4 -> ()
+              5 -> ()
+              6 -> ()
+              7 -> ()
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ Nat->() ]])  =  [2,1,2,5,14,42,...]
+
+length (list :: [ Nat->() ])  =  Infinity
+
+allUnique (list :: [ Nat->() ])  =  False
+
+ratioRepetitions (list :: [ Nat->() ])  =  65 % 66
diff --git a/tests/diff/tiers-mixed-Nat2-Nat2.out b/tests/diff/tiers-mixed-Nat2-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat2-Nat2.out
@@ -0,0 +1,37 @@
+tiers :: [Nat2->Nat2]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+    ]
+  ]
+
+map length (tiers :: [[ Nat2->Nat2 ]])  =  [2,4,2]
+
+length (list :: [ Nat2->Nat2 ])  =  8
+
+allUnique (list :: [ Nat2->Nat2 ])  =  False
+
+ratioRepetitions (list :: [ Nat2->Nat2 ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Nat2-Nat3.out b/tests/diff/tiers-mixed-Nat2-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat2-Nat3.out
@@ -0,0 +1,69 @@
+tiers :: [Nat2->Nat3]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+    ]
+  ]
+
+map length (tiers :: [[ Nat2->Nat3 ]])  =  [2,4,6,4,2]
+
+length (list :: [ Nat2->Nat3 ])  =  Infinity
+
+allUnique (list :: [ Nat2->Nat3 ])  =  False
+
+ratioRepetitions (list :: [ Nat2->Nat3 ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Nat3-Nat2.out b/tests/diff/tiers-mixed-Nat3-Nat2.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat3-Nat2.out
@@ -0,0 +1,78 @@
+tiers :: [Nat3->Nat2]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    ]
+  ]
+
+map length (tiers :: [[ Nat3->Nat2 ]])  =  [2,6,6,2]
+
+length (list :: [ Nat3->Nat2 ])  =  Infinity
+
+allUnique (list :: [ Nat3->Nat2 ])  =  False
+
+ratioRepetitions (list :: [ Nat3->Nat2 ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Nat3-Nat3.out b/tests/diff/tiers-mixed-Nat3-Nat3.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nat3-Nat3.out
@@ -0,0 +1,233 @@
+tiers :: [Nat3->Nat3]  =
+  [ [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 0
+    , \x -> case x of
+              0 -> 0
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 0
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 1
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 0
+    ]
+  , [ \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 1
+    , \x -> case x of
+              0 -> 1
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 1
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 1
+    ]
+  , [ \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+    , \x -> case x of
+              0 -> 2
+              1 -> 2
+              2 -> 2
+    ]
+  ]
+
+map length (tiers :: [[ Nat3->Nat3 ]])  =  [2,6,12,14,12,6,2]
+
+length (list :: [ Nat3->Nat3 ])  =  Infinity
+
+allUnique (list :: [ Nat3->Nat3 ])  =  False
+
+ratioRepetitions (list :: [ Nat3->Nat3 ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Nats-Nats.out b/tests/diff/tiers-mixed-Nats-Nats.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Nats-Nats.out
@@ -0,0 +1,475 @@
+tiers :: [[Nat]->[Nat]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [2] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [2] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [2] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [2]
+              [0] -> [2]
+              [0,0] -> [2]
+              [1] -> [2]
+              [0,0,0] -> [2]
+              [0,1] -> [2]
+              [1,0] -> [2]
+              [2] -> [2]
+              ...
+    , \x -> case x of
+              [] -> [0,0,0]
+              [0] -> [0,0,0]
+              [0,0] -> [0,0,0]
+              [1] -> [0,0,0]
+              [0,0,0] -> [0,0,0]
+              [0,1] -> [0,0,0]
+              [1,0] -> [0,0,0]
+              [2] -> [0,0,0]
+              ...
+    , \x -> case x of
+              [] -> [0,1]
+              [0] -> [0,1]
+              [0,0] -> [0,1]
+              [1] -> [0,1]
+              [0,0,0] -> [0,1]
+              [0,1] -> [0,1]
+              [1,0] -> [0,1]
+              [2] -> [0,1]
+              ...
+    , \x -> case x of
+              [] -> [1,0]
+              [0] -> [1,0]
+              [0,0] -> [1,0]
+              [1] -> [1,0]
+              [0,0,0] -> [1,0]
+              [0,1] -> [1,0]
+              [1,0] -> [1,0]
+              [2] -> [1,0]
+              ...
+    , \x -> case x of
+              [] -> [2]
+              [0] -> [2]
+              [0,0] -> [2]
+              [1] -> [2]
+              [0,0,0] -> [2]
+              [0,1] -> [2]
+              [1,0] -> [2]
+              [2] -> [2]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0,0]
+              [0,0] -> [0,0]
+              [1] -> [0,0]
+              [0,0,0] -> [0,0]
+              [0,1] -> [0,0]
+              [1,0] -> [0,0]
+              [2] -> [0,0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [1]
+              [0,0] -> [1]
+              [1] -> [1]
+              [0,0,0] -> [1]
+              [0,1] -> [1]
+              [1,0] -> [1]
+              [2] -> [1]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> [0]
+              [1] -> []
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> []
+              [1] -> [0]
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> [0]
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> [0]
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> []
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> []
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> [0]
+              [0,0] -> [0]
+              [1] -> [0]
+              [0,0,0] -> [0]
+              [0,1] -> [0]
+              [1,0] -> [0]
+              [2] -> [0]
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [0,0]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    , \x -> case x of
+              [] -> [1]
+              [0] -> []
+              [0,0] -> []
+              [1] -> []
+              [0,0,0] -> []
+              [0,1] -> []
+              [1,0] -> []
+              [2] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [2,3,10,31,...]
+
+length (list :: [ [Nat]->[Nat] ])  =  Infinity
+
+allUnique (list :: [ [Nat]->[Nat] ])  =  False
+
+ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  13 % 23
diff --git a/tests/diff/tiers-mixed-U-Bool.out b/tests/diff/tiers-mixed-U-Bool.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-U-Bool.out
@@ -0,0 +1,19 @@
+tiers :: [()->Bool]  =
+  [ [ \x -> case x of
+              () -> False
+    , \x -> case x of
+              () -> True
+    , \x -> case x of
+              () -> False
+    , \x -> case x of
+              () -> True
+    ]
+  ]
+
+map length (tiers :: [[ ()->Bool ]])  =  [4]
+
+length (list :: [ ()->Bool ])  =  4
+
+allUnique (list :: [ ()->Bool ])  =  False
+
+ratioRepetitions (list :: [ ()->Bool ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-U-Nat.out b/tests/diff/tiers-mixed-U-Nat.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-U-Nat.out
@@ -0,0 +1,41 @@
+tiers :: [()->Nat]  =
+  [ [ \x -> case x of
+              () -> 0
+    , \x -> case x of
+              () -> 0
+    ]
+  , [ \x -> case x of
+              () -> 1
+    , \x -> case x of
+              () -> 1
+    ]
+  , [ \x -> case x of
+              () -> 2
+    , \x -> case x of
+              () -> 2
+    ]
+  , [ \x -> case x of
+              () -> 3
+    , \x -> case x of
+              () -> 3
+    ]
+  , [ \x -> case x of
+              () -> 4
+    , \x -> case x of
+              () -> 4
+    ]
+  , [ \x -> case x of
+              () -> 5
+    , \x -> case x of
+              () -> 5
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ ()->Nat ]])  =  [2,2,2,2,2,2,...]
+
+length (list :: [ ()->Nat ])  =  Infinity
+
+allUnique (list :: [ ()->Nat ])  =  False
+
+ratioRepetitions (list :: [ ()->Nat ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-U-U.out b/tests/diff/tiers-mixed-U-U.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-U-U.out
@@ -0,0 +1,15 @@
+tiers :: [()->()]  =
+  [ [ \x -> case x of
+              () -> ()
+    , \x -> case x of
+              () -> ()
+    ]
+  ]
+
+map length (tiers :: [[ ()->() ]])  =  [2]
+
+length (list :: [ ()->() ])  =  2
+
+allUnique (list :: [ ()->() ])  =  False
+
+ratioRepetitions (list :: [ ()->() ])  =  1 % 2
diff --git a/tests/diff/tiers-mixed-Us-Us.out b/tests/diff/tiers-mixed-Us-Us.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers-mixed-Us-Us.out
@@ -0,0 +1,265 @@
+tiers :: [[()]->[()]]  =
+  [ [ \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> [(),()]
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> [(),()]
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , [ \x -> case x of
+              [] -> [(),()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> [(),(),()]
+              [()] -> [(),(),()]
+              [(),()] -> [(),(),()]
+              [(),(),()] -> [(),(),()]
+              [(),(),(),()] -> [(),(),()]
+              [(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),(),()] -> [(),(),()]
+              ...
+    , \x -> case x of
+              [] -> [(),(),()]
+              [()] -> [(),(),()]
+              [(),()] -> [(),(),()]
+              [(),(),()] -> [(),(),()]
+              [(),(),(),()] -> [(),(),()]
+              [(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),()] -> [(),(),()]
+              [(),(),(),(),(),(),()] -> [(),(),()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [(),()]
+              [(),()] -> [(),()]
+              [(),(),()] -> [(),()]
+              [(),(),(),()] -> [(),()]
+              [(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),()] -> [(),()]
+              [(),(),(),(),(),(),()] -> [(),()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> []
+              [()] -> [()]
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> [()]
+              [(),()] -> [()]
+              [(),(),()] -> [()]
+              [(),(),(),()] -> [()]
+              [(),(),(),(),()] -> [()]
+              [(),(),(),(),(),()] -> [()]
+              [(),(),(),(),(),(),()] -> [()]
+              ...
+    , \x -> case x of
+              [] -> [()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    , \x -> case x of
+              [] -> [(),()]
+              [()] -> []
+              [(),()] -> []
+              [(),(),()] -> []
+              [(),(),(),()] -> []
+              [(),(),(),(),()] -> []
+              [(),(),(),(),(),()] -> []
+              [(),(),(),(),(),(),()] -> []
+              ...
+    ]
+  , ...
+  ]
+
+map length (tiers :: [[ [()]->[()] ]])  =  [2,3,7,13,...]
+
+length (list :: [ [()]->[()] ])  =  Infinity
+
+allUnique (list :: [ [()]->[()] ])  =  False
+
+ratioRepetitions (list :: [ [()]->[()] ])  =  14 % 25
diff --git a/tests/diff/tiers.out b/tests/diff/tiers.out
new file mode 100644
--- /dev/null
+++ b/tests/diff/tiers.out
@@ -0,0 +1,10 @@
+tiers :: [()]  =
+  [[()]]
+
+map length (tiers :: [[ () ]])  =  [1]
+
+length (list :: [ () ])  =  1
+
+allUnique (list :: [ () ])  =  True
+
+ratioRepetitions (list :: [ () ])  =  0 % 1
diff --git a/tests/test-derive.hs b/tests/test-derive.hs
--- a/tests/test-derive.hs
+++ b/tests/test-derive.hs
@@ -5,7 +5,7 @@
 import Test.LeanCheck
 import Test.LeanCheck.Derive
 import System.Exit (exitFailure)
-import Data.List (elemIndices)
+import Data.List (elemIndices,sort)
 import Test.LeanCheck.Utils.Operators
 
 data D0       = D0                    deriving Show
@@ -85,6 +85,19 @@
   , map unD1 list == (list :: [Bool])
   , map unD2 list == (list :: [(Bool,Bool)])
   , map unD3 list == (list :: [(Bool,Bool,Bool)])
+
+  , (tiers :: [[ Bool       ]]) =| 6 |= $(deriveTiers ''Bool)
+  , (tiers :: [[ [Int]      ]]) =| 6 |= $(deriveTiers ''[])
+  , (tiers :: [[ [Bool]     ]]) =| 6 |= $(deriveTiers ''[])
+  , (tiers :: [[ Maybe Int  ]]) =| 6 |= $(deriveTiers ''Maybe)
+  , (tiers :: [[ Maybe Bool ]]) =| 6 |= $(deriveTiers ''Maybe)
+  , ([]:tiers :: [[Either Bool Int]]) =$ map sort . take 6 $= $(deriveTiers ''Either)
+
+  , (list :: [ Bool       ]) =| n |= $(deriveList ''Bool)
+  , (list :: [ [Int]      ]) =| n |= $(deriveList ''[])
+  , (list :: [ [Bool]     ]) =| n |= $(deriveList ''[])
+  , (list :: [ Maybe Int  ]) =| n |= $(deriveList ''Maybe)
+  , (list :: [ Maybe Bool ]) =| n |= $(deriveList ''Maybe)
   ]
   where
   unD0 (D0)       = ()
diff --git a/tests/test-fun.hs b/tests/test-fun.hs
new file mode 100644
--- /dev/null
+++ b/tests/test-fun.hs
@@ -0,0 +1,29 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test
+
+import System.Exit (exitFailure)
+import Data.List (elemIndices, sort, nub, delete)
+
+import Test.LeanCheck
+import Test.LeanCheck.Function.ListsOfPairs
+import Test.LeanCheck.Utils
+
+
+main :: IO ()
+main =
+  case elemIndices False tests of
+    [] -> putStrLn "Tests passed!"
+    is -> do putStrLn ("Failed tests:" ++ show is)
+             exitFailure
+
+tests =
+  [ True
+  -- TODO: add some tests here
+  ]
+
+allUnique :: Ord a => [a] -> Bool
+allUnique [] = True
+allUnique (x:xs) = x `notElem` xs
+                && allUnique (filter (< x) xs)
+                && allUnique (filter (> x) xs)
diff --git a/tests/test-funshow.hs b/tests/test-funshow.hs
new file mode 100644
--- /dev/null
+++ b/tests/test-funshow.hs
@@ -0,0 +1,80 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test
+
+import System.Exit (exitFailure)
+import Data.List (elemIndices,sort)
+import Test.LeanCheck.Function.ShowFunction
+import Test.LeanCheck.Function.Show
+import Test.LeanCheck.Utils.TypeBinding
+
+main :: IO ()
+main =
+  case elemIndices False tests of
+    [] -> putStrLn "Tests passed!"
+    is -> do putStrLn ("Failed tests:" ++ show is)
+             exitFailure
+
+
+tests =
+  [ True
+
+  -- undefined values --
+  , showFunction 2 int == "undefined"
+  , showFunction 2 bool == "undefined"
+  , showFunction 2 char == "undefined"
+  , showFunctionLine 10 (int  >- int) == "\\x -> case x of ..."
+  , showFunctionLine 10 (bool >- bool) == "\\x -> undefined"
+
+  -- partially defined --
+  , showFunctionLine 2 (\x -> case x of True -> True)
+                   == "\\x -> case x of True -> True"
+  , showFunctionLine 10 (\x -> case (x::Int) of 3 -> (4::Int); 5 -> 6)
+                    == "\\x -> case x of 3 -> 4; 5 -> 6; ..."
+  , showFunctionLine 10 (\x y -> case (x::Int,y::Int) of (1,2) -> (3::Int); (2,1) -> 3)
+                    == "\\x y -> case (x,y) of (1,2) -> 3; (2,1) -> 3; ..."
+
+  -- fully defined, infinite --
+  , showFunction 3 ((+) -:> int)
+    == "\\x y -> case (x,y) of\n"
+    ++ "          (0,0) -> 0\n"
+    ++ "          (0,1) -> 1\n"
+    ++ "          (1,0) -> 1\n"
+    ++ "          ...\n"
+  , showFunction 3 ((++) -:> [int])
+    == "\\x y -> case (x,y) of\n"
+    ++ "          ([],[]) -> []\n"
+    ++ "          ([],[0]) -> [0]\n"
+    ++ "          ([0],[]) -> [0]\n"
+    ++ "          ...\n"
+  , showFunction 4 (sort -:> [char])
+    == "\\x -> case x of\n"
+    ++ "        \"\" -> \"\"\n"
+    ++ "        \"a\" -> \"a\"\n"
+    ++ "        \"aa\" -> \"aa\"\n"
+    ++ "        \" \" -> \" \"\n"
+    ++ "        ...\n"
+
+
+  -- fully defined, finite --
+  , showFunction 1 not
+    == "\\x -> case x of\n"
+    ++ "        False -> True\n"
+    ++ "        ...\n"
+  , showFunction 2 not
+    == "\\x -> case x of\n"
+    ++ "        False -> True\n"
+    ++ "        True -> False\n"
+  , showFunction 3 (&&)
+    == "\\x y -> case (x,y) of\n"
+    ++ "          (False,False) -> False\n"
+    ++ "          (False,True) -> False\n"
+    ++ "          (True,False) -> False\n"
+    ++ "          ...\n"
+  , showFunction 4 (&&)
+    == "\\x y -> case (x,y) of\n"
+    ++ "          (False,False) -> False\n"
+    ++ "          (False,True) -> False\n"
+    ++ "          (True,False) -> False\n"
+    ++ "          (True,True) -> True\n"
+  ]
diff --git a/tests/test-io.hs b/tests/test-io.hs
new file mode 100644
--- /dev/null
+++ b/tests/test-io.hs
@@ -0,0 +1,10 @@
+-- Copyright (c) 2015-2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test
+import Test.LeanCheck.IO
+
+main :: IO ()
+main = do
+  check $ \x -> (x::Int) + x == 2*x    -- should pass
+--check $ \x -> (x::Int) + x == x      -- should fail, falsifiable
+--check $ \x -> (x::Int) `div` x == 1  -- should fail, exception
diff --git a/tests/test-sdist b/tests/test-sdist
new file mode 100644
--- /dev/null
+++ b/tests/test-sdist
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# test-sdist: tests the package generated by "cabal sdist".
+#
+# Copyright (c) 2015-2017 Rudy Matela.
+# Distributed under the 3-Clause BSD licence.
+#
+# TODO: also run "make test"
+# TODO: also run "stack test"
+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 &&
+rm -rf $pkg/ &&
+tar -xzf $pkg.tar.gz &&
+cd $pkg/ &&
+cabal configure --enable-tests --enable-benchmarks &&
+cabal build &&
+cabal test &&
+cd .. &&
+if [ -d ../.git ]
+then
+	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
+	true # skip test
+fi
diff --git a/tests/test-stats.hs b/tests/test-stats.hs
new file mode 100644
--- /dev/null
+++ b/tests/test-stats.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2017 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+import Test
+
+import System.Exit (exitFailure)
+import Data.List (elemIndices,sort)
+import Test.LeanCheck
+import Test.LeanCheck.Stats
+
+import Data.List (isPrefixOf)
+import Data.Function (on)
+
+main :: IO ()
+main = do
+  putStrLn "sum :: [Int] -> Bool"
+  classStats 100 (sum     :: [Int] -> Int)
+
+  putStrLn "length :: [Int] -> Int"
+  classStats 100 (length  :: [Int] -> Int)
+
+  putStrLn "take 1 :: [Int] -> [Int]"
+  classStats 100 (take 1  :: [Int] -> [Int])
+
+  conditionStats 1000 [ ("odd",odd :: Int -> Bool)
+                      , ("even",even) ]
+
+  conditionStats 1000 [ ("ordered",ordered :: [Int] -> Bool)
+                      , ("ordered . reverse", ordered . reverse) ]
+
+  case elemIndices False (tests 100) of
+    [] -> putStrLn "Tests passed!"
+    is -> do putStrLn ("Failed tests:" ++ show is)
+             exitFailure
+
+tests :: Int -> [Bool]
+tests n =
+  [ True
+
+  , classify                   [1,2,3,4,1,2,3,1,2,1] == [[1,1,1,1],[2,2,2],[3,3],[4]]
+  , classifyBy ((==) `on` odd) [1,2,3,4,1,2,3,1,2,1] == [[1,3,1,3,1,1],[2,4,2,2]]
+  , classifyOn odd             [1,2,3,4,1,2,3,1,2,1] == [[1,3,1,3,1,1],[2,4,2,2]]
+  , counts                   [1,2,3,4,1,2,3,1,2,1] == [(1,4),(2,3),(3,2),(4,1)]
+  , countsBy ((==) `on` odd) [1,2,3,4,1,2,3,1,2,1] == [(1,6),(2,4)]
+  , countsOn odd             [1,2,3,4,1,2,3,1,2,1::Int] == [(True,6),(False,4)]
+  ]
