diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,9 @@
 eg/u-speculate
 eg/u-conjure
 bench/compare
+bench/match-noop
+bench/match-list
+bench/match-triexpr
 bench/pairs
 bench/sort
 bench/tiers
@@ -39,6 +42,7 @@
 test/fold
 test/ord
 test/show
+test/triexpr
 doc/**/*.html
 doc/**/*.css
 doc/**/*.js
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
--- a/.travis.yml
+++ /dev/null
@@ -1,94 +0,0 @@
-# .travis.yml file for Express
-#
-# Copyright:   (c) 2017-2021 Rudy Matela
-# License:     3-Clause BSD  (see the file LICENSE)
-# Maintainer:  Rudy Matela <rudy@matela.com.br>
-
-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
-- haddock --version
-- du -hd3 ~/.cabal ~/.ghc || true
-- du -hd4 ~/.stack || true
-- rm -f ~/.cabal/config && cabal update
-# Download and unpack the stack executable
-# "Once Travis whitelists the stack.dev files," simply include stack in the
-# 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
-- cabal install leancheck || cabal install leancheck --lib
-
-script:
-- make && make test
-- make haddock
-- make test-sdist
-- cabal test main --ghc-option=-O0
-- stack --resolver $STACKVER --no-terminal --skip-ghc-check test --ghc-options=-O0
-
-matrix:
-  allow_failures:
-  - env:                   GHCVER=head        CABALVER=head    STACKVER=nightly-2021-04-06
-  - env:                   GHCVER=9.0.1       CABALVER=head    STACKVER=nightly-2021-04-06
-  include:
-  - ghc: 'head'
-    env:                   GHCVER=head        CABALVER=head    STACKVER=nightly-2021-04-06
-    addons: {apt: {packages: [ghc-head,  cabal-install-head],  sources: hvr-ghc}}
-  - ghc: '9.0'
-    env:                   GHCVER=9.0.1       CABALVER=head    STACKVER=nightly-2021-04-06
-    addons: {apt: {packages: [ghc-9.0.1, cabal-install-head],  sources: hvr-ghc}}
-  - ghc: '8.10'
-    env:                   GHCVER=8.10.4       CABALVER=3.2    STACKVER=lts-17.9
-    addons: {apt: {packages: [ghc-8.10.4, cabal-install-3.2],  sources: hvr-ghc}}
-  - ghc: '8.8'
-    env:                   GHCVER=8.8.4        CABALVER=3.0    STACKVER=lts-16.31
-    addons: {apt: {packages: [ghc-8.8.4,  cabal-install-3.0],  sources: hvr-ghc}}
-  - ghc: '8.6'
-    env:                   GHCVER=8.6.5        CABALVER=2.4    STACKVER=lts-14.27
-    addons: {apt: {packages: [ghc-8.6.5,  cabal-install-2.4],  sources: hvr-ghc}}
-  - ghc: '8.4'
-    env:                   GHCVER=8.4.4        CABALVER=2.2    STACKVER=lts-12.26
-    addons: {apt: {packages: [ghc-8.4.4,  cabal-install-2.2],  sources: hvr-ghc}}
-  - ghc: '8.2'
-    env:                   GHCVER=8.2.2        CABALVER=2.0    STACKVER=lts-11.22
-    addons: {apt: {packages: [ghc-8.2.2,  cabal-install-2.0],  sources: hvr-ghc}}
-  - ghc: '8.0'
-    env:                   GHCVER=8.0.2        CABALVER=1.24   STACKVER=lts-9.21
-    addons: {apt: {packages: [ghc-8.0.2,  cabal-install-1.24], sources: hvr-ghc}}
-  - ghc: '7.10'
-    env:                   GHCVER=7.10.3       CABALVER=1.22   STACKVER=lts-6.35
-    addons: {apt: {packages: [ghc-7.10.3, cabal-install-1.22], sources: hvr-ghc}}
-  # we only support stack with GHC >= 7.10
-  - ghc: '7.8'
-    env:                   GHCVER=7.8.4        CABALVER=1.18
-    addons: {apt: {packages: [ghc-7.8.4,  cabal-install-1.18], sources: hvr-ghc}}
-    before_install:
-    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
-    - ghc --version
-    - cabal --version
-    - haddock --version
-    - rm -f ~/.cabal/config && cabal update
-    - cabal install Cabal==1.18.*
-    - cabal install leancheck
-    script:
-    - make && make test
-    - make haddock HADDOCKFLAGS=
-    - make test-sdist
-    - cabal test
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -20,6 +20,7 @@
   test/fold \
   test/show \
   test/ord \
+  test/triexpr \
   test/listable
 EGS =
 BENCHS = \
@@ -27,6 +28,9 @@
   eg/u-speculate \
   eg/u-conjure \
   bench/compare \
+  bench/match-list \
+  bench/match-noop \
+  bench/match-triexpr \
   bench/pairs \
   bench/sort \
   bench/tiers \
@@ -59,7 +63,8 @@
 .PHONY: %.bench
 %.bench: %
 	@mkdir -p bench/runtime/$$HOSTNAME/$<
-	@printf "%-18s " $<
+	@rmdir bench/runtime/$$HOSTNAME/$<
+	@printf "%-20s " $<
 	@/usr/bin/time -f%e ./$< 2>&1 >/dev/null | tee bench/runtime/$$HOSTNAME/$<.runtime
 
 clean: clean-hi-o clean-haddock
diff --git a/bench/match-list.hs b/bench/match-list.hs
new file mode 100644
--- /dev/null
+++ b/bench/match-list.hs
@@ -0,0 +1,24 @@
+-- match-list.hs -- how long it takes to match expression in a list?
+--
+-- Copyright (c) 2021 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+--
+-- This program has the same parameters as other match*.hs benchmarks.
+import Test
+
+
+
+showEq :: (Expr, Expr) -> String
+showEq (lhs, rhs)  =  showExpr lhs ++ "  =  " ++ showExpr rhs
+
+exprs :: [Expr]
+exprs  =  take 360360 list
+
+query :: Expr -> Maybe (Expr,[(Expr,Expr)],Expr)
+query e  =  listToMaybe [(e1,ms,e2) | (e1,e2) <- sort allRules, ms <- maybeToList (e `match` e1)]
+
+main :: IO ()
+main  =  do
+  putStrLn $ unlines $ map showEq $ allRules
+  putStrLn $ unlines $ map show $ mapMaybe query $ take 1080 $ exprs
+  print $ (== ']') $ last $ show $ mapMaybe query exprs
diff --git a/bench/match-noop.hs b/bench/match-noop.hs
new file mode 100644
--- /dev/null
+++ b/bench/match-noop.hs
@@ -0,0 +1,24 @@
+-- exprs.hs -- how long it takes to enumerate expressions?
+--
+-- Copyright (c) 2021 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+--
+-- This program has the same parameters as other match*.hs benchmarks.
+import Test
+
+
+
+showEq :: (Expr, Expr) -> String
+showEq (lhs, rhs)  =  showExpr lhs ++ "  =  " ++ showExpr rhs
+
+exprs :: [Expr]
+exprs  =  take 360360 list
+
+query :: Expr -> Maybe (Expr,[(Expr,Expr)],Expr)
+query e  =  Just (e,[],e)
+
+main :: IO ()
+main  =  do
+  putStrLn $ unlines $ map showEq $ allRules
+  putStrLn $ unlines $ map show $ mapMaybe query $ take 1080 $ exprs
+  print $ (== ']') $ last $ show $ mapMaybe query exprs
diff --git a/bench/match-triexpr.hs b/bench/match-triexpr.hs
new file mode 100644
--- /dev/null
+++ b/bench/match-triexpr.hs
@@ -0,0 +1,27 @@
+-- triexpr.hs -- how long it takes to match expressions in a Triexpr?
+--
+-- Copyright (c) 2021 Rudy Matela.
+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).
+--
+-- This program has the same parameters as other match*.hs benchmarks.
+import Test
+import Data.Express.Triexpr (Triexpr)
+import qualified Data.Express.Triexpr as T
+
+showEq :: (Expr, Expr) -> String
+showEq (lhs, rhs)  =  showExpr lhs ++ "  =  " ++ showExpr rhs
+
+exprs :: [Expr]
+exprs  =  take 360360 list
+
+query :: Expr -> Maybe (Expr,[(Expr,Expr)],Expr)
+query e  =  listToMaybe $ T.lookup e trie
+
+main :: IO ()
+main  =  do
+  putStrLn $ unlines $ map showEq $ allRules
+  putStrLn $ unlines $ map show $ mapMaybe query $ take 1080 $ exprs
+  print $ (== ']') $ last $ show $ mapMaybe query exprs
+
+trie :: Triexpr Expr
+trie  =  T.fromList allRules
diff --git a/bench/runtime/zero/bench/match-list.runtime b/bench/runtime/zero/bench/match-list.runtime
new file mode 100644
--- /dev/null
+++ b/bench/runtime/zero/bench/match-list.runtime
@@ -0,0 +1,1 @@
+2.36
diff --git a/bench/runtime/zero/bench/match-noop.runtime b/bench/runtime/zero/bench/match-noop.runtime
new file mode 100644
--- /dev/null
+++ b/bench/runtime/zero/bench/match-noop.runtime
@@ -0,0 +1,1 @@
+2.00
diff --git a/bench/runtime/zero/bench/match-triexpr.runtime b/bench/runtime/zero/bench/match-triexpr.runtime
new file mode 100644
--- /dev/null
+++ b/bench/runtime/zero/bench/match-triexpr.runtime
@@ -0,0 +1,1 @@
+2.59
diff --git a/bench/runtime/zero/bench/tiers.runtime b/bench/runtime/zero/bench/tiers.runtime
--- a/bench/runtime/zero/bench/tiers.runtime
+++ b/bench/runtime/zero/bench/tiers.runtime
@@ -1,1 +1,1 @@
-0.20
+0.19
diff --git a/bench/runtime/zero/eg/u-conjure.runtime b/bench/runtime/zero/eg/u-conjure.runtime
--- a/bench/runtime/zero/eg/u-conjure.runtime
+++ b/bench/runtime/zero/eg/u-conjure.runtime
@@ -1,1 +1,1 @@
-0.34
+0.33
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,24 @@
 =====================
 
 
+v0.1.12
+-------
+
+* `Data.Express.Fixtures`, add several symbols:
+	- `hh` and `hhE`;
+	- `four` and `zzs`;
+	- `signum'` and `signumE`;
+	- `compose` and `-.-`;
+	- `mapE` and `map'`.
+
+* Add the experimental `Triexpr` module, including:
+	- the `Triexpr` type;
+	- tests;
+	- benchmarks.
+
+* Retire Travis as the CI
+
+
 v0.1.10
 -------
 
diff --git a/eg/u-extrapolate.hs b/eg/u-extrapolate.hs
--- a/eg/u-extrapolate.hs
+++ b/eg/u-extrapolate.hs
@@ -75,18 +75,14 @@
                        , all (not . prop . evl) (take maxTests $ grounds g) ]
 
 candidateGeneralizations :: Expr -> [Expr]
-candidateGeneralizations  =  map canonicalize
-                          .  concatMap canonicalVariations
-                          .  gen
+candidateGeneralizations  =  concatMap canonicalVariations . gen
   where
-  gen e@(e1 :$ e2)  =
-    [holeAsTypeOf e | isListable e]
-    ++ [g1 :$ g2 | g1 <- gen e1, g2 <- gen e2]
-    ++ map (:$ e2) (gen e1)
-    ++ map (e1 :$) (gen e2)
-  gen e
-    | isVar e    =  []
-    | otherwise  =  [holeAsTypeOf e | isListable e]
+  gen e@(e1 :$ e2)  =  [holeAsTypeOf e | isListable e]
+                    ++ [g1 :$ g2 | g1 <- gen e1, g2 <- gen e2]
+                    ++ map (:$ e2) (gen e1)
+                    ++ map (e1 :$) (gen e2)
+  gen e | isVar e    =  []
+        | otherwise  =  [holeAsTypeOf e | isListable e]
   isListable  =  not . null . tiersFor
 
 grounds :: Expr -> [Expr]
diff --git a/eg/u-speculate.hs b/eg/u-speculate.hs
--- a/eg/u-speculate.hs
+++ b/eg/u-speculate.hs
@@ -114,15 +114,14 @@
   _        ->  []
 
 (-==-) :: Expr -> Expr -> Expr
-ex -==- ey  =  headOr (val False) . map (:$ ey) $ mapMaybe ($$ ex)
-  [ value "==" ((==) :: Int -> Int -> Bool)
-  , value "==" ((==) :: Bool -> Bool -> Bool)
-  , value "==" ((==) :: [Int] -> [Int] -> Bool)
-  , value "==" ((==) :: [Bool] -> [Bool] -> Bool)
-  ]
+ex -==- ey  =  head $
+  [eqn | eq <- eqs, let eqn = eq :$ ex :$ ey, isWellTyped eqn] ++ [val False]
   where
-  headOr x []     =  x
-  headOr _ (x:_)  =  x
+  eqs = [ value "==" ((==) :: Int -> Int -> Bool)
+        , value "==" ((==) :: Bool -> Bool -> Bool)
+        , value "==" ((==) :: [Int] -> [Int] -> Bool)
+        , value "==" ((==) :: [Bool] -> [Bool] -> Bool)
+        ]
 
 lhs, rhs :: Expr -> Expr
 lhs (((Value "==" _) :$ e) :$ _)  =  e
diff --git a/express.cabal b/express.cabal
--- a/express.cabal
+++ b/express.cabal
@@ -1,6 +1,6 @@
 -- Cabal file for express
 name: express
-version: 0.1.10
+version: 0.1.12
 synopsis: Dynamically-typed expressions involving applications and variables.
 description:
   Express is a library for manipulating dynamically typed Haskell expressions.
@@ -26,7 +26,6 @@
                , changelog.md
                , doc/express.svg
 extra-source-files: .gitignore
-                  , .travis.yml
                   , .github/workflows/build.yml
                   , Makefile
                   , mk/depend.mk
@@ -62,7 +61,7 @@
 source-repository this
   type:           git
   location:       https://github.com/rudymatela/express
-  tag:            v0.1.10
+  tag:            v0.1.12
 
 library
   exposed-modules:     Data.Express
@@ -79,6 +78,7 @@
                      , Data.Express.Name.Derive
                      , Data.Express.Canon
                      , Data.Express.Match
+                     , Data.Express.Triexpr
                      , Data.Express.Utils.List
                      , Data.Express.Utils.String
                      , Data.Express.Utils.Typeable
@@ -215,6 +215,14 @@
   build-depends:       base >= 4 && < 5, express, leancheck >= 0.9.4
   default-language:    Haskell2010
 
+test-suite triexpr
+  type:                exitcode-stdio-1.0
+  main-is:             triexpr.hs
+  hs-source-dirs:      test
+  other-modules:       Test, Test.ListableExpr
+  build-depends:       base >= 4 && < 5, express, leancheck >= 0.9.4
+  default-language:    Haskell2010
+
 test-suite utils
   type:                exitcode-stdio-1.0
   main-is:             utils.hs
@@ -250,6 +258,30 @@
 benchmark tiers
   type:                exitcode-stdio-1.0
   main-is:             tiers.hs
+  hs-source-dirs:      bench, test
+  other-modules:       Test, Test.ListableExpr
+  build-depends:       base >= 4 && < 5, express, leancheck >= 0.9.4
+  default-language:    Haskell2010
+
+benchmark match-list
+  type:                exitcode-stdio-1.0
+  main-is:             match-list.hs
+  hs-source-dirs:      bench, test
+  other-modules:       Test, Test.ListableExpr
+  build-depends:       base >= 4 && < 5, express, leancheck >= 0.9.4
+  default-language:    Haskell2010
+
+benchmark match-noop
+  type:                exitcode-stdio-1.0
+  main-is:             match-noop.hs
+  hs-source-dirs:      bench, test
+  other-modules:       Test, Test.ListableExpr
+  build-depends:       base >= 4 && < 5, express, leancheck >= 0.9.4
+  default-language:    Haskell2010
+
+benchmark match-triexpr
+  type:                exitcode-stdio-1.0
+  main-is:             match-triexpr.hs
   hs-source-dirs:      bench, test
   other-modules:       Test, Test.ListableExpr
   build-depends:       base >= 4 && < 5, express, leancheck >= 0.9.4
diff --git a/mk/All.hs b/mk/All.hs
--- a/mk/All.hs
+++ b/mk/All.hs
@@ -6,3 +6,4 @@
 
 import Data.Express
 import Data.Express.Fixtures
+import Data.Express.Triexpr ()
diff --git a/mk/Toplibs.hs b/mk/Toplibs.hs
--- a/mk/Toplibs.hs
+++ b/mk/Toplibs.hs
@@ -2,4 +2,6 @@
 module Toplibs () where
 
 import Data.Express ()
+import Data.Express.Fixtures ()
+import Data.Express.Triexpr ()
 import Test ()
diff --git a/mk/depend.mk b/mk/depend.mk
--- a/mk/depend.mk
+++ b/mk/depend.mk
@@ -25,6 +25,88 @@
   test/Test/ListableExpr.hs \
   bench/compare.hs \
   mk/toplibs
+bench/match-list.o: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  src/Data/Express/Utils/Typeable.hs \
+  src/Data/Express/Utils/TH.hs \
+  src/Data/Express/Utils/String.hs \
+  src/Data/Express/Utils/List.hs \
+  src/Data/Express.hs \
+  src/Data/Express/Name.hs \
+  src/Data/Express/Name/Derive.hs \
+  src/Data/Express/Match.hs \
+  src/Data/Express/Map.hs \
+  src/Data/Express/Instances.hs \
+  src/Data/Express/Hole.hs \
+  src/Data/Express/Fold.hs \
+  src/Data/Express/Fixtures.hs \
+  src/Data/Express/Express.hs \
+  src/Data/Express/Express/Derive.hs \
+  src/Data/Express/Core.hs \
+  src/Data/Express/Canon.hs \
+  src/Data/Express/Basic.hs \
+  bench/match-list.hs
+bench/match-list: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  bench/match-list.hs \
+  mk/toplibs
+bench/match-noop.o: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  src/Data/Express/Utils/Typeable.hs \
+  src/Data/Express/Utils/TH.hs \
+  src/Data/Express/Utils/String.hs \
+  src/Data/Express/Utils/List.hs \
+  src/Data/Express.hs \
+  src/Data/Express/Name.hs \
+  src/Data/Express/Name/Derive.hs \
+  src/Data/Express/Match.hs \
+  src/Data/Express/Map.hs \
+  src/Data/Express/Instances.hs \
+  src/Data/Express/Hole.hs \
+  src/Data/Express/Fold.hs \
+  src/Data/Express/Fixtures.hs \
+  src/Data/Express/Express.hs \
+  src/Data/Express/Express/Derive.hs \
+  src/Data/Express/Core.hs \
+  src/Data/Express/Canon.hs \
+  src/Data/Express/Basic.hs \
+  bench/match-noop.hs
+bench/match-noop: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  bench/match-noop.hs \
+  mk/toplibs
+bench/match-triexpr.o: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  src/Data/Express/Utils/Typeable.hs \
+  src/Data/Express/Utils/TH.hs \
+  src/Data/Express/Utils/String.hs \
+  src/Data/Express/Utils/List.hs \
+  src/Data/Express/Triexpr.hs \
+  src/Data/Express.hs \
+  src/Data/Express/Name.hs \
+  src/Data/Express/Name/Derive.hs \
+  src/Data/Express/Match.hs \
+  src/Data/Express/Map.hs \
+  src/Data/Express/Instances.hs \
+  src/Data/Express/Hole.hs \
+  src/Data/Express/Fold.hs \
+  src/Data/Express/Fixtures.hs \
+  src/Data/Express/Express.hs \
+  src/Data/Express/Express/Derive.hs \
+  src/Data/Express/Core.hs \
+  src/Data/Express/Canon.hs \
+  src/Data/Express/Basic.hs \
+  bench/match-triexpr.hs
+bench/match-triexpr: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  bench/match-triexpr.hs \
+  mk/toplibs
 bench/pairs.o: \
   test/Test.hs \
   test/Test/ListableExpr.hs \
@@ -177,6 +259,7 @@
   src/Data/Express/Utils/TH.hs \
   src/Data/Express/Utils/String.hs \
   src/Data/Express/Utils/List.hs \
+  src/Data/Express/Triexpr.hs \
   src/Data/Express.hs \
   src/Data/Express/Name.hs \
   src/Data/Express/Name/Derive.hs \
@@ -199,6 +282,7 @@
   src/Data/Express/Utils/TH.hs \
   src/Data/Express/Utils/String.hs \
   src/Data/Express/Utils/List.hs \
+  src/Data/Express/Triexpr.hs \
   src/Data/Express.hs \
   src/Data/Express/Name.hs \
   src/Data/Express/Name/Derive.hs \
@@ -344,6 +428,25 @@
   src/Data/Express/Core.hs \
   src/Data/Express/Canon.hs \
   src/Data/Express/Basic.hs
+src/Data/Express/Triexpr.o: \
+  src/Data/Express/Utils/Typeable.hs \
+  src/Data/Express/Utils/TH.hs \
+  src/Data/Express/Utils/String.hs \
+  src/Data/Express/Utils/List.hs \
+  src/Data/Express/Triexpr.hs \
+  src/Data/Express.hs \
+  src/Data/Express/Name.hs \
+  src/Data/Express/Name/Derive.hs \
+  src/Data/Express/Match.hs \
+  src/Data/Express/Map.hs \
+  src/Data/Express/Instances.hs \
+  src/Data/Express/Hole.hs \
+  src/Data/Express/Fold.hs \
+  src/Data/Express/Express.hs \
+  src/Data/Express/Express/Derive.hs \
+  src/Data/Express/Core.hs \
+  src/Data/Express/Canon.hs \
+  src/Data/Express/Basic.hs
 src/Data/Express/Utils/List.o: \
   src/Data/Express/Utils/List.hs
 src/Data/Express/Utils/String.o: \
@@ -827,6 +930,34 @@
   src/Data/Express/Canon.hs \
   src/Data/Express/Basic.hs
 test/Test: \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  mk/toplibs
+test/triexpr.o: \
+  test/triexpr.hs \
+  test/Test.hs \
+  test/Test/ListableExpr.hs \
+  src/Data/Express/Utils/Typeable.hs \
+  src/Data/Express/Utils/TH.hs \
+  src/Data/Express/Utils/String.hs \
+  src/Data/Express/Utils/List.hs \
+  src/Data/Express/Triexpr.hs \
+  src/Data/Express.hs \
+  src/Data/Express/Name.hs \
+  src/Data/Express/Name/Derive.hs \
+  src/Data/Express/Match.hs \
+  src/Data/Express/Map.hs \
+  src/Data/Express/Instances.hs \
+  src/Data/Express/Hole.hs \
+  src/Data/Express/Fold.hs \
+  src/Data/Express/Fixtures.hs \
+  src/Data/Express/Express.hs \
+  src/Data/Express/Express/Derive.hs \
+  src/Data/Express/Core.hs \
+  src/Data/Express/Canon.hs \
+  src/Data/Express/Basic.hs
+test/triexpr: \
+  test/triexpr.hs \
   test/Test.hs \
   test/Test/ListableExpr.hs \
   mk/toplibs
diff --git a/src/Data/Express/Fixtures.hs b/src/Data/Express/Fixtures.hs
--- a/src/Data/Express/Fixtures.hs
+++ b/src/Data/Express/Fixtures.hs
@@ -116,19 +116,20 @@
   , i_, xx, yy, zz, xx'
   , ii, jj, kk, ii'
   , ll, mm, nn
-  , zero, one, two, three, minusOne, minusTwo
-  , idE, negateE, absE
+  , zero, one, two, three, four, minusOne, minusTwo
+  , idE, negateE, absE, signumE
   , idInt
   , idBool
   , idChar
   , idInts
   , idBools
   , idString
-  , id', const', negate', abs'
+  , id', const', negate', abs', signum'
   , plus, times
   , (-+-), (-*-)
   , ff, ffE
   , gg, ggE
+  , hh, hhE
   , (-?-)
   , (-$-)
   , odd'
@@ -146,6 +147,7 @@
   , is_
   , xxs
   , yys
+  , zzs
   , nil
   , emptyString
   , nilInt
@@ -186,6 +188,12 @@
   , quadruple
   , quintuple
   , sixtuple
+
+  -- ** Higher order
+  , compose
+  , mapE
+  , (-.-)
+  , map'
   )
 where
 
@@ -442,6 +450,13 @@
 three :: Expr
 three  =  val (3 :: Int)
 
+-- | The value @4@ bound to the 'Int' type encoded as an 'Expr'.
+--
+-- > > four
+-- > 4 :: Int
+four :: Expr
+four  =  val (4 :: Int)
+
 -- | The value @-1@ bound to the 'Int' type encoded as an 'Expr'.
 --
 -- > > minusOne
@@ -483,6 +498,27 @@
 gg :: Expr -> Expr
 gg = (ggE :$)
 
+-- | A variable @g@ of 'Int -> Int' type encoded as an 'Expr'.
+--
+-- > > ggE
+-- > g :: Int -> Int
+ggE :: Expr
+ggE = var "g" (undefined :: Int -> Int)
+
+-- | A variable function @h@ of 'Int -> Int' type lifted over the 'Expr' type.
+--
+-- > > hh zz
+-- > h z :: Int
+hh :: Expr -> Expr
+hh = (hhE :$)
+
+-- | A variable @h@ of 'Int -> Int' type encoded as an 'Expr'.
+--
+-- > > hhE
+-- > h :: Int -> Int
+hhE :: Expr
+hhE = var "h" (undefined :: Int -> Int)
+
 -- | A variable binary operator @?@ lifted over the 'Expr' type.
 --   Works for 'Int', 'Bool', 'Char', @[Int]@ and 'String'.
 --
@@ -506,13 +542,6 @@
   err  =  error $ "(-?-): cannot apply `(?) :: * -> * -> *` to `"
                ++ show ex ++ "' and `" ++ show ey ++ "'.  Unhandled types?"
 
--- | A variable @g@ of 'Int -> Int' type encoded as an 'Expr'.
---
--- > > ggE
--- > g :: Int -> Int
-ggE :: Expr
-ggE = var "g" (undefined :: Int -> Int)
-
 -- | The operator '+' for the 'Int' type for use on 'Expr's.  (See also 'plus'.)
 --
 -- > > two -+- three
@@ -671,6 +700,23 @@
 absE :: Expr
 absE  =  value "abs" (abs :: Int -> Int)
 
+-- | 'signum' over the 'Int' type lifted over the 'Expr' type.
+--
+-- > > signum' xx'
+-- > signum x' :: Int
+--
+-- > > evl (signum' minusTwo) :: Int
+-- > -1
+signum' :: Expr -> Expr
+signum' e  =  signumE :$ e
+
+-- | 'signum' over the 'Int' type encoded as an 'Expr'.
+--
+-- > > signumE
+-- > signum :: Int -> Int
+signumE :: Expr
+signumE  =  value "signum" (signum :: Int -> Int)
+
 odd' :: Expr -> Expr
 odd' = (oddE :$) where oddE = value "odd" (odd :: Int -> Bool)
 
@@ -760,6 +806,13 @@
 yys :: Expr
 yys  =  var "ys" [int]
 
+-- | A variable named @zs@ of type @[Int]@ encoded as an 'Expr'.
+--
+-- > > yys
+-- > ys :: [Int]
+zzs :: Expr
+zzs  =  var "zs" [int]
+
 -- | An empty list of type @[Int]@ encoded as an 'Expr'.
 --
 -- > > nil
@@ -1217,3 +1270,37 @@
 headOr :: a -> [a] -> a
 headOr x []     =  x
 headOr _ (x:_)  =  x
+
+compose :: Expr
+compose  =  value "." ((.) :: Compose Int)
+
+(-.-) :: Expr -> Expr -> Expr
+ex -.- ey  =  (:$ ey) . headOr err $ mapMaybe ($$ ex)
+  [ value "." ((.) :: Compose ())
+  , value "." ((.) :: Compose Int)
+  , value "." ((.) :: Compose Bool)
+  , value "." ((.) :: Compose Char)
+  , value "." ((.) :: Compose [Int])
+  , value "." ((.) :: Compose [Bool])
+  , value "." ((.) :: Compose [Char])
+  ]
+  where
+  err  =  error $ "(-.-): unhandled type " ++ show (typ ex)
+type Compose a = (a -> a) -> (a -> a) -> (a -> a)
+
+mapE :: Expr
+mapE  =  value "map" (map :: Map Int)
+
+map' :: Expr -> Expr -> Expr
+map' ef exs  =  (:$ exs) . headOr err $ mapMaybe ($$ ef)
+  [ value "map" (map :: Map ())
+  , value "map" (map :: Map Int)
+  , value "map" (map :: Map Bool)
+  , value "map" (map :: Map Char)
+  , value "map" (map :: Map [Int])
+  , value "map" (map :: Map [Bool])
+  , value "map" (map :: Map [Char])
+  ]
+  where
+  err  =  error $ "map': unhandled type " ++ show (typ ef)
+type Map a = (a -> a) -> [a] -> [a]
diff --git a/src/Data/Express/Triexpr.hs b/src/Data/Express/Triexpr.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Express/Triexpr.hs
@@ -0,0 +1,101 @@
+-- |
+-- Module      : Data.Express.Triexpr
+-- Copyright   : (c) 2019-2021 Rudy Matela
+-- License     : 3-Clause BSD  (see the file LICENSE)
+-- Maintainer  : Rudy Matela <rudy@matela.com.br>
+--
+-- This module is part of Express.
+--
+-- An __experimental__ data structure for matching 'Expr's.
+--
+-- __Warning (1):__
+-- Take care when importing this module,
+-- the interface is experimental
+-- and may change at every minor version.
+--
+-- __Warning (2):__
+-- YMMV:
+-- Do not expect this to be faster than manually matching in a list,
+-- provisional experiments show that it can be slower depending
+-- on the set of expressions being matched.
+--
+-- This module should be imported qualified
+-- as it exports definitions called
+-- 'map', 'lookup', 'toList', 'fromList', 'insert' and 'empty':
+--
+-- > import Data.Express.Triexpr (Triexpr)
+-- > import qualified Data.Express.Triexpr as T
+module Data.Express.Triexpr
+  ( Triexpr (..)
+  , empty
+  , unit
+  , merge
+  , insert
+  , toList
+  , fromList
+  , map
+  , lookup
+  )
+where
+
+import Data.Express
+import Data.Maybe
+import Prelude hiding (map, lookup)
+
+-- "Nothing" should match an App, "Just Expr" an expression
+data Triexpr a = Triexpr [(Maybe Expr, Either (Triexpr a) (Expr,a))]
+  deriving (Eq, Ord, Show)
+
+empty :: Triexpr a
+empty  =  Triexpr []
+
+unit :: Expr -> a -> Triexpr a
+unit e x  =  u e (Right (e,x))
+  where
+  u :: Expr -> (Either (Triexpr a) (Expr,a)) -> Triexpr a
+  u (e1 :$ e2) et  =  Triexpr [(Nothing, Left $ u e1 $ Left $ u e2 et)]
+  u e          et  =  Triexpr [(Just e,  et)]
+
+merge :: Triexpr a -> Triexpr a -> Triexpr a
+merge (Triexpr ms1) (Triexpr ms2)  =  Triexpr $ m ms1 ms2
+  where
+  m [] ms  =  ms
+  m ms []  =  ms
+  m ((e1,mt1):ms1) ((e2,mt2):ms2)  =  case compare e1 e2 of
+    LT -> (e1,mt1) : m ms1 ((e2,mt2):ms2)
+    GT -> (e2,mt2) : m ((e1,mt1):ms1) ms2
+    EQ -> case (mt1,mt2) of
+          (Left t1, Left t2) -> (e1, Left $ t1 `merge` t2) : m ms1 ms2
+          (_,_) -> (e1,mt1) : (e2,mt2) : m ms1 ms2
+
+insert :: Expr -> a -> Triexpr a -> Triexpr a
+insert e x t  =  unit e x `merge` t
+
+toList :: Triexpr a -> [(Expr, a)]
+toList (Triexpr ms)  =  concatMap to ms
+  where
+  to (_, Right ex)  =  [ex]
+  to (_, Left t)  =  toList t
+
+fromList :: [(Expr, a)] -> Triexpr a
+fromList  =  foldr (uncurry insert) empty
+
+map :: (a -> b) -> Triexpr a -> Triexpr b
+map f (Triexpr ms)  =  Triexpr [(ex, mapEither (map f) (mapSnd f) eth) | (ex, eth) <- ms]
+  where
+  mapEither :: (a -> c) -> (b -> d) -> Either a b -> Either c d
+  mapEither f g (Left x)   =  Left (f x)
+  mapEither f g (Right y)  =  Right (g y)
+  mapSnd :: (a -> b) -> (c,a) -> (c,b)
+  mapSnd f (x,y)  =  (x, f y)
+
+lookup :: Expr -> Triexpr a -> [ (Expr, [(Expr,Expr)], a) ]
+lookup e t  =  [(e, bs, x) | (bs, Right (e,x)) <- look (Just e) t []]
+  where
+  look :: Maybe Expr -> Triexpr a -> [(Expr, Expr)] -> [([(Expr,Expr)], Either (Triexpr a) (Expr,a))]
+  look Nothing  t@(Triexpr ms) bs  =  [(bs, mt) | (Nothing, mt) <- ms]
+  look (Just e) t@(Triexpr ms) bs  =  [(bs', mt) | (Just e', mt) <- ms, bs' <- maybeToList (matchWith bs e e')]
+                                   ++ [r | e1 :$ e2 <- [e]
+                                         , (bs1, Left t1) <- look Nothing t bs
+                                         , (bs2, Left t2) <- look (Just e1) t1 bs1
+                                         , r              <- look (Just e2) t2 bs2]
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -25,6 +25,11 @@
   , tyChar
   , tyInts
   , tyIntToInt
+
+  , allRules
+  , boolRules
+  , intRules
+  , listRules
   )
 where
 
@@ -77,3 +82,139 @@
 
 tyIntToInt :: TypeRep
 tyIntToInt  =  typeOf (undefined :: Int -> Int)
+
+
+-- |
+-- To be used when testing or benchmarking 'Triexpr'
+allRules :: [(Expr,Expr)]
+allRules  =  boolRules ++ intRules ++ listRules ++ boolintRules ++ funRules
+
+boolRules :: [(Expr,Expr)]
+boolRules  =
+  [               id' pp  -=-  pp
+  , pp -&&- pp            -=-  pp
+  , pp -||- pp            -=-  pp
+  , pp -&&- qq            -=-  qq -&&- pp
+  , pp -||- qq            -=-  qq -||- pp
+  , not' (not' pp)        -=-  pp
+  , pp -&&- true          -=-  pp
+  , true -&&- pp          -=-  pp
+  , pp -&&- false         -=-  false
+  , false -&&- pp         -=-  false
+  , pp -||- true          -=-  true
+  , true -||- pp          -=-  true
+  , pp -||- false         -=-  pp
+  , false -||- pp         -=-  pp
+  , pp -&&- not' pp       -=-  false
+  , pp -||- not' pp       -=-  true
+  , not' pp -&&- pp       -=-  false
+  , not' pp -||- pp       -=-  true
+  , (pp -&&- qq) -&&- rr  -=-  pp -&&- (qq -&&- rr)
+  , (pp -||- qq) -||- rr  -=-  pp -||- (qq -||- rr)
+  , not' (pp -&&- qq)     -=-  not' pp -||- not' qq
+  , not' (pp -||- qq)     -=-  not' pp -&&- not' qq
+  , not' false            -=-  true
+  , not' true             -=-  false
+  , not' (not' pp -&&- not' qq) -=- (pp -||- qq)
+  , not' (not' pp -||- not' qq) -=- (pp -&&- qq)
+  ,   pp -&&- not' (pp -&&- qq) -=- pp -&&- not' qq
+--, pp -=- pp
+  ]
+
+intRules :: [(Expr,Expr)]
+intRules  =
+  [               id' xx  -=-  xx
+  , abs' (abs' xx)        -=-  abs' xx
+  , xx -+- zero           -=-  xx
+  , zero -+- xx           -=-  xx
+  , xx -*- one            -=-  xx
+  , one -*- xx            -=-  xx
+  , xx -*- zero           -=-  zero
+  , zero -*- xx           -=-  zero
+  , xx -+- yy             -=-  yy -+- xx
+  , xx -*- yy             -=-  yy -*- xx
+  , (xx -+- yy) -+- zz    -=-  xx -+- (yy -+- zz)
+  , (xx -*- yy) -*- zz    -=-  xx -*- (yy -*- zz)
+  , (xx -+- xx) -*- yy    -=-  xx -*- (yy -+- yy)
+  , xx -*- (yy -+- one)   -=-  xx -+- xx -*- yy
+  , (xx -+- one) -*- yy   -=-  xx -+- xx -*- yy
+  , xx -*- (yy -+- zz)    -=-  xx -*- yy -+- xx -*- zz
+  , (xx -+- yy) -*- zz    -=-  xx -*- zz -+- yy -*- zz
+  , negate' (negate' xx)  -=-  xx
+  , xx -+- negate' xx     -=-  zero
+  , negate' xx -+- xx     -=-  zero
+  ,          abs' (negate' xx)  -=-  abs' xx
+  ,                 two -*- xx  -=-  xx -+- xx
+  ,                 xx -*- two  -=-  xx -+- xx
+  ,               three -*- xx  -=-  xx -+- (xx -+- xx)
+  ,               xx -*- three  -=-  xx -+- (xx -+- xx)
+  ,                four -*- xx  -=-  xx -+- (xx -+- (xx -+- xx))
+  ,                xx -*- four  -=-  xx -+- (xx -+- (xx -+- xx))
+  ,           abs' (xx -*- xx)  -=-  xx -*- xx
+  ,        abs' xx -*- abs' yy  -=-  abs' (xx -*- yy)
+  ,        abs' xx -*- abs' xx  -=-  abs' (xx -+- xx)
+  , abs' (abs' xx -+- abs' yy)  -=-  abs' xx -+- abs' yy
+  ,    abs' (xx -+- xx) -*- yy  -=-  abs' xx -*- yy -+- abs' xx -*- yy
+  ,     abs' xx -*- signum' xx  -=-  xx
+  ,     signum' xx -*- abs' xx  -=-  xx
+--, xx -=- xx
+  ]
+
+listRules :: [(Expr,Expr)]
+listRules  =
+  [                 id' xxs  -=-  xxs
+  , head' (xx -:- xxs)       -=-  xx
+  , tail' (xx -:- xxs)       -=-  xxs
+  , xxs -++- nil             -=-  xxs
+  , nil -++- xxs             -=-  xxs
+  , unit xx -++- xxs         -=-  xx -:- xxs
+  , (xx -:- xxs) -++- yys    -=-  xx -:- (xxs -++- yys)
+  , (xxs -++- yys) -++- zzs  -=-  xxs -++- (yys -++- zzs)
+
+  -- insertsort stuff
+  ,        elem' xx (sort' xxs)  -=-  elem' xx xxs
+  ,   elem' xx (insert' yy xxs)  -=-  elem' xx (yy -:- xxs)
+  ,           sort' (sort' xxs)  -=-  sort' xxs
+  ,              insert' xx nil  -=-  unit xx
+  ,        sort' (xxs -++- yys)  -=-  sort' (yys -++- xxs)
+  ,      sort' (insert' xx xxs)  -=-  insert' xx (sort' xxs)
+  ,          sort' (xx -:- xxs)  -=-  insert' xx (sort' xxs)
+  ,  sort' (xxs -++- sort' yys)  -=-  sort' (xxs -++- yys)
+  ,  sort' (sort' xxs -++- yys)  -=-  sort' (xxs -++- yys)
+  , insert' xx (insert' yy xxs)  -=-  insert' yy (insert' xx xxs)
+  ,     insert' xx (xx -:- xxs)  -=-  xx -:- xx -:- xxs
+  ,        insert' xx (unit yy)  -=-  insert' yy (unit xx)
+
+  -- length stuff
+  ,              length' (xx -:- xxs)  -=-  length' (yy -:- xxs)
+  ,            length' (xxs -++- yys)  -=-  length' (yys -++- xxs)
+  ,       length' (xx -:- yy -:- xxs)  -=-  length' (zz -:- xx' -:- xxs)
+  ,   length' (xx -:- (xxs -++- yys))  -=-  length' (yy -:- (yys -++- xxs))
+  , length' (xxs -++- (yys -++- zzs))  -=-  length' (xxs -++- (zzs -++- yys))
+
+  ]
+
+boolintRules :: [(Expr,Expr)]
+boolintRules  =
+  [ not' (odd' xx) -=- even' xx
+  , not' (even' xx) -=- odd' xx
+  , (xx -==- xx) -=- true
+  , (xx -/=- xx) -=- false
+  , (pp -==- pp) -=- true
+  , (pp -/=- pp) -=- false
+  ]
+
+funRules :: [(Expr,Expr)]
+funRules  =
+  [ ff (gg xx)  -=-  (ffE -.- ggE) :$ xx
+  , map' idE xxs  -=-  xxs
+  , map' (ffE -.- ggE) xxs  -=-  map' ffE (map' ggE xxs)
+  , ffE -.- idE  -=-  ffE
+  , idE -.- ffE  -=-  ffE
+  , (ffE -.- ggE) -.- hhE  -=-  ffE -.- (ggE -.- hhE)
+  , notE -.- notE  -=-  idBool
+  ]
+
+(-=-) :: Expr -> Expr -> (Expr,Expr)
+e1 -=- e2 = (e1, e2)
+infix 0 -=-
diff --git a/test/model/bench/match-list.out b/test/model/bench/match-list.out
new file mode 100644
--- /dev/null
+++ b/test/model/bench/match-list.out
@@ -0,0 +1,795 @@
+id p  =  p
+p && p  =  p
+p || p  =  p
+p && q  =  q && p
+p || q  =  q || p
+not (not p)  =  p
+p && True  =  p
+True && p  =  p
+p && False  =  False
+False && p  =  False
+p || True  =  True
+True || p  =  True
+p || False  =  p
+False || p  =  p
+p && not p  =  False
+p || not p  =  True
+not p && p  =  False
+not p || p  =  True
+(p && q) && r  =  p && (q && r)
+(p || q) || r  =  p || (q || r)
+not (p && q)  =  not p || not q
+not (p || q)  =  not p && not q
+not False  =  True
+not True  =  False
+not (not p && not q)  =  p || q
+not (not p || not q)  =  p && q
+p && not (p && q)  =  p && not q
+id x  =  x
+abs (abs x)  =  abs x
+x + 0  =  x
+0 + x  =  x
+x * 1  =  x
+1 * x  =  x
+x * 0  =  0
+0 * x  =  0
+x + y  =  y + x
+x * y  =  y * x
+(x + y) + z  =  x + (y + z)
+(x * y) * z  =  x * (y * z)
+(x + x) * y  =  x * (y + y)
+x * (y + 1)  =  x + x * y
+(x + 1) * y  =  x + x * y
+x * (y + z)  =  x * y + x * z
+(x + y) * z  =  x * z + y * z
+negate (negate x)  =  x
+x + negate x  =  0
+negate x + x  =  0
+abs (negate x)  =  abs x
+2 * x  =  x + x
+x * 2  =  x + x
+3 * x  =  x + (x + x)
+x * 3  =  x + (x + x)
+4 * x  =  x + (x + (x + x))
+x * 4  =  x + (x + (x + x))
+abs (x * x)  =  x * x
+abs x * abs y  =  abs (x * y)
+abs x * abs x  =  abs (x + x)
+abs (abs x + abs y)  =  abs x + abs y
+abs (x + x) * y  =  abs x * y + abs x * y
+abs x * signum x  =  x
+signum x * abs x  =  x
+id xs  =  xs
+head (x:xs)  =  x
+tail (x:xs)  =  xs
+xs ++ []  =  xs
+[] ++ xs  =  xs
+[x] ++ xs  =  x:xs
+(x:xs) ++ ys  =  x:(xs ++ ys)
+(xs ++ ys) ++ zs  =  xs ++ (ys ++ zs)
+elem x (sort xs)  =  elem x xs
+elem x (insert y xs)  =  elem x (y:xs)
+sort (sort xs)  =  sort xs
+insert x []  =  [x]
+sort (xs ++ ys)  =  sort (ys ++ xs)
+sort (insert x xs)  =  insert x (sort xs)
+sort (x:xs)  =  insert x (sort xs)
+sort (xs ++ sort ys)  =  sort (xs ++ ys)
+sort (sort xs ++ ys)  =  sort (xs ++ ys)
+insert x (insert y xs)  =  insert y (insert x xs)
+insert x (x:xs)  =  x:x:xs
+insert x [y]  =  insert y [x]
+length (x:xs)  =  length (y:xs)
+length (xs ++ ys)  =  length (ys ++ xs)
+length (x:y:xs)  =  length (z:x':xs)
+length (x:(xs ++ ys))  =  length (y:(ys ++ xs))
+length (xs ++ (ys ++ zs))  =  length (xs ++ (zs ++ ys))
+not (odd x)  =  even x
+not (even x)  =  odd x
+x == x  =  True
+x /= x  =  False
+p == p  =  True
+p /= p  =  False
+f (g x)  =  (f . g) x
+map id xs  =  xs
+map (f . g) xs  =  map f (map g xs)
+f . id  =  f
+id . f  =  f
+(f . g) . h  =  f . (g . h)
+not . not  =  id
+
+(id x :: Int,[(x :: Int,_ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id _ :: Int)],x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(id x :: Int,[(x :: Int,y :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,1 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord _ :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(not False :: Bool,[],True :: Bool)
+(not True :: Bool,[],False :: Bool)
+(not (not p) :: Bool,[(p :: Bool,_ :: Bool)],p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(id x :: Int,[(x :: Int,z :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,-1 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id y :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id 1 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (ord _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + id _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id _ + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ * _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,f _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head xs :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head [] :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord c :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord 'a' :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,y :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord _ :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,x :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,0 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id _ :: Int)],y * x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(not (not p) :: Bool,[(p :: Bool,p :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,False :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,True :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not _ :: Bool)],p :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(x == x :: Bool,[(x :: Int,_ :: Int)],True :: Bool)
+(p == p :: Bool,[(p :: Bool,_ :: Bool)],True :: Bool)
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],_ :: [Int])],xs :: [Int])
+([] ++ xs :: [Int],[(xs :: [Int],_ :: [Int])],xs :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+(id x :: Int,[(x :: Int,x' :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,2 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id z :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (-1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id y) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id 1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (id _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (negate _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (abs _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (_ + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (head _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (ord _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (x + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (0 + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ * _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (f _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head xs) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head []) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (_:_)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (ord c) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (ord 'a') :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate y :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate 1 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (negate _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (abs _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (_ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (head _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (ord _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs y :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs 1 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (negate _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (abs _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (_ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (head _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (ord _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + y :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + 1 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + id x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + id 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + id (id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + negate _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + abs _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + (_ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + head _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ + ord _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x + x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x + 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x + id _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 + x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 + 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 + id _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id _ + x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id _ + 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id _ + id _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ * x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ * 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,_ * id _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,f x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,f 0 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,f (id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,y + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,1 + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id x + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id 0 + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _) + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate _ + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs _ + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,(_ + _) + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head _ + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord _ + _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x * _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 * _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id _ * _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,g _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head ys :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head [0] :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_:xs) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head [_] :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_:_:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (x:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (0:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (id _:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (tail _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_ ++ _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord d :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord ' ' :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,z :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,-1 :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head xs :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,head [] :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,head (_:_) :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord c :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord 'a' :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,y :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,1 :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,head _ :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,y :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,y :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(y +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,1 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(1 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id x :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id x +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id 0 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id 0 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id (id _) :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id (id _) +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,negate _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,negate _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(negate _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,abs _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,abs _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(abs _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,_ + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,_ + _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,((_ + _) +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,head _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,head _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(head _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,ord _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,ord _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(ord _ +) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,x :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,x :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x *) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,0 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,0 :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 *) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,id _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,id _ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,g :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,z :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,-1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id y :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id 1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id x) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id 0) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id (id _)) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (negate _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (abs _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (_ + _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (head _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (ord _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,x + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,0 + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id _ + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ * _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,f _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head xs :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head [] :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head (_:_) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord c :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord 'a' :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,y :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,1 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id x :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id 0 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id _) :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,head _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord _ :: Int)],y * x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],ys :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[0] :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:xs :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[_] :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],x:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],0:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],id _:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],tail _ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ ++ _ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,y :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,1 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id 0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id (id _) :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,negate _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,abs _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,_ + _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,head _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,ord _ :: Int)],x :: Int)
+(not (not p) :: Bool,[(p :: Bool,q :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not p :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not False :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not True :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not (not _) :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,_ || _ :: Bool)],p :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,p :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,False :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,True :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not _ :: Bool)],not p && not q :: Bool)
+(not (p && q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ :: Bool)],not p || not q :: Bool)
+(not (odd x) :: Bool,[(x :: Int,_ :: Int)],even x :: Bool)
+(not (even x) :: Bool,[(x :: Int,_ :: Int)],odd x :: Bool)
+(p || q :: Bool,[(q :: Bool,q :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not p :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not False :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not True :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not (not _) :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ || _ :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p && q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,q :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not (not _) :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ || _ :: Bool)],q || p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,p :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,False :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,True :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not _ :: Bool)],q && p :: Bool)
+(tail (x:xs) :: [Int],[(xs :: [Int],xs :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],[] :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_:_ :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,x :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,0 :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,id _ :: Int)],xs :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],xs :: [Int])],xs :: [Int])
+([] ++ xs :: [Int],[(xs :: [Int],xs :: [Int])],xs :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],[] :: [Int])],xs :: [Int])
+([] ++ xs :: [Int],[(xs :: [Int],_:_ :: [Int])],xs :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],xs :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],_:_ :: [Int])],xs :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_:_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],xs :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],[] :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_:_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,x :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,0 :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,id _ :: Int)],x:(xs ++ ys) :: [Int])
+((xs ++ ys) ++ zs :: [Int],[(zs :: [Int],_ :: [Int]),(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int])],xs ++ (ys ++ zs) :: [Int])
+(sort (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],insert x (sort xs) :: [Int])
+(insert x [] :: [Int],[(x :: Int,_ :: Int)],[x] :: [Int])
+(insert x (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:x:xs :: [Int])
+(id x :: Int,[(x :: Int,y' :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,-2 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id x' :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id 2 :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id z) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (-1)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id y)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id 1)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (id x))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (id 0))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (id (id _)))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (negate _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (abs _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (_ + _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (head _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id (ord _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (negate x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (negate 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (negate (id _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (abs x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (abs 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (abs (id _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (_ + x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (_ + 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (_ + id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (x + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (0 + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id _ + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (_ * _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (f _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (head xs)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (head [])) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (head (_:_))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (ord c)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (ord 'a')) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate y) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate 1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (id x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (id 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (id (id _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (negate _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (abs _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (_ + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (head _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate (ord _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs y) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs 1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (id x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (id 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (id (id _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (negate _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (abs _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (_ + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (head _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs (ord _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + y) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + 1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + id x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + id 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + id (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + negate _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + abs _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + (_ + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + head _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ + ord _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (x + x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (x + 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (x + id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (0 + x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (0 + 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (0 + id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _ + x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _ + 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _ + id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ * x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ * 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (_ * id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (f x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (f 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (f (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (y + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (1 + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id x + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id 0 + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id (id _) + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (negate _ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (abs _ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id ((_ + _) + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head _ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (ord _ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (x * _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (0 * _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (id _ * _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (g _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head ys) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head [0]) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (_:xs)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head [_]) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (_:_:_)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (x:_)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (0:_)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (id _:_)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (tail _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (head (_ ++ _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (ord d) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,id (ord ' ') :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate z :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (-1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id y) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id 1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (id x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (id 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (id (id _))) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (negate _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (abs _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (_ + _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (head _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id (ord _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (negate x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (negate 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (negate (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (abs x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (abs 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (abs (id _)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (_ + x) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (_ + 0) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (_ + id _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (x + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (0 + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (id _ + _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (_ * _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (f _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (head xs) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (head []) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (head (_:_)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (ord c) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,negate (ord 'a') :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs z :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (-1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id y) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id 1) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id (id x)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id (id 0)) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,abs (id (id (id _))) :: Int)],x :: Int)
+
+True
diff --git a/test/model/bench/match-noop.out b/test/model/bench/match-noop.out
new file mode 100644
--- /dev/null
+++ b/test/model/bench/match-noop.out
@@ -0,0 +1,1182 @@
+id p  =  p
+p && p  =  p
+p || p  =  p
+p && q  =  q && p
+p || q  =  q || p
+not (not p)  =  p
+p && True  =  p
+True && p  =  p
+p && False  =  False
+False && p  =  False
+p || True  =  True
+True || p  =  True
+p || False  =  p
+False || p  =  p
+p && not p  =  False
+p || not p  =  True
+not p && p  =  False
+not p || p  =  True
+(p && q) && r  =  p && (q && r)
+(p || q) || r  =  p || (q || r)
+not (p && q)  =  not p || not q
+not (p || q)  =  not p && not q
+not False  =  True
+not True  =  False
+not (not p && not q)  =  p || q
+not (not p || not q)  =  p && q
+p && not (p && q)  =  p && not q
+id x  =  x
+abs (abs x)  =  abs x
+x + 0  =  x
+0 + x  =  x
+x * 1  =  x
+1 * x  =  x
+x * 0  =  0
+0 * x  =  0
+x + y  =  y + x
+x * y  =  y * x
+(x + y) + z  =  x + (y + z)
+(x * y) * z  =  x * (y * z)
+(x + x) * y  =  x * (y + y)
+x * (y + 1)  =  x + x * y
+(x + 1) * y  =  x + x * y
+x * (y + z)  =  x * y + x * z
+(x + y) * z  =  x * z + y * z
+negate (negate x)  =  x
+x + negate x  =  0
+negate x + x  =  0
+abs (negate x)  =  abs x
+2 * x  =  x + x
+x * 2  =  x + x
+3 * x  =  x + (x + x)
+x * 3  =  x + (x + x)
+4 * x  =  x + (x + (x + x))
+x * 4  =  x + (x + (x + x))
+abs (x * x)  =  x * x
+abs x * abs y  =  abs (x * y)
+abs x * abs x  =  abs (x + x)
+abs (abs x + abs y)  =  abs x + abs y
+abs (x + x) * y  =  abs x * y + abs x * y
+abs x * signum x  =  x
+signum x * abs x  =  x
+id xs  =  xs
+head (x:xs)  =  x
+tail (x:xs)  =  xs
+xs ++ []  =  xs
+[] ++ xs  =  xs
+[x] ++ xs  =  x:xs
+(x:xs) ++ ys  =  x:(xs ++ ys)
+(xs ++ ys) ++ zs  =  xs ++ (ys ++ zs)
+elem x (sort xs)  =  elem x xs
+elem x (insert y xs)  =  elem x (y:xs)
+sort (sort xs)  =  sort xs
+insert x []  =  [x]
+sort (xs ++ ys)  =  sort (ys ++ xs)
+sort (insert x xs)  =  insert x (sort xs)
+sort (x:xs)  =  insert x (sort xs)
+sort (xs ++ sort ys)  =  sort (xs ++ ys)
+sort (sort xs ++ ys)  =  sort (xs ++ ys)
+insert x (insert y xs)  =  insert y (insert x xs)
+insert x (x:xs)  =  x:x:xs
+insert x [y]  =  insert y [x]
+length (x:xs)  =  length (y:xs)
+length (xs ++ ys)  =  length (ys ++ xs)
+length (x:y:xs)  =  length (z:x':xs)
+length (x:(xs ++ ys))  =  length (y:(ys ++ xs))
+length (xs ++ (ys ++ zs))  =  length (xs ++ (zs ++ ys))
+not (odd x)  =  even x
+not (even x)  =  odd x
+x == x  =  True
+x /= x  =  False
+p == p  =  True
+p /= p  =  False
+f (g x)  =  (f . g) x
+map id xs  =  xs
+map (f . g) xs  =  map f (map g xs)
+f . id  =  f
+id . f  =  f
+(f . g) . h  =  f . (g . h)
+not . not  =  id
+
+(_ :: Int,[],_ :: Int)
+(x :: Int,[],x :: Int)
+(0 :: Int,[],0 :: Int)
+(id _ :: Int,[],id _ :: Int)
+(_ :: Bool,[],_ :: Bool)
+(_ :: Char,[],_ :: Char)
+(_ :: [Int],[],_ :: [Int])
+(y :: Int,[],y :: Int)
+(1 :: Int,[],1 :: Int)
+(id x :: Int,[],id x :: Int)
+(id 0 :: Int,[],id 0 :: Int)
+(id (id _) :: Int,[],id (id _) :: Int)
+(negate _ :: Int,[],negate _ :: Int)
+(abs _ :: Int,[],abs _ :: Int)
+(_ + _ :: Int,[],_ + _ :: Int)
+(head _ :: Int,[],head _ :: Int)
+(ord _ :: Int,[],ord _ :: Int)
+(p :: Bool,[],p :: Bool)
+(False :: Bool,[],False :: Bool)
+(True :: Bool,[],True :: Bool)
+(not _ :: Bool,[],not _ :: Bool)
+(c :: Char,[],c :: Char)
+('a' :: Char,[],'a' :: Char)
+(xs :: [Int],[],xs :: [Int])
+([] :: [Int],[],[] :: [Int])
+(_:_ :: [Int],[],_:_ :: [Int])
+(id :: Int -> Int,[],id :: Int -> Int)
+((+) :: Int -> Int -> Int,[],(+) :: Int -> Int -> Int)
+(z :: Int,[],z :: Int)
+(-1 :: Int,[],-1 :: Int)
+(id y :: Int,[],id y :: Int)
+(id 1 :: Int,[],id 1 :: Int)
+(id (id x) :: Int,[],id (id x) :: Int)
+(id (id 0) :: Int,[],id (id 0) :: Int)
+(id (id (id _)) :: Int,[],id (id (id _)) :: Int)
+(id (negate _) :: Int,[],id (negate _) :: Int)
+(id (abs _) :: Int,[],id (abs _) :: Int)
+(id (_ + _) :: Int,[],id (_ + _) :: Int)
+(id (head _) :: Int,[],id (head _) :: Int)
+(id (ord _) :: Int,[],id (ord _) :: Int)
+(negate x :: Int,[],negate x :: Int)
+(negate 0 :: Int,[],negate 0 :: Int)
+(negate (id _) :: Int,[],negate (id _) :: Int)
+(abs x :: Int,[],abs x :: Int)
+(abs 0 :: Int,[],abs 0 :: Int)
+(abs (id _) :: Int,[],abs (id _) :: Int)
+(_ + x :: Int,[],_ + x :: Int)
+(_ + 0 :: Int,[],_ + 0 :: Int)
+(_ + id _ :: Int,[],_ + id _ :: Int)
+(x + _ :: Int,[],x + _ :: Int)
+(0 + _ :: Int,[],0 + _ :: Int)
+(id _ + _ :: Int,[],id _ + _ :: Int)
+(_ * _ :: Int,[],_ * _ :: Int)
+(f _ :: Int,[],f _ :: Int)
+(head xs :: Int,[],head xs :: Int)
+(head [] :: Int,[],head [] :: Int)
+(head (_:_) :: Int,[],head (_:_) :: Int)
+(ord c :: Int,[],ord c :: Int)
+(ord 'a' :: Int,[],ord 'a' :: Int)
+(q :: Bool,[],q :: Bool)
+(not p :: Bool,[],not p :: Bool)
+(not False :: Bool,[],not False :: Bool)
+(not True :: Bool,[],not True :: Bool)
+(not (not _) :: Bool,[],not (not _) :: Bool)
+(_ || _ :: Bool,[],_ || _ :: Bool)
+(d :: Char,[],d :: Char)
+(' ' :: Char,[],' ' :: Char)
+(ys :: [Int],[],ys :: [Int])
+([0] :: [Int],[],[0] :: [Int])
+(_:xs :: [Int],[],_:xs :: [Int])
+([_] :: [Int],[],[_] :: [Int])
+(_:_:_ :: [Int],[],_:_:_ :: [Int])
+(x:_ :: [Int],[],x:_ :: [Int])
+(0:_ :: [Int],[],0:_ :: [Int])
+(id _:_ :: [Int],[],id _:_ :: [Int])
+(tail _ :: [Int],[],tail _ :: [Int])
+(_ ++ _ :: [Int],[],_ ++ _ :: [Int])
+(negate :: Int -> Int,[],negate :: Int -> Int)
+(abs :: Int -> Int,[],abs :: Int -> Int)
+((_ +) :: Int -> Int,[],(_ +) :: Int -> Int)
+((*) :: Int -> Int -> Int,[],(*) :: Int -> Int -> Int)
+(not :: Bool -> Bool,[],not :: Bool -> Bool)
+((||) :: Bool -> Bool -> Bool,[],(||) :: Bool -> Bool -> Bool)
+(x' :: Int,[],x' :: Int)
+(2 :: Int,[],2 :: Int)
+(id z :: Int,[],id z :: Int)
+(id (-1) :: Int,[],id (-1) :: Int)
+(id (id y) :: Int,[],id (id y) :: Int)
+(id (id 1) :: Int,[],id (id 1) :: Int)
+(id (id (id x)) :: Int,[],id (id (id x)) :: Int)
+(id (id (id 0)) :: Int,[],id (id (id 0)) :: Int)
+(id (id (id (id _))) :: Int,[],id (id (id (id _))) :: Int)
+(id (id (negate _)) :: Int,[],id (id (negate _)) :: Int)
+(id (id (abs _)) :: Int,[],id (id (abs _)) :: Int)
+(id (id (_ + _)) :: Int,[],id (id (_ + _)) :: Int)
+(id (id (head _)) :: Int,[],id (id (head _)) :: Int)
+(id (id (ord _)) :: Int,[],id (id (ord _)) :: Int)
+(id (negate x) :: Int,[],id (negate x) :: Int)
+(id (negate 0) :: Int,[],id (negate 0) :: Int)
+(id (negate (id _)) :: Int,[],id (negate (id _)) :: Int)
+(id (abs x) :: Int,[],id (abs x) :: Int)
+(id (abs 0) :: Int,[],id (abs 0) :: Int)
+(id (abs (id _)) :: Int,[],id (abs (id _)) :: Int)
+(id (_ + x) :: Int,[],id (_ + x) :: Int)
+(id (_ + 0) :: Int,[],id (_ + 0) :: Int)
+(id (_ + id _) :: Int,[],id (_ + id _) :: Int)
+(id (x + _) :: Int,[],id (x + _) :: Int)
+(id (0 + _) :: Int,[],id (0 + _) :: Int)
+(id (id _ + _) :: Int,[],id (id _ + _) :: Int)
+(id (_ * _) :: Int,[],id (_ * _) :: Int)
+(id (f _) :: Int,[],id (f _) :: Int)
+(id (head xs) :: Int,[],id (head xs) :: Int)
+(id (head []) :: Int,[],id (head []) :: Int)
+(id (head (_:_)) :: Int,[],id (head (_:_)) :: Int)
+(id (ord c) :: Int,[],id (ord c) :: Int)
+(id (ord 'a') :: Int,[],id (ord 'a') :: Int)
+(negate y :: Int,[],negate y :: Int)
+(negate 1 :: Int,[],negate 1 :: Int)
+(negate (id x) :: Int,[],negate (id x) :: Int)
+(negate (id 0) :: Int,[],negate (id 0) :: Int)
+(negate (id (id _)) :: Int,[],negate (id (id _)) :: Int)
+(negate (negate _) :: Int,[],negate (negate _) :: Int)
+(negate (abs _) :: Int,[],negate (abs _) :: Int)
+(negate (_ + _) :: Int,[],negate (_ + _) :: Int)
+(negate (head _) :: Int,[],negate (head _) :: Int)
+(negate (ord _) :: Int,[],negate (ord _) :: Int)
+(abs y :: Int,[],abs y :: Int)
+(abs 1 :: Int,[],abs 1 :: Int)
+(abs (id x) :: Int,[],abs (id x) :: Int)
+(abs (id 0) :: Int,[],abs (id 0) :: Int)
+(abs (id (id _)) :: Int,[],abs (id (id _)) :: Int)
+(abs (negate _) :: Int,[],abs (negate _) :: Int)
+(abs (abs _) :: Int,[],abs (abs _) :: Int)
+(abs (_ + _) :: Int,[],abs (_ + _) :: Int)
+(abs (head _) :: Int,[],abs (head _) :: Int)
+(abs (ord _) :: Int,[],abs (ord _) :: Int)
+(_ + y :: Int,[],_ + y :: Int)
+(_ + 1 :: Int,[],_ + 1 :: Int)
+(_ + id x :: Int,[],_ + id x :: Int)
+(_ + id 0 :: Int,[],_ + id 0 :: Int)
+(_ + id (id _) :: Int,[],_ + id (id _) :: Int)
+(_ + negate _ :: Int,[],_ + negate _ :: Int)
+(_ + abs _ :: Int,[],_ + abs _ :: Int)
+(_ + (_ + _) :: Int,[],_ + (_ + _) :: Int)
+(_ + head _ :: Int,[],_ + head _ :: Int)
+(_ + ord _ :: Int,[],_ + ord _ :: Int)
+(x + x :: Int,[],x + x :: Int)
+(x + 0 :: Int,[],x + 0 :: Int)
+(x + id _ :: Int,[],x + id _ :: Int)
+(0 + x :: Int,[],0 + x :: Int)
+(0 + 0 :: Int,[],0 + 0 :: Int)
+(0 + id _ :: Int,[],0 + id _ :: Int)
+(id _ + x :: Int,[],id _ + x :: Int)
+(id _ + 0 :: Int,[],id _ + 0 :: Int)
+(id _ + id _ :: Int,[],id _ + id _ :: Int)
+(_ * x :: Int,[],_ * x :: Int)
+(_ * 0 :: Int,[],_ * 0 :: Int)
+(_ * id _ :: Int,[],_ * id _ :: Int)
+(f x :: Int,[],f x :: Int)
+(f 0 :: Int,[],f 0 :: Int)
+(f (id _) :: Int,[],f (id _) :: Int)
+(y + _ :: Int,[],y + _ :: Int)
+(1 + _ :: Int,[],1 + _ :: Int)
+(id x + _ :: Int,[],id x + _ :: Int)
+(id 0 + _ :: Int,[],id 0 + _ :: Int)
+(id (id _) + _ :: Int,[],id (id _) + _ :: Int)
+(negate _ + _ :: Int,[],negate _ + _ :: Int)
+(abs _ + _ :: Int,[],abs _ + _ :: Int)
+((_ + _) + _ :: Int,[],(_ + _) + _ :: Int)
+(head _ + _ :: Int,[],head _ + _ :: Int)
+(ord _ + _ :: Int,[],ord _ + _ :: Int)
+(x * _ :: Int,[],x * _ :: Int)
+(0 * _ :: Int,[],0 * _ :: Int)
+(id _ * _ :: Int,[],id _ * _ :: Int)
+(g _ :: Int,[],g _ :: Int)
+(head ys :: Int,[],head ys :: Int)
+(head [0] :: Int,[],head [0] :: Int)
+(head (_:xs) :: Int,[],head (_:xs) :: Int)
+(head [_] :: Int,[],head [_] :: Int)
+(head (_:_:_) :: Int,[],head (_:_:_) :: Int)
+(head (x:_) :: Int,[],head (x:_) :: Int)
+(head (0:_) :: Int,[],head (0:_) :: Int)
+(head (id _:_) :: Int,[],head (id _:_) :: Int)
+(head (tail _) :: Int,[],head (tail _) :: Int)
+(head (_ ++ _) :: Int,[],head (_ ++ _) :: Int)
+(ord d :: Int,[],ord d :: Int)
+(ord ' ' :: Int,[],ord ' ' :: Int)
+(r :: Bool,[],r :: Bool)
+(not q :: Bool,[],not q :: Bool)
+(not (not p) :: Bool,[],not (not p) :: Bool)
+(not (not False) :: Bool,[],not (not False) :: Bool)
+(not (not True) :: Bool,[],not (not True) :: Bool)
+(not (not (not _)) :: Bool,[],not (not (not _)) :: Bool)
+(not (_ || _) :: Bool,[],not (_ || _) :: Bool)
+(_ || p :: Bool,[],_ || p :: Bool)
+(_ || False :: Bool,[],_ || False :: Bool)
+(_ || True :: Bool,[],_ || True :: Bool)
+(_ || not _ :: Bool,[],_ || not _ :: Bool)
+(p || _ :: Bool,[],p || _ :: Bool)
+(False || _ :: Bool,[],False || _ :: Bool)
+(True || _ :: Bool,[],True || _ :: Bool)
+(not _ || _ :: Bool,[],not _ || _ :: Bool)
+(_ && _ :: Bool,[],_ && _ :: Bool)
+(_ == _ :: Bool,[],_ == _ :: Bool)
+(_ == _ :: Bool,[],_ == _ :: Bool)
+(odd _ :: Bool,[],odd _ :: Bool)
+(even _ :: Bool,[],even _ :: Bool)
+(elem _ _ :: Bool,[],elem _ _ :: Bool)
+(e :: Char,[],e :: Char)
+('b' :: Char,[],'b' :: Char)
+(zs :: [Int],[],zs :: [Int])
+([0,0] :: [Int],[],[0,0] :: [Int])
+([1] :: [Int],[],[1] :: [Int])
+(_:ys :: [Int],[],_:ys :: [Int])
+([_,0] :: [Int],[],[_,0] :: [Int])
+(_:_:xs :: [Int],[],_:_:xs :: [Int])
+([_,_] :: [Int],[],[_,_] :: [Int])
+(_:_:_:_ :: [Int],[],_:_:_:_ :: [Int])
+(_:x:_ :: [Int],[],_:x:_ :: [Int])
+(_:0:_ :: [Int],[],_:0:_ :: [Int])
+(_:id _:_ :: [Int],[],_:id _:_ :: [Int])
+(_:tail _ :: [Int],[],_:tail _ :: [Int])
+(_:(_ ++ _) :: [Int],[],_:(_ ++ _) :: [Int])
+(x:xs :: [Int],[],x:xs :: [Int])
+([x] :: [Int],[],[x] :: [Int])
+(x:_:_ :: [Int],[],x:_:_ :: [Int])
+(0:xs :: [Int],[],0:xs :: [Int])
+([0] :: [Int],[],[0] :: [Int])
+(0:_:_ :: [Int],[],0:_:_ :: [Int])
+(id _:xs :: [Int],[],id _:xs :: [Int])
+([id _] :: [Int],[],[id _] :: [Int])
+(id _:_:_ :: [Int],[],id _:_:_ :: [Int])
+(y:_ :: [Int],[],y:_ :: [Int])
+(1:_ :: [Int],[],1:_ :: [Int])
+(id x:_ :: [Int],[],id x:_ :: [Int])
+(id 0:_ :: [Int],[],id 0:_ :: [Int])
+(id (id _):_ :: [Int],[],id (id _):_ :: [Int])
+(negate _:_ :: [Int],[],negate _:_ :: [Int])
+(abs _:_ :: [Int],[],abs _:_ :: [Int])
+(_ + _:_ :: [Int],[],_ + _:_ :: [Int])
+(head _:_ :: [Int],[],head _:_ :: [Int])
+(ord _:_ :: [Int],[],ord _:_ :: [Int])
+(tail xs :: [Int],[],tail xs :: [Int])
+(tail [] :: [Int],[],tail [] :: [Int])
+(tail (_:_) :: [Int],[],tail (_:_) :: [Int])
+(_ ++ xs :: [Int],[],_ ++ xs :: [Int])
+(_ ++ [] :: [Int],[],_ ++ [] :: [Int])
+(_ ++ (_:_) :: [Int],[],_ ++ (_:_) :: [Int])
+(xs ++ _ :: [Int],[],xs ++ _ :: [Int])
+([] ++ _ :: [Int],[],[] ++ _ :: [Int])
+((_:_) ++ _ :: [Int],[],(_:_) ++ _ :: [Int])
+(sort _ :: [Int],[],sort _ :: [Int])
+(insert _ _ :: [Int],[],insert _ _ :: [Int])
+((x +) :: Int -> Int,[],(x +) :: Int -> Int)
+((0 +) :: Int -> Int,[],(0 +) :: Int -> Int)
+((id _ +) :: Int -> Int,[],(id _ +) :: Int -> Int)
+((_ *) :: Int -> Int,[],(_ *) :: Int -> Int)
+(f :: Int -> Int,[],f :: Int -> Int)
+((_ ||) :: Bool -> Bool,[],(_ ||) :: Bool -> Bool)
+((&&) :: Bool -> Bool -> Bool,[],(&&) :: Bool -> Bool -> Bool)
+(y' :: Int,[],y' :: Int)
+(-2 :: Int,[],-2 :: Int)
+(id x' :: Int,[],id x' :: Int)
+(id 2 :: Int,[],id 2 :: Int)
+(id (id z) :: Int,[],id (id z) :: Int)
+(id (id (-1)) :: Int,[],id (id (-1)) :: Int)
+(id (id (id y)) :: Int,[],id (id (id y)) :: Int)
+(id (id (id 1)) :: Int,[],id (id (id 1)) :: Int)
+(id (id (id (id x))) :: Int,[],id (id (id (id x))) :: Int)
+(id (id (id (id 0))) :: Int,[],id (id (id (id 0))) :: Int)
+(id (id (id (id (id _)))) :: Int,[],id (id (id (id (id _)))) :: Int)
+(id (id (id (negate _))) :: Int,[],id (id (id (negate _))) :: Int)
+(id (id (id (abs _))) :: Int,[],id (id (id (abs _))) :: Int)
+(id (id (id (_ + _))) :: Int,[],id (id (id (_ + _))) :: Int)
+(id (id (id (head _))) :: Int,[],id (id (id (head _))) :: Int)
+(id (id (id (ord _))) :: Int,[],id (id (id (ord _))) :: Int)
+(id (id (negate x)) :: Int,[],id (id (negate x)) :: Int)
+(id (id (negate 0)) :: Int,[],id (id (negate 0)) :: Int)
+(id (id (negate (id _))) :: Int,[],id (id (negate (id _))) :: Int)
+(id (id (abs x)) :: Int,[],id (id (abs x)) :: Int)
+(id (id (abs 0)) :: Int,[],id (id (abs 0)) :: Int)
+(id (id (abs (id _))) :: Int,[],id (id (abs (id _))) :: Int)
+(id (id (_ + x)) :: Int,[],id (id (_ + x)) :: Int)
+(id (id (_ + 0)) :: Int,[],id (id (_ + 0)) :: Int)
+(id (id (_ + id _)) :: Int,[],id (id (_ + id _)) :: Int)
+(id (id (x + _)) :: Int,[],id (id (x + _)) :: Int)
+(id (id (0 + _)) :: Int,[],id (id (0 + _)) :: Int)
+(id (id (id _ + _)) :: Int,[],id (id (id _ + _)) :: Int)
+(id (id (_ * _)) :: Int,[],id (id (_ * _)) :: Int)
+(id (id (f _)) :: Int,[],id (id (f _)) :: Int)
+(id (id (head xs)) :: Int,[],id (id (head xs)) :: Int)
+(id (id (head [])) :: Int,[],id (id (head [])) :: Int)
+(id (id (head (_:_))) :: Int,[],id (id (head (_:_))) :: Int)
+(id (id (ord c)) :: Int,[],id (id (ord c)) :: Int)
+(id (id (ord 'a')) :: Int,[],id (id (ord 'a')) :: Int)
+(id (negate y) :: Int,[],id (negate y) :: Int)
+(id (negate 1) :: Int,[],id (negate 1) :: Int)
+(id (negate (id x)) :: Int,[],id (negate (id x)) :: Int)
+(id (negate (id 0)) :: Int,[],id (negate (id 0)) :: Int)
+(id (negate (id (id _))) :: Int,[],id (negate (id (id _))) :: Int)
+(id (negate (negate _)) :: Int,[],id (negate (negate _)) :: Int)
+(id (negate (abs _)) :: Int,[],id (negate (abs _)) :: Int)
+(id (negate (_ + _)) :: Int,[],id (negate (_ + _)) :: Int)
+(id (negate (head _)) :: Int,[],id (negate (head _)) :: Int)
+(id (negate (ord _)) :: Int,[],id (negate (ord _)) :: Int)
+(id (abs y) :: Int,[],id (abs y) :: Int)
+(id (abs 1) :: Int,[],id (abs 1) :: Int)
+(id (abs (id x)) :: Int,[],id (abs (id x)) :: Int)
+(id (abs (id 0)) :: Int,[],id (abs (id 0)) :: Int)
+(id (abs (id (id _))) :: Int,[],id (abs (id (id _))) :: Int)
+(id (abs (negate _)) :: Int,[],id (abs (negate _)) :: Int)
+(id (abs (abs _)) :: Int,[],id (abs (abs _)) :: Int)
+(id (abs (_ + _)) :: Int,[],id (abs (_ + _)) :: Int)
+(id (abs (head _)) :: Int,[],id (abs (head _)) :: Int)
+(id (abs (ord _)) :: Int,[],id (abs (ord _)) :: Int)
+(id (_ + y) :: Int,[],id (_ + y) :: Int)
+(id (_ + 1) :: Int,[],id (_ + 1) :: Int)
+(id (_ + id x) :: Int,[],id (_ + id x) :: Int)
+(id (_ + id 0) :: Int,[],id (_ + id 0) :: Int)
+(id (_ + id (id _)) :: Int,[],id (_ + id (id _)) :: Int)
+(id (_ + negate _) :: Int,[],id (_ + negate _) :: Int)
+(id (_ + abs _) :: Int,[],id (_ + abs _) :: Int)
+(id (_ + (_ + _)) :: Int,[],id (_ + (_ + _)) :: Int)
+(id (_ + head _) :: Int,[],id (_ + head _) :: Int)
+(id (_ + ord _) :: Int,[],id (_ + ord _) :: Int)
+(id (x + x) :: Int,[],id (x + x) :: Int)
+(id (x + 0) :: Int,[],id (x + 0) :: Int)
+(id (x + id _) :: Int,[],id (x + id _) :: Int)
+(id (0 + x) :: Int,[],id (0 + x) :: Int)
+(id (0 + 0) :: Int,[],id (0 + 0) :: Int)
+(id (0 + id _) :: Int,[],id (0 + id _) :: Int)
+(id (id _ + x) :: Int,[],id (id _ + x) :: Int)
+(id (id _ + 0) :: Int,[],id (id _ + 0) :: Int)
+(id (id _ + id _) :: Int,[],id (id _ + id _) :: Int)
+(id (_ * x) :: Int,[],id (_ * x) :: Int)
+(id (_ * 0) :: Int,[],id (_ * 0) :: Int)
+(id (_ * id _) :: Int,[],id (_ * id _) :: Int)
+(id (f x) :: Int,[],id (f x) :: Int)
+(id (f 0) :: Int,[],id (f 0) :: Int)
+(id (f (id _)) :: Int,[],id (f (id _)) :: Int)
+(id (y + _) :: Int,[],id (y + _) :: Int)
+(id (1 + _) :: Int,[],id (1 + _) :: Int)
+(id (id x + _) :: Int,[],id (id x + _) :: Int)
+(id (id 0 + _) :: Int,[],id (id 0 + _) :: Int)
+(id (id (id _) + _) :: Int,[],id (id (id _) + _) :: Int)
+(id (negate _ + _) :: Int,[],id (negate _ + _) :: Int)
+(id (abs _ + _) :: Int,[],id (abs _ + _) :: Int)
+(id ((_ + _) + _) :: Int,[],id ((_ + _) + _) :: Int)
+(id (head _ + _) :: Int,[],id (head _ + _) :: Int)
+(id (ord _ + _) :: Int,[],id (ord _ + _) :: Int)
+(id (x * _) :: Int,[],id (x * _) :: Int)
+(id (0 * _) :: Int,[],id (0 * _) :: Int)
+(id (id _ * _) :: Int,[],id (id _ * _) :: Int)
+(id (g _) :: Int,[],id (g _) :: Int)
+(id (head ys) :: Int,[],id (head ys) :: Int)
+(id (head [0]) :: Int,[],id (head [0]) :: Int)
+(id (head (_:xs)) :: Int,[],id (head (_:xs)) :: Int)
+(id (head [_]) :: Int,[],id (head [_]) :: Int)
+(id (head (_:_:_)) :: Int,[],id (head (_:_:_)) :: Int)
+(id (head (x:_)) :: Int,[],id (head (x:_)) :: Int)
+(id (head (0:_)) :: Int,[],id (head (0:_)) :: Int)
+(id (head (id _:_)) :: Int,[],id (head (id _:_)) :: Int)
+(id (head (tail _)) :: Int,[],id (head (tail _)) :: Int)
+(id (head (_ ++ _)) :: Int,[],id (head (_ ++ _)) :: Int)
+(id (ord d) :: Int,[],id (ord d) :: Int)
+(id (ord ' ') :: Int,[],id (ord ' ') :: Int)
+(negate z :: Int,[],negate z :: Int)
+(negate (-1) :: Int,[],negate (-1) :: Int)
+(negate (id y) :: Int,[],negate (id y) :: Int)
+(negate (id 1) :: Int,[],negate (id 1) :: Int)
+(negate (id (id x)) :: Int,[],negate (id (id x)) :: Int)
+(negate (id (id 0)) :: Int,[],negate (id (id 0)) :: Int)
+(negate (id (id (id _))) :: Int,[],negate (id (id (id _))) :: Int)
+(negate (id (negate _)) :: Int,[],negate (id (negate _)) :: Int)
+(negate (id (abs _)) :: Int,[],negate (id (abs _)) :: Int)
+(negate (id (_ + _)) :: Int,[],negate (id (_ + _)) :: Int)
+(negate (id (head _)) :: Int,[],negate (id (head _)) :: Int)
+(negate (id (ord _)) :: Int,[],negate (id (ord _)) :: Int)
+(negate (negate x) :: Int,[],negate (negate x) :: Int)
+(negate (negate 0) :: Int,[],negate (negate 0) :: Int)
+(negate (negate (id _)) :: Int,[],negate (negate (id _)) :: Int)
+(negate (abs x) :: Int,[],negate (abs x) :: Int)
+(negate (abs 0) :: Int,[],negate (abs 0) :: Int)
+(negate (abs (id _)) :: Int,[],negate (abs (id _)) :: Int)
+(negate (_ + x) :: Int,[],negate (_ + x) :: Int)
+(negate (_ + 0) :: Int,[],negate (_ + 0) :: Int)
+(negate (_ + id _) :: Int,[],negate (_ + id _) :: Int)
+(negate (x + _) :: Int,[],negate (x + _) :: Int)
+(negate (0 + _) :: Int,[],negate (0 + _) :: Int)
+(negate (id _ + _) :: Int,[],negate (id _ + _) :: Int)
+(negate (_ * _) :: Int,[],negate (_ * _) :: Int)
+(negate (f _) :: Int,[],negate (f _) :: Int)
+(negate (head xs) :: Int,[],negate (head xs) :: Int)
+(negate (head []) :: Int,[],negate (head []) :: Int)
+(negate (head (_:_)) :: Int,[],negate (head (_:_)) :: Int)
+(negate (ord c) :: Int,[],negate (ord c) :: Int)
+(negate (ord 'a') :: Int,[],negate (ord 'a') :: Int)
+(abs z :: Int,[],abs z :: Int)
+(abs (-1) :: Int,[],abs (-1) :: Int)
+(abs (id y) :: Int,[],abs (id y) :: Int)
+(abs (id 1) :: Int,[],abs (id 1) :: Int)
+(abs (id (id x)) :: Int,[],abs (id (id x)) :: Int)
+(abs (id (id 0)) :: Int,[],abs (id (id 0)) :: Int)
+(abs (id (id (id _))) :: Int,[],abs (id (id (id _))) :: Int)
+(abs (id (negate _)) :: Int,[],abs (id (negate _)) :: Int)
+(abs (id (abs _)) :: Int,[],abs (id (abs _)) :: Int)
+(abs (id (_ + _)) :: Int,[],abs (id (_ + _)) :: Int)
+(abs (id (head _)) :: Int,[],abs (id (head _)) :: Int)
+(abs (id (ord _)) :: Int,[],abs (id (ord _)) :: Int)
+(abs (negate x) :: Int,[],abs (negate x) :: Int)
+(abs (negate 0) :: Int,[],abs (negate 0) :: Int)
+(abs (negate (id _)) :: Int,[],abs (negate (id _)) :: Int)
+(abs (abs x) :: Int,[],abs (abs x) :: Int)
+(abs (abs 0) :: Int,[],abs (abs 0) :: Int)
+(abs (abs (id _)) :: Int,[],abs (abs (id _)) :: Int)
+(abs (_ + x) :: Int,[],abs (_ + x) :: Int)
+(abs (_ + 0) :: Int,[],abs (_ + 0) :: Int)
+(abs (_ + id _) :: Int,[],abs (_ + id _) :: Int)
+(abs (x + _) :: Int,[],abs (x + _) :: Int)
+(abs (0 + _) :: Int,[],abs (0 + _) :: Int)
+(abs (id _ + _) :: Int,[],abs (id _ + _) :: Int)
+(abs (_ * _) :: Int,[],abs (_ * _) :: Int)
+(abs (f _) :: Int,[],abs (f _) :: Int)
+(abs (head xs) :: Int,[],abs (head xs) :: Int)
+(abs (head []) :: Int,[],abs (head []) :: Int)
+(abs (head (_:_)) :: Int,[],abs (head (_:_)) :: Int)
+(abs (ord c) :: Int,[],abs (ord c) :: Int)
+(abs (ord 'a') :: Int,[],abs (ord 'a') :: Int)
+(_ + z :: Int,[],_ + z :: Int)
+(_ + (-1) :: Int,[],_ + (-1) :: Int)
+(_ + id y :: Int,[],_ + id y :: Int)
+(_ + id 1 :: Int,[],_ + id 1 :: Int)
+(_ + id (id x) :: Int,[],_ + id (id x) :: Int)
+(_ + id (id 0) :: Int,[],_ + id (id 0) :: Int)
+(_ + id (id (id _)) :: Int,[],_ + id (id (id _)) :: Int)
+(_ + id (negate _) :: Int,[],_ + id (negate _) :: Int)
+(_ + id (abs _) :: Int,[],_ + id (abs _) :: Int)
+(_ + id (_ + _) :: Int,[],_ + id (_ + _) :: Int)
+(_ + id (head _) :: Int,[],_ + id (head _) :: Int)
+(_ + id (ord _) :: Int,[],_ + id (ord _) :: Int)
+(_ + negate x :: Int,[],_ + negate x :: Int)
+(_ + negate 0 :: Int,[],_ + negate 0 :: Int)
+(_ + negate (id _) :: Int,[],_ + negate (id _) :: Int)
+(_ + abs x :: Int,[],_ + abs x :: Int)
+(_ + abs 0 :: Int,[],_ + abs 0 :: Int)
+(_ + abs (id _) :: Int,[],_ + abs (id _) :: Int)
+(_ + (_ + x) :: Int,[],_ + (_ + x) :: Int)
+(_ + (_ + 0) :: Int,[],_ + (_ + 0) :: Int)
+(_ + (_ + id _) :: Int,[],_ + (_ + id _) :: Int)
+(_ + (x + _) :: Int,[],_ + (x + _) :: Int)
+(_ + (0 + _) :: Int,[],_ + (0 + _) :: Int)
+(_ + (id _ + _) :: Int,[],_ + (id _ + _) :: Int)
+(_ + _ * _ :: Int,[],_ + _ * _ :: Int)
+(_ + f _ :: Int,[],_ + f _ :: Int)
+(_ + head xs :: Int,[],_ + head xs :: Int)
+(_ + head [] :: Int,[],_ + head [] :: Int)
+(_ + head (_:_) :: Int,[],_ + head (_:_) :: Int)
+(_ + ord c :: Int,[],_ + ord c :: Int)
+(_ + ord 'a' :: Int,[],_ + ord 'a' :: Int)
+(x + y :: Int,[],x + y :: Int)
+(x + 1 :: Int,[],x + 1 :: Int)
+(x + id x :: Int,[],x + id x :: Int)
+(x + id 0 :: Int,[],x + id 0 :: Int)
+(x + id (id _) :: Int,[],x + id (id _) :: Int)
+(x + negate _ :: Int,[],x + negate _ :: Int)
+(x + abs _ :: Int,[],x + abs _ :: Int)
+(x + (_ + _) :: Int,[],x + (_ + _) :: Int)
+(x + head _ :: Int,[],x + head _ :: Int)
+(x + ord _ :: Int,[],x + ord _ :: Int)
+(0 + y :: Int,[],0 + y :: Int)
+(0 + 1 :: Int,[],0 + 1 :: Int)
+(0 + id x :: Int,[],0 + id x :: Int)
+(0 + id 0 :: Int,[],0 + id 0 :: Int)
+(0 + id (id _) :: Int,[],0 + id (id _) :: Int)
+(0 + negate _ :: Int,[],0 + negate _ :: Int)
+(0 + abs _ :: Int,[],0 + abs _ :: Int)
+(0 + (_ + _) :: Int,[],0 + (_ + _) :: Int)
+(0 + head _ :: Int,[],0 + head _ :: Int)
+(0 + ord _ :: Int,[],0 + ord _ :: Int)
+(id _ + y :: Int,[],id _ + y :: Int)
+(id _ + 1 :: Int,[],id _ + 1 :: Int)
+(id _ + id x :: Int,[],id _ + id x :: Int)
+(id _ + id 0 :: Int,[],id _ + id 0 :: Int)
+(id _ + id (id _) :: Int,[],id _ + id (id _) :: Int)
+(id _ + negate _ :: Int,[],id _ + negate _ :: Int)
+(id _ + abs _ :: Int,[],id _ + abs _ :: Int)
+(id _ + (_ + _) :: Int,[],id _ + (_ + _) :: Int)
+(id _ + head _ :: Int,[],id _ + head _ :: Int)
+(id _ + ord _ :: Int,[],id _ + ord _ :: Int)
+(_ * y :: Int,[],_ * y :: Int)
+(_ * 1 :: Int,[],_ * 1 :: Int)
+(_ * id x :: Int,[],_ * id x :: Int)
+(_ * id 0 :: Int,[],_ * id 0 :: Int)
+(_ * id (id _) :: Int,[],_ * id (id _) :: Int)
+(_ * negate _ :: Int,[],_ * negate _ :: Int)
+(_ * abs _ :: Int,[],_ * abs _ :: Int)
+(_ * (_ + _) :: Int,[],_ * (_ + _) :: Int)
+(_ * head _ :: Int,[],_ * head _ :: Int)
+(_ * ord _ :: Int,[],_ * ord _ :: Int)
+(f y :: Int,[],f y :: Int)
+(f 1 :: Int,[],f 1 :: Int)
+(f (id x) :: Int,[],f (id x) :: Int)
+(f (id 0) :: Int,[],f (id 0) :: Int)
+(f (id (id _)) :: Int,[],f (id (id _)) :: Int)
+(f (negate _) :: Int,[],f (negate _) :: Int)
+(f (abs _) :: Int,[],f (abs _) :: Int)
+(f (_ + _) :: Int,[],f (_ + _) :: Int)
+(f (head _) :: Int,[],f (head _) :: Int)
+(f (ord _) :: Int,[],f (ord _) :: Int)
+(y + x :: Int,[],y + x :: Int)
+(y + 0 :: Int,[],y + 0 :: Int)
+(y + id _ :: Int,[],y + id _ :: Int)
+(1 + x :: Int,[],1 + x :: Int)
+(1 + 0 :: Int,[],1 + 0 :: Int)
+(1 + id _ :: Int,[],1 + id _ :: Int)
+(id x + x :: Int,[],id x + x :: Int)
+(id x + 0 :: Int,[],id x + 0 :: Int)
+(id x + id _ :: Int,[],id x + id _ :: Int)
+(id 0 + x :: Int,[],id 0 + x :: Int)
+(id 0 + 0 :: Int,[],id 0 + 0 :: Int)
+(id 0 + id _ :: Int,[],id 0 + id _ :: Int)
+(id (id _) + x :: Int,[],id (id _) + x :: Int)
+(id (id _) + 0 :: Int,[],id (id _) + 0 :: Int)
+(id (id _) + id _ :: Int,[],id (id _) + id _ :: Int)
+(negate _ + x :: Int,[],negate _ + x :: Int)
+(negate _ + 0 :: Int,[],negate _ + 0 :: Int)
+(negate _ + id _ :: Int,[],negate _ + id _ :: Int)
+(abs _ + x :: Int,[],abs _ + x :: Int)
+(abs _ + 0 :: Int,[],abs _ + 0 :: Int)
+(abs _ + id _ :: Int,[],abs _ + id _ :: Int)
+((_ + _) + x :: Int,[],(_ + _) + x :: Int)
+((_ + _) + 0 :: Int,[],(_ + _) + 0 :: Int)
+((_ + _) + id _ :: Int,[],(_ + _) + id _ :: Int)
+(head _ + x :: Int,[],head _ + x :: Int)
+(head _ + 0 :: Int,[],head _ + 0 :: Int)
+(head _ + id _ :: Int,[],head _ + id _ :: Int)
+(ord _ + x :: Int,[],ord _ + x :: Int)
+(ord _ + 0 :: Int,[],ord _ + 0 :: Int)
+(ord _ + id _ :: Int,[],ord _ + id _ :: Int)
+(x * x :: Int,[],x * x :: Int)
+(x * 0 :: Int,[],x * 0 :: Int)
+(x * id _ :: Int,[],x * id _ :: Int)
+(0 * x :: Int,[],0 * x :: Int)
+(0 * 0 :: Int,[],0 * 0 :: Int)
+(0 * id _ :: Int,[],0 * id _ :: Int)
+(id _ * x :: Int,[],id _ * x :: Int)
+(id _ * 0 :: Int,[],id _ * 0 :: Int)
+(id _ * id _ :: Int,[],id _ * id _ :: Int)
+(g x :: Int,[],g x :: Int)
+(g 0 :: Int,[],g 0 :: Int)
+(g (id _) :: Int,[],g (id _) :: Int)
+(z + _ :: Int,[],z + _ :: Int)
+((-1) + _ :: Int,[],(-1) + _ :: Int)
+(id y + _ :: Int,[],id y + _ :: Int)
+(id 1 + _ :: Int,[],id 1 + _ :: Int)
+(id (id x) + _ :: Int,[],id (id x) + _ :: Int)
+(id (id 0) + _ :: Int,[],id (id 0) + _ :: Int)
+(id (id (id _)) + _ :: Int,[],id (id (id _)) + _ :: Int)
+(id (negate _) + _ :: Int,[],id (negate _) + _ :: Int)
+(id (abs _) + _ :: Int,[],id (abs _) + _ :: Int)
+(id (_ + _) + _ :: Int,[],id (_ + _) + _ :: Int)
+(id (head _) + _ :: Int,[],id (head _) + _ :: Int)
+(id (ord _) + _ :: Int,[],id (ord _) + _ :: Int)
+(negate x + _ :: Int,[],negate x + _ :: Int)
+(negate 0 + _ :: Int,[],negate 0 + _ :: Int)
+(negate (id _) + _ :: Int,[],negate (id _) + _ :: Int)
+(abs x + _ :: Int,[],abs x + _ :: Int)
+(abs 0 + _ :: Int,[],abs 0 + _ :: Int)
+(abs (id _) + _ :: Int,[],abs (id _) + _ :: Int)
+((_ + x) + _ :: Int,[],(_ + x) + _ :: Int)
+((_ + 0) + _ :: Int,[],(_ + 0) + _ :: Int)
+((_ + id _) + _ :: Int,[],(_ + id _) + _ :: Int)
+((x + _) + _ :: Int,[],(x + _) + _ :: Int)
+((0 + _) + _ :: Int,[],(0 + _) + _ :: Int)
+((id _ + _) + _ :: Int,[],(id _ + _) + _ :: Int)
+(_ * _ + _ :: Int,[],_ * _ + _ :: Int)
+(f _ + _ :: Int,[],f _ + _ :: Int)
+(head xs + _ :: Int,[],head xs + _ :: Int)
+(head [] + _ :: Int,[],head [] + _ :: Int)
+(head (_:_) + _ :: Int,[],head (_:_) + _ :: Int)
+(ord c + _ :: Int,[],ord c + _ :: Int)
+(ord 'a' + _ :: Int,[],ord 'a' + _ :: Int)
+(y * _ :: Int,[],y * _ :: Int)
+(1 * _ :: Int,[],1 * _ :: Int)
+(id x * _ :: Int,[],id x * _ :: Int)
+(id 0 * _ :: Int,[],id 0 * _ :: Int)
+(id (id _) * _ :: Int,[],id (id _) * _ :: Int)
+(negate _ * _ :: Int,[],negate _ * _ :: Int)
+(abs _ * _ :: Int,[],abs _ * _ :: Int)
+((_ + _) * _ :: Int,[],(_ + _) * _ :: Int)
+(head _ * _ :: Int,[],head _ * _ :: Int)
+(ord _ * _ :: Int,[],ord _ * _ :: Int)
+(h _ :: Int,[],h _ :: Int)
+(head zs :: Int,[],head zs :: Int)
+(head [0,0] :: Int,[],head [0,0] :: Int)
+(head [1] :: Int,[],head [1] :: Int)
+(head (_:ys) :: Int,[],head (_:ys) :: Int)
+(head [_,0] :: Int,[],head [_,0] :: Int)
+(head (_:_:xs) :: Int,[],head (_:_:xs) :: Int)
+(head [_,_] :: Int,[],head [_,_] :: Int)
+(head (_:_:_:_) :: Int,[],head (_:_:_:_) :: Int)
+(head (_:x:_) :: Int,[],head (_:x:_) :: Int)
+(head (_:0:_) :: Int,[],head (_:0:_) :: Int)
+(head (_:id _:_) :: Int,[],head (_:id _:_) :: Int)
+(head (_:tail _) :: Int,[],head (_:tail _) :: Int)
+(head (_:(_ ++ _)) :: Int,[],head (_:(_ ++ _)) :: Int)
+(head (x:xs) :: Int,[],head (x:xs) :: Int)
+(head [x] :: Int,[],head [x] :: Int)
+(head (x:_:_) :: Int,[],head (x:_:_) :: Int)
+(head (0:xs) :: Int,[],head (0:xs) :: Int)
+(head [0] :: Int,[],head [0] :: Int)
+(head (0:_:_) :: Int,[],head (0:_:_) :: Int)
+(head (id _:xs) :: Int,[],head (id _:xs) :: Int)
+(head [id _] :: Int,[],head [id _] :: Int)
+(head (id _:_:_) :: Int,[],head (id _:_:_) :: Int)
+(head (y:_) :: Int,[],head (y:_) :: Int)
+(head (1:_) :: Int,[],head (1:_) :: Int)
+(head (id x:_) :: Int,[],head (id x:_) :: Int)
+(head (id 0:_) :: Int,[],head (id 0:_) :: Int)
+(head (id (id _):_) :: Int,[],head (id (id _):_) :: Int)
+(head (negate _:_) :: Int,[],head (negate _:_) :: Int)
+(head (abs _:_) :: Int,[],head (abs _:_) :: Int)
+(head (_ + _:_) :: Int,[],head (_ + _:_) :: Int)
+(head (head _:_) :: Int,[],head (head _:_) :: Int)
+(head (ord _:_) :: Int,[],head (ord _:_) :: Int)
+(head (tail xs) :: Int,[],head (tail xs) :: Int)
+(head (tail []) :: Int,[],head (tail []) :: Int)
+(head (tail (_:_)) :: Int,[],head (tail (_:_)) :: Int)
+(head (_ ++ xs) :: Int,[],head (_ ++ xs) :: Int)
+(head (_ ++ []) :: Int,[],head (_ ++ []) :: Int)
+(head (_ ++ (_:_)) :: Int,[],head (_ ++ (_:_)) :: Int)
+(head (xs ++ _) :: Int,[],head (xs ++ _) :: Int)
+(head ([] ++ _) :: Int,[],head ([] ++ _) :: Int)
+(head ((_:_) ++ _) :: Int,[],head ((_:_) ++ _) :: Int)
+(head (sort _) :: Int,[],head (sort _) :: Int)
+(head (insert _ _) :: Int,[],head (insert _ _) :: Int)
+(ord e :: Int,[],ord e :: Int)
+(ord 'b' :: Int,[],ord 'b' :: Int)
+(p' :: Bool,[],p' :: Bool)
+(not r :: Bool,[],not r :: Bool)
+(not (not q) :: Bool,[],not (not q) :: Bool)
+(not (not (not p)) :: Bool,[],not (not (not p)) :: Bool)
+(not (not (not False)) :: Bool,[],not (not (not False)) :: Bool)
+(not (not (not True)) :: Bool,[],not (not (not True)) :: Bool)
+(not (not (not (not _))) :: Bool,[],not (not (not (not _))) :: Bool)
+(not (not (_ || _)) :: Bool,[],not (not (_ || _)) :: Bool)
+(not (_ || p) :: Bool,[],not (_ || p) :: Bool)
+(not (_ || False) :: Bool,[],not (_ || False) :: Bool)
+(not (_ || True) :: Bool,[],not (_ || True) :: Bool)
+(not (_ || not _) :: Bool,[],not (_ || not _) :: Bool)
+(not (p || _) :: Bool,[],not (p || _) :: Bool)
+(not (False || _) :: Bool,[],not (False || _) :: Bool)
+(not (True || _) :: Bool,[],not (True || _) :: Bool)
+(not (not _ || _) :: Bool,[],not (not _ || _) :: Bool)
+(not (_ && _) :: Bool,[],not (_ && _) :: Bool)
+(not (_ == _) :: Bool,[],not (_ == _) :: Bool)
+(not (_ == _) :: Bool,[],not (_ == _) :: Bool)
+(not (odd _) :: Bool,[],not (odd _) :: Bool)
+(not (even _) :: Bool,[],not (even _) :: Bool)
+(not (elem _ _) :: Bool,[],not (elem _ _) :: Bool)
+(_ || q :: Bool,[],_ || q :: Bool)
+(_ || not p :: Bool,[],_ || not p :: Bool)
+(_ || not False :: Bool,[],_ || not False :: Bool)
+(_ || not True :: Bool,[],_ || not True :: Bool)
+(_ || not (not _) :: Bool,[],_ || not (not _) :: Bool)
+(_ || (_ || _) :: Bool,[],_ || (_ || _) :: Bool)
+(p || p :: Bool,[],p || p :: Bool)
+(p || False :: Bool,[],p || False :: Bool)
+(p || True :: Bool,[],p || True :: Bool)
+(p || not _ :: Bool,[],p || not _ :: Bool)
+(False || p :: Bool,[],False || p :: Bool)
+(False || False :: Bool,[],False || False :: Bool)
+(False || True :: Bool,[],False || True :: Bool)
+(False || not _ :: Bool,[],False || not _ :: Bool)
+(True || p :: Bool,[],True || p :: Bool)
+(True || False :: Bool,[],True || False :: Bool)
+(True || True :: Bool,[],True || True :: Bool)
+(True || not _ :: Bool,[],True || not _ :: Bool)
+(not _ || p :: Bool,[],not _ || p :: Bool)
+(not _ || False :: Bool,[],not _ || False :: Bool)
+(not _ || True :: Bool,[],not _ || True :: Bool)
+(not _ || not _ :: Bool,[],not _ || not _ :: Bool)
+(_ && p :: Bool,[],_ && p :: Bool)
+(_ && False :: Bool,[],_ && False :: Bool)
+(_ && True :: Bool,[],_ && True :: Bool)
+(_ && not _ :: Bool,[],_ && not _ :: Bool)
+(q || _ :: Bool,[],q || _ :: Bool)
+(not p || _ :: Bool,[],not p || _ :: Bool)
+(not False || _ :: Bool,[],not False || _ :: Bool)
+(not True || _ :: Bool,[],not True || _ :: Bool)
+(not (not _) || _ :: Bool,[],not (not _) || _ :: Bool)
+((_ || _) || _ :: Bool,[],(_ || _) || _ :: Bool)
+(p && _ :: Bool,[],p && _ :: Bool)
+(False && _ :: Bool,[],False && _ :: Bool)
+(True && _ :: Bool,[],True && _ :: Bool)
+(not _ && _ :: Bool,[],not _ && _ :: Bool)
+(_ ==> _ :: Bool,[],_ ==> _ :: Bool)
+(_ == x :: Bool,[],_ == x :: Bool)
+(_ == 0 :: Bool,[],_ == 0 :: Bool)
+(_ == id _ :: Bool,[],_ == id _ :: Bool)
+(x == _ :: Bool,[],x == _ :: Bool)
+(0 == _ :: Bool,[],0 == _ :: Bool)
+(id _ == _ :: Bool,[],id _ == _ :: Bool)
+(_ == p :: Bool,[],_ == p :: Bool)
+(_ == False :: Bool,[],_ == False :: Bool)
+(_ == True :: Bool,[],_ == True :: Bool)
+(_ == not _ :: Bool,[],_ == not _ :: Bool)
+(p == _ :: Bool,[],p == _ :: Bool)
+(False == _ :: Bool,[],False == _ :: Bool)
+(True == _ :: Bool,[],True == _ :: Bool)
+(not _ == _ :: Bool,[],not _ == _ :: Bool)
+(_ <= _ :: Bool,[],_ <= _ :: Bool)
+(_ <= _ :: Bool,[],_ <= _ :: Bool)
+(odd x :: Bool,[],odd x :: Bool)
+(odd 0 :: Bool,[],odd 0 :: Bool)
+(odd (id _) :: Bool,[],odd (id _) :: Bool)
+(even x :: Bool,[],even x :: Bool)
+(even 0 :: Bool,[],even 0 :: Bool)
+(even (id _) :: Bool,[],even (id _) :: Bool)
+(elem _ xs :: Bool,[],elem _ xs :: Bool)
+(elem _ [] :: Bool,[],elem _ [] :: Bool)
+(elem _ (_:_) :: Bool,[],elem _ (_:_) :: Bool)
+(elem x _ :: Bool,[],elem x _ :: Bool)
+(elem 0 _ :: Bool,[],elem 0 _ :: Bool)
+(elem (id _) _ :: Bool,[],elem (id _) _ :: Bool)
+(c' :: Char,[],c' :: Char)
+('A' :: Char,[],'A' :: Char)
+(xs' :: [Int],[],xs' :: [Int])
+([0,0,0] :: [Int],[],[0,0,0] :: [Int])
+([0,1] :: [Int],[],[0,1] :: [Int])
+([1,0] :: [Int],[],[1,0] :: [Int])
+([-1] :: [Int],[],[-1] :: [Int])
+(_:zs :: [Int],[],_:zs :: [Int])
+([_,0,0] :: [Int],[],[_,0,0] :: [Int])
+([_,1] :: [Int],[],[_,1] :: [Int])
+(_:_:ys :: [Int],[],_:_:ys :: [Int])
+([_,_,0] :: [Int],[],[_,_,0] :: [Int])
+(_:_:_:xs :: [Int],[],_:_:_:xs :: [Int])
+([_,_,_] :: [Int],[],[_,_,_] :: [Int])
+(_:_:_:_:_ :: [Int],[],_:_:_:_:_ :: [Int])
+(_:_:x:_ :: [Int],[],_:_:x:_ :: [Int])
+(_:_:0:_ :: [Int],[],_:_:0:_ :: [Int])
+(_:_:id _:_ :: [Int],[],_:_:id _:_ :: [Int])
+(_:_:tail _ :: [Int],[],_:_:tail _ :: [Int])
+(_:_:(_ ++ _) :: [Int],[],_:_:(_ ++ _) :: [Int])
+(_:x:xs :: [Int],[],_:x:xs :: [Int])
+([_,x] :: [Int],[],[_,x] :: [Int])
+(_:x:_:_ :: [Int],[],_:x:_:_ :: [Int])
+(_:0:xs :: [Int],[],_:0:xs :: [Int])
+([_,0] :: [Int],[],[_,0] :: [Int])
+(_:0:_:_ :: [Int],[],_:0:_:_ :: [Int])
+(_:id _:xs :: [Int],[],_:id _:xs :: [Int])
+([_,id _] :: [Int],[],[_,id _] :: [Int])
+(_:id _:_:_ :: [Int],[],_:id _:_:_ :: [Int])
+(_:y:_ :: [Int],[],_:y:_ :: [Int])
+(_:1:_ :: [Int],[],_:1:_ :: [Int])
+(_:id x:_ :: [Int],[],_:id x:_ :: [Int])
+(_:id 0:_ :: [Int],[],_:id 0:_ :: [Int])
+(_:id (id _):_ :: [Int],[],_:id (id _):_ :: [Int])
+(_:negate _:_ :: [Int],[],_:negate _:_ :: [Int])
+(_:abs _:_ :: [Int],[],_:abs _:_ :: [Int])
+(_:_ + _:_ :: [Int],[],_:_ + _:_ :: [Int])
+(_:head _:_ :: [Int],[],_:head _:_ :: [Int])
+(_:ord _:_ :: [Int],[],_:ord _:_ :: [Int])
+(_:tail xs :: [Int],[],_:tail xs :: [Int])
+(_:tail [] :: [Int],[],_:tail [] :: [Int])
+(_:tail (_:_) :: [Int],[],_:tail (_:_) :: [Int])
+(_:(_ ++ xs) :: [Int],[],_:(_ ++ xs) :: [Int])
+(_:(_ ++ []) :: [Int],[],_:(_ ++ []) :: [Int])
+(_:(_ ++ (_:_)) :: [Int],[],_:(_ ++ (_:_)) :: [Int])
+(_:(xs ++ _) :: [Int],[],_:(xs ++ _) :: [Int])
+(_:([] ++ _) :: [Int],[],_:([] ++ _) :: [Int])
+(_:((_:_) ++ _) :: [Int],[],_:((_:_) ++ _) :: [Int])
+(_:sort _ :: [Int],[],_:sort _ :: [Int])
+(_:insert _ _ :: [Int],[],_:insert _ _ :: [Int])
+(x:ys :: [Int],[],x:ys :: [Int])
+([x,0] :: [Int],[],[x,0] :: [Int])
+(x:_:xs :: [Int],[],x:_:xs :: [Int])
+([x,_] :: [Int],[],[x,_] :: [Int])
+(x:_:_:_ :: [Int],[],x:_:_:_ :: [Int])
+(x:x:_ :: [Int],[],x:x:_ :: [Int])
+(x:0:_ :: [Int],[],x:0:_ :: [Int])
+(x:id _:_ :: [Int],[],x:id _:_ :: [Int])
+(x:tail _ :: [Int],[],x:tail _ :: [Int])
+(x:(_ ++ _) :: [Int],[],x:(_ ++ _) :: [Int])
+(0:ys :: [Int],[],0:ys :: [Int])
+([0,0] :: [Int],[],[0,0] :: [Int])
+(0:_:xs :: [Int],[],0:_:xs :: [Int])
+([0,_] :: [Int],[],[0,_] :: [Int])
+(0:_:_:_ :: [Int],[],0:_:_:_ :: [Int])
+(0:x:_ :: [Int],[],0:x:_ :: [Int])
+(0:0:_ :: [Int],[],0:0:_ :: [Int])
+(0:id _:_ :: [Int],[],0:id _:_ :: [Int])
+(0:tail _ :: [Int],[],0:tail _ :: [Int])
+(0:(_ ++ _) :: [Int],[],0:(_ ++ _) :: [Int])
+(id _:ys :: [Int],[],id _:ys :: [Int])
+([id _,0] :: [Int],[],[id _,0] :: [Int])
+(id _:_:xs :: [Int],[],id _:_:xs :: [Int])
+([id _,_] :: [Int],[],[id _,_] :: [Int])
+(id _:_:_:_ :: [Int],[],id _:_:_:_ :: [Int])
+(id _:x:_ :: [Int],[],id _:x:_ :: [Int])
+(id _:0:_ :: [Int],[],id _:0:_ :: [Int])
+(id _:id _:_ :: [Int],[],id _:id _:_ :: [Int])
+(id _:tail _ :: [Int],[],id _:tail _ :: [Int])
+(id _:(_ ++ _) :: [Int],[],id _:(_ ++ _) :: [Int])
+(y:xs :: [Int],[],y:xs :: [Int])
+([y] :: [Int],[],[y] :: [Int])
+(y:_:_ :: [Int],[],y:_:_ :: [Int])
+(1:xs :: [Int],[],1:xs :: [Int])
+([1] :: [Int],[],[1] :: [Int])
+(1:_:_ :: [Int],[],1:_:_ :: [Int])
+(id x:xs :: [Int],[],id x:xs :: [Int])
+([id x] :: [Int],[],[id x] :: [Int])
+(id x:_:_ :: [Int],[],id x:_:_ :: [Int])
+(id 0:xs :: [Int],[],id 0:xs :: [Int])
+([id 0] :: [Int],[],[id 0] :: [Int])
+(id 0:_:_ :: [Int],[],id 0:_:_ :: [Int])
+(id (id _):xs :: [Int],[],id (id _):xs :: [Int])
+([id (id _)] :: [Int],[],[id (id _)] :: [Int])
+(id (id _):_:_ :: [Int],[],id (id _):_:_ :: [Int])
+(negate _:xs :: [Int],[],negate _:xs :: [Int])
+([negate _] :: [Int],[],[negate _] :: [Int])
+(negate _:_:_ :: [Int],[],negate _:_:_ :: [Int])
+(abs _:xs :: [Int],[],abs _:xs :: [Int])
+([abs _] :: [Int],[],[abs _] :: [Int])
+(abs _:_:_ :: [Int],[],abs _:_:_ :: [Int])
+(_ + _:xs :: [Int],[],_ + _:xs :: [Int])
+([_ + _] :: [Int],[],[_ + _] :: [Int])
+(_ + _:_:_ :: [Int],[],_ + _:_:_ :: [Int])
+(head _:xs :: [Int],[],head _:xs :: [Int])
+([head _] :: [Int],[],[head _] :: [Int])
+(head _:_:_ :: [Int],[],head _:_:_ :: [Int])
+(ord _:xs :: [Int],[],ord _:xs :: [Int])
+([ord _] :: [Int],[],[ord _] :: [Int])
+(ord _:_:_ :: [Int],[],ord _:_:_ :: [Int])
+(z:_ :: [Int],[],z:_ :: [Int])
+((-1):_ :: [Int],[],(-1):_ :: [Int])
+(id y:_ :: [Int],[],id y:_ :: [Int])
+(id 1:_ :: [Int],[],id 1:_ :: [Int])
+(id (id x):_ :: [Int],[],id (id x):_ :: [Int])
+(id (id 0):_ :: [Int],[],id (id 0):_ :: [Int])
+(id (id (id _)):_ :: [Int],[],id (id (id _)):_ :: [Int])
+(id (negate _):_ :: [Int],[],id (negate _):_ :: [Int])
+(id (abs _):_ :: [Int],[],id (abs _):_ :: [Int])
+(id (_ + _):_ :: [Int],[],id (_ + _):_ :: [Int])
+(id (head _):_ :: [Int],[],id (head _):_ :: [Int])
+(id (ord _):_ :: [Int],[],id (ord _):_ :: [Int])
+(negate x:_ :: [Int],[],negate x:_ :: [Int])
+(negate 0:_ :: [Int],[],negate 0:_ :: [Int])
+(negate (id _):_ :: [Int],[],negate (id _):_ :: [Int])
+(abs x:_ :: [Int],[],abs x:_ :: [Int])
+(abs 0:_ :: [Int],[],abs 0:_ :: [Int])
+(abs (id _):_ :: [Int],[],abs (id _):_ :: [Int])
+(_ + x:_ :: [Int],[],_ + x:_ :: [Int])
+(_ + 0:_ :: [Int],[],_ + 0:_ :: [Int])
+(_ + id _:_ :: [Int],[],_ + id _:_ :: [Int])
+(x + _:_ :: [Int],[],x + _:_ :: [Int])
+(0 + _:_ :: [Int],[],0 + _:_ :: [Int])
+(id _ + _:_ :: [Int],[],id _ + _:_ :: [Int])
+(_ * _:_ :: [Int],[],_ * _:_ :: [Int])
+(f _:_ :: [Int],[],f _:_ :: [Int])
+(head xs:_ :: [Int],[],head xs:_ :: [Int])
+(head []:_ :: [Int],[],head []:_ :: [Int])
+(head (_:_):_ :: [Int],[],head (_:_):_ :: [Int])
+(ord c:_ :: [Int],[],ord c:_ :: [Int])
+(ord 'a':_ :: [Int],[],ord 'a':_ :: [Int])
+(tail ys :: [Int],[],tail ys :: [Int])
+(tail [0] :: [Int],[],tail [0] :: [Int])
+(tail (_:xs) :: [Int],[],tail (_:xs) :: [Int])
+(tail [_] :: [Int],[],tail [_] :: [Int])
+(tail (_:_:_) :: [Int],[],tail (_:_:_) :: [Int])
+(tail (x:_) :: [Int],[],tail (x:_) :: [Int])
+(tail (0:_) :: [Int],[],tail (0:_) :: [Int])
+(tail (id _:_) :: [Int],[],tail (id _:_) :: [Int])
+(tail (tail _) :: [Int],[],tail (tail _) :: [Int])
+(tail (_ ++ _) :: [Int],[],tail (_ ++ _) :: [Int])
+(_ ++ ys :: [Int],[],_ ++ ys :: [Int])
+(_ ++ [0] :: [Int],[],_ ++ [0] :: [Int])
+(_ ++ (_:xs) :: [Int],[],_ ++ (_:xs) :: [Int])
+(_ ++ [_] :: [Int],[],_ ++ [_] :: [Int])
+(_ ++ (_:_:_) :: [Int],[],_ ++ (_:_:_) :: [Int])
+(_ ++ (x:_) :: [Int],[],_ ++ (x:_) :: [Int])
+(_ ++ (0:_) :: [Int],[],_ ++ (0:_) :: [Int])
+(_ ++ (id _:_) :: [Int],[],_ ++ (id _:_) :: [Int])
+(_ ++ tail _ :: [Int],[],_ ++ tail _ :: [Int])
+(_ ++ (_ ++ _) :: [Int],[],_ ++ (_ ++ _) :: [Int])
+(xs ++ xs :: [Int],[],xs ++ xs :: [Int])
+(xs ++ [] :: [Int],[],xs ++ [] :: [Int])
+(xs ++ (_:_) :: [Int],[],xs ++ (_:_) :: [Int])
+([] ++ xs :: [Int],[],[] ++ xs :: [Int])
+([] ++ [] :: [Int],[],[] ++ [] :: [Int])
+([] ++ (_:_) :: [Int],[],[] ++ (_:_) :: [Int])
+((_:_) ++ xs :: [Int],[],(_:_) ++ xs :: [Int])
+((_:_) ++ [] :: [Int],[],(_:_) ++ [] :: [Int])
+((_:_) ++ (_:_) :: [Int],[],(_:_) ++ (_:_) :: [Int])
+(ys ++ _ :: [Int],[],ys ++ _ :: [Int])
+([0] ++ _ :: [Int],[],[0] ++ _ :: [Int])
+((_:xs) ++ _ :: [Int],[],(_:xs) ++ _ :: [Int])
+([_] ++ _ :: [Int],[],[_] ++ _ :: [Int])
+((_:_:_) ++ _ :: [Int],[],(_:_:_) ++ _ :: [Int])
+((x:_) ++ _ :: [Int],[],(x:_) ++ _ :: [Int])
+((0:_) ++ _ :: [Int],[],(0:_) ++ _ :: [Int])
+((id _:_) ++ _ :: [Int],[],(id _:_) ++ _ :: [Int])
+(tail _ ++ _ :: [Int],[],tail _ ++ _ :: [Int])
+((_ ++ _) ++ _ :: [Int],[],(_ ++ _) ++ _ :: [Int])
+(sort xs :: [Int],[],sort xs :: [Int])
+(sort [] :: [Int],[],sort [] :: [Int])
+(sort (_:_) :: [Int],[],sort (_:_) :: [Int])
+(insert _ xs :: [Int],[],insert _ xs :: [Int])
+(insert _ [] :: [Int],[],insert _ [] :: [Int])
+(insert _ (_:_) :: [Int],[],insert _ (_:_) :: [Int])
+(insert x _ :: [Int],[],insert x _ :: [Int])
+(insert 0 _ :: [Int],[],insert 0 _ :: [Int])
+(insert (id _) _ :: [Int],[],insert (id _) _ :: [Int])
+((y +) :: Int -> Int,[],(y +) :: Int -> Int)
+((1 +) :: Int -> Int,[],(1 +) :: Int -> Int)
+((id x +) :: Int -> Int,[],(id x +) :: Int -> Int)
+((id 0 +) :: Int -> Int,[],(id 0 +) :: Int -> Int)
+((id (id _) +) :: Int -> Int,[],(id (id _) +) :: Int -> Int)
+((negate _ +) :: Int -> Int,[],(negate _ +) :: Int -> Int)
+((abs _ +) :: Int -> Int,[],(abs _ +) :: Int -> Int)
+(((_ + _) +) :: Int -> Int,[],((_ + _) +) :: Int -> Int)
+((head _ +) :: Int -> Int,[],(head _ +) :: Int -> Int)
+((ord _ +) :: Int -> Int,[],(ord _ +) :: Int -> Int)
+((x *) :: Int -> Int,[],(x *) :: Int -> Int)
+((0 *) :: Int -> Int,[],(0 *) :: Int -> Int)
+((id _ *) :: Int -> Int,[],(id _ *) :: Int -> Int)
+(g :: Int -> Int,[],g :: Int -> Int)
+((p ||) :: Bool -> Bool,[],(p ||) :: Bool -> Bool)
+((False ||) :: Bool -> Bool,[],(False ||) :: Bool -> Bool)
+((True ||) :: Bool -> Bool,[],(True ||) :: Bool -> Bool)
+((not _ ||) :: Bool -> Bool,[],(not _ ||) :: Bool -> Bool)
+((_ &&) :: Bool -> Bool,[],(_ &&) :: Bool -> Bool)
+((==>) :: Bool -> Bool -> Bool,[],(==>) :: Bool -> Bool -> Bool)
+(z' :: Int,[],z' :: Int)
+(3 :: Int,[],3 :: Int)
+(id y' :: Int,[],id y' :: Int)
+(id (-2) :: Int,[],id (-2) :: Int)
+(id (id x') :: Int,[],id (id x') :: Int)
+(id (id 2) :: Int,[],id (id 2) :: Int)
+(id (id (id z)) :: Int,[],id (id (id z)) :: Int)
+(id (id (id (-1))) :: Int,[],id (id (id (-1))) :: Int)
+(id (id (id (id y))) :: Int,[],id (id (id (id y))) :: Int)
+(id (id (id (id 1))) :: Int,[],id (id (id (id 1))) :: Int)
+(id (id (id (id (id x)))) :: Int,[],id (id (id (id (id x)))) :: Int)
+(id (id (id (id (id 0)))) :: Int,[],id (id (id (id (id 0)))) :: Int)
+(id (id (id (id (id (id _))))) :: Int,[],id (id (id (id (id (id _))))) :: Int)
+(id (id (id (id (negate _)))) :: Int,[],id (id (id (id (negate _)))) :: Int)
+(id (id (id (id (abs _)))) :: Int,[],id (id (id (id (abs _)))) :: Int)
+(id (id (id (id (_ + _)))) :: Int,[],id (id (id (id (_ + _)))) :: Int)
+(id (id (id (id (head _)))) :: Int,[],id (id (id (id (head _)))) :: Int)
+(id (id (id (id (ord _)))) :: Int,[],id (id (id (id (ord _)))) :: Int)
+(id (id (id (negate x))) :: Int,[],id (id (id (negate x))) :: Int)
+(id (id (id (negate 0))) :: Int,[],id (id (id (negate 0))) :: Int)
+(id (id (id (negate (id _)))) :: Int,[],id (id (id (negate (id _)))) :: Int)
+(id (id (id (abs x))) :: Int,[],id (id (id (abs x))) :: Int)
+(id (id (id (abs 0))) :: Int,[],id (id (id (abs 0))) :: Int)
+(id (id (id (abs (id _)))) :: Int,[],id (id (id (abs (id _)))) :: Int)
+(id (id (id (_ + x))) :: Int,[],id (id (id (_ + x))) :: Int)
+(id (id (id (_ + 0))) :: Int,[],id (id (id (_ + 0))) :: Int)
+(id (id (id (_ + id _))) :: Int,[],id (id (id (_ + id _))) :: Int)
+(id (id (id (x + _))) :: Int,[],id (id (id (x + _))) :: Int)
+(id (id (id (0 + _))) :: Int,[],id (id (id (0 + _))) :: Int)
+(id (id (id (id _ + _))) :: Int,[],id (id (id (id _ + _))) :: Int)
+(id (id (id (_ * _))) :: Int,[],id (id (id (_ * _))) :: Int)
+(id (id (id (f _))) :: Int,[],id (id (id (f _))) :: Int)
+(id (id (id (head xs))) :: Int,[],id (id (id (head xs))) :: Int)
+(id (id (id (head []))) :: Int,[],id (id (id (head []))) :: Int)
+(id (id (id (head (_:_)))) :: Int,[],id (id (id (head (_:_)))) :: Int)
+(id (id (id (ord c))) :: Int,[],id (id (id (ord c))) :: Int)
+(id (id (id (ord 'a'))) :: Int,[],id (id (id (ord 'a'))) :: Int)
+(id (id (negate y)) :: Int,[],id (id (negate y)) :: Int)
+(id (id (negate 1)) :: Int,[],id (id (negate 1)) :: Int)
+(id (id (negate (id x))) :: Int,[],id (id (negate (id x))) :: Int)
+(id (id (negate (id 0))) :: Int,[],id (id (negate (id 0))) :: Int)
+(id (id (negate (id (id _)))) :: Int,[],id (id (negate (id (id _)))) :: Int)
+(id (id (negate (negate _))) :: Int,[],id (id (negate (negate _))) :: Int)
+(id (id (negate (abs _))) :: Int,[],id (id (negate (abs _))) :: Int)
+(id (id (negate (_ + _))) :: Int,[],id (id (negate (_ + _))) :: Int)
+(id (id (negate (head _))) :: Int,[],id (id (negate (head _))) :: Int)
+(id (id (negate (ord _))) :: Int,[],id (id (negate (ord _))) :: Int)
+(id (id (abs y)) :: Int,[],id (id (abs y)) :: Int)
+(id (id (abs 1)) :: Int,[],id (id (abs 1)) :: Int)
+(id (id (abs (id x))) :: Int,[],id (id (abs (id x))) :: Int)
+(id (id (abs (id 0))) :: Int,[],id (id (abs (id 0))) :: Int)
+(id (id (abs (id (id _)))) :: Int,[],id (id (abs (id (id _)))) :: Int)
+(id (id (abs (negate _))) :: Int,[],id (id (abs (negate _))) :: Int)
+(id (id (abs (abs _))) :: Int,[],id (id (abs (abs _))) :: Int)
+(id (id (abs (_ + _))) :: Int,[],id (id (abs (_ + _))) :: Int)
+(id (id (abs (head _))) :: Int,[],id (id (abs (head _))) :: Int)
+(id (id (abs (ord _))) :: Int,[],id (id (abs (ord _))) :: Int)
+(id (id (_ + y)) :: Int,[],id (id (_ + y)) :: Int)
+(id (id (_ + 1)) :: Int,[],id (id (_ + 1)) :: Int)
+(id (id (_ + id x)) :: Int,[],id (id (_ + id x)) :: Int)
+(id (id (_ + id 0)) :: Int,[],id (id (_ + id 0)) :: Int)
+(id (id (_ + id (id _))) :: Int,[],id (id (_ + id (id _))) :: Int)
+(id (id (_ + negate _)) :: Int,[],id (id (_ + negate _)) :: Int)
+(id (id (_ + abs _)) :: Int,[],id (id (_ + abs _)) :: Int)
+(id (id (_ + (_ + _))) :: Int,[],id (id (_ + (_ + _))) :: Int)
+(id (id (_ + head _)) :: Int,[],id (id (_ + head _)) :: Int)
+(id (id (_ + ord _)) :: Int,[],id (id (_ + ord _)) :: Int)
+(id (id (x + x)) :: Int,[],id (id (x + x)) :: Int)
+(id (id (x + 0)) :: Int,[],id (id (x + 0)) :: Int)
+(id (id (x + id _)) :: Int,[],id (id (x + id _)) :: Int)
+(id (id (0 + x)) :: Int,[],id (id (0 + x)) :: Int)
+(id (id (0 + 0)) :: Int,[],id (id (0 + 0)) :: Int)
+(id (id (0 + id _)) :: Int,[],id (id (0 + id _)) :: Int)
+(id (id (id _ + x)) :: Int,[],id (id (id _ + x)) :: Int)
+(id (id (id _ + 0)) :: Int,[],id (id (id _ + 0)) :: Int)
+(id (id (id _ + id _)) :: Int,[],id (id (id _ + id _)) :: Int)
+(id (id (_ * x)) :: Int,[],id (id (_ * x)) :: Int)
+(id (id (_ * 0)) :: Int,[],id (id (_ * 0)) :: Int)
+(id (id (_ * id _)) :: Int,[],id (id (_ * id _)) :: Int)
+(id (id (f x)) :: Int,[],id (id (f x)) :: Int)
+(id (id (f 0)) :: Int,[],id (id (f 0)) :: Int)
+(id (id (f (id _))) :: Int,[],id (id (f (id _))) :: Int)
+(id (id (y + _)) :: Int,[],id (id (y + _)) :: Int)
+(id (id (1 + _)) :: Int,[],id (id (1 + _)) :: Int)
+(id (id (id x + _)) :: Int,[],id (id (id x + _)) :: Int)
+(id (id (id 0 + _)) :: Int,[],id (id (id 0 + _)) :: Int)
+(id (id (id (id _) + _)) :: Int,[],id (id (id (id _) + _)) :: Int)
+(id (id (negate _ + _)) :: Int,[],id (id (negate _ + _)) :: Int)
+(id (id (abs _ + _)) :: Int,[],id (id (abs _ + _)) :: Int)
+(id (id ((_ + _) + _)) :: Int,[],id (id ((_ + _) + _)) :: Int)
+(id (id (head _ + _)) :: Int,[],id (id (head _ + _)) :: Int)
+(id (id (ord _ + _)) :: Int,[],id (id (ord _ + _)) :: Int)
+(id (id (x * _)) :: Int,[],id (id (x * _)) :: Int)
+(id (id (0 * _)) :: Int,[],id (id (0 * _)) :: Int)
+(id (id (id _ * _)) :: Int,[],id (id (id _ * _)) :: Int)
+(id (id (g _)) :: Int,[],id (id (g _)) :: Int)
+(id (id (head ys)) :: Int,[],id (id (head ys)) :: Int)
+(id (id (head [0])) :: Int,[],id (id (head [0])) :: Int)
+(id (id (head (_:xs))) :: Int,[],id (id (head (_:xs))) :: Int)
+(id (id (head [_])) :: Int,[],id (id (head [_])) :: Int)
+(id (id (head (_:_:_))) :: Int,[],id (id (head (_:_:_))) :: Int)
+(id (id (head (x:_))) :: Int,[],id (id (head (x:_))) :: Int)
+(id (id (head (0:_))) :: Int,[],id (id (head (0:_))) :: Int)
+(id (id (head (id _:_))) :: Int,[],id (id (head (id _:_))) :: Int)
+(id (id (head (tail _))) :: Int,[],id (id (head (tail _))) :: Int)
+(id (id (head (_ ++ _))) :: Int,[],id (id (head (_ ++ _))) :: Int)
+(id (id (ord d)) :: Int,[],id (id (ord d)) :: Int)
+(id (id (ord ' ')) :: Int,[],id (id (ord ' ')) :: Int)
+(id (negate z) :: Int,[],id (negate z) :: Int)
+(id (negate (-1)) :: Int,[],id (negate (-1)) :: Int)
+(id (negate (id y)) :: Int,[],id (negate (id y)) :: Int)
+(id (negate (id 1)) :: Int,[],id (negate (id 1)) :: Int)
+(id (negate (id (id x))) :: Int,[],id (negate (id (id x))) :: Int)
+(id (negate (id (id 0))) :: Int,[],id (negate (id (id 0))) :: Int)
+(id (negate (id (id (id _)))) :: Int,[],id (negate (id (id (id _)))) :: Int)
+(id (negate (id (negate _))) :: Int,[],id (negate (id (negate _))) :: Int)
+(id (negate (id (abs _))) :: Int,[],id (negate (id (abs _))) :: Int)
+(id (negate (id (_ + _))) :: Int,[],id (negate (id (_ + _))) :: Int)
+(id (negate (id (head _))) :: Int,[],id (negate (id (head _))) :: Int)
+(id (negate (id (ord _))) :: Int,[],id (negate (id (ord _))) :: Int)
+(id (negate (negate x)) :: Int,[],id (negate (negate x)) :: Int)
+(id (negate (negate 0)) :: Int,[],id (negate (negate 0)) :: Int)
+(id (negate (negate (id _))) :: Int,[],id (negate (negate (id _))) :: Int)
+(id (negate (abs x)) :: Int,[],id (negate (abs x)) :: Int)
+(id (negate (abs 0)) :: Int,[],id (negate (abs 0)) :: Int)
+(id (negate (abs (id _))) :: Int,[],id (negate (abs (id _))) :: Int)
+(id (negate (_ + x)) :: Int,[],id (negate (_ + x)) :: Int)
+(id (negate (_ + 0)) :: Int,[],id (negate (_ + 0)) :: Int)
+(id (negate (_ + id _)) :: Int,[],id (negate (_ + id _)) :: Int)
+(id (negate (x + _)) :: Int,[],id (negate (x + _)) :: Int)
+(id (negate (0 + _)) :: Int,[],id (negate (0 + _)) :: Int)
+(id (negate (id _ + _)) :: Int,[],id (negate (id _ + _)) :: Int)
+(id (negate (_ * _)) :: Int,[],id (negate (_ * _)) :: Int)
+(id (negate (f _)) :: Int,[],id (negate (f _)) :: Int)
+(id (negate (head xs)) :: Int,[],id (negate (head xs)) :: Int)
+(id (negate (head [])) :: Int,[],id (negate (head [])) :: Int)
+(id (negate (head (_:_))) :: Int,[],id (negate (head (_:_))) :: Int)
+(id (negate (ord c)) :: Int,[],id (negate (ord c)) :: Int)
+(id (negate (ord 'a')) :: Int,[],id (negate (ord 'a')) :: Int)
+(id (abs z) :: Int,[],id (abs z) :: Int)
+(id (abs (-1)) :: Int,[],id (abs (-1)) :: Int)
+(id (abs (id y)) :: Int,[],id (abs (id y)) :: Int)
+(id (abs (id 1)) :: Int,[],id (abs (id 1)) :: Int)
+(id (abs (id (id x))) :: Int,[],id (abs (id (id x))) :: Int)
+(id (abs (id (id 0))) :: Int,[],id (abs (id (id 0))) :: Int)
+(id (abs (id (id (id _)))) :: Int,[],id (abs (id (id (id _)))) :: Int)
+
+True
diff --git a/test/model/bench/match-triexpr.out b/test/model/bench/match-triexpr.out
new file mode 100644
--- /dev/null
+++ b/test/model/bench/match-triexpr.out
@@ -0,0 +1,795 @@
+id p  =  p
+p && p  =  p
+p || p  =  p
+p && q  =  q && p
+p || q  =  q || p
+not (not p)  =  p
+p && True  =  p
+True && p  =  p
+p && False  =  False
+False && p  =  False
+p || True  =  True
+True || p  =  True
+p || False  =  p
+False || p  =  p
+p && not p  =  False
+p || not p  =  True
+not p && p  =  False
+not p || p  =  True
+(p && q) && r  =  p && (q && r)
+(p || q) || r  =  p || (q || r)
+not (p && q)  =  not p || not q
+not (p || q)  =  not p && not q
+not False  =  True
+not True  =  False
+not (not p && not q)  =  p || q
+not (not p || not q)  =  p && q
+p && not (p && q)  =  p && not q
+id x  =  x
+abs (abs x)  =  abs x
+x + 0  =  x
+0 + x  =  x
+x * 1  =  x
+1 * x  =  x
+x * 0  =  0
+0 * x  =  0
+x + y  =  y + x
+x * y  =  y * x
+(x + y) + z  =  x + (y + z)
+(x * y) * z  =  x * (y * z)
+(x + x) * y  =  x * (y + y)
+x * (y + 1)  =  x + x * y
+(x + 1) * y  =  x + x * y
+x * (y + z)  =  x * y + x * z
+(x + y) * z  =  x * z + y * z
+negate (negate x)  =  x
+x + negate x  =  0
+negate x + x  =  0
+abs (negate x)  =  abs x
+2 * x  =  x + x
+x * 2  =  x + x
+3 * x  =  x + (x + x)
+x * 3  =  x + (x + x)
+4 * x  =  x + (x + (x + x))
+x * 4  =  x + (x + (x + x))
+abs (x * x)  =  x * x
+abs x * abs y  =  abs (x * y)
+abs x * abs x  =  abs (x + x)
+abs (abs x + abs y)  =  abs x + abs y
+abs (x + x) * y  =  abs x * y + abs x * y
+abs x * signum x  =  x
+signum x * abs x  =  x
+id xs  =  xs
+head (x:xs)  =  x
+tail (x:xs)  =  xs
+xs ++ []  =  xs
+[] ++ xs  =  xs
+[x] ++ xs  =  x:xs
+(x:xs) ++ ys  =  x:(xs ++ ys)
+(xs ++ ys) ++ zs  =  xs ++ (ys ++ zs)
+elem x (sort xs)  =  elem x xs
+elem x (insert y xs)  =  elem x (y:xs)
+sort (sort xs)  =  sort xs
+insert x []  =  [x]
+sort (xs ++ ys)  =  sort (ys ++ xs)
+sort (insert x xs)  =  insert x (sort xs)
+sort (x:xs)  =  insert x (sort xs)
+sort (xs ++ sort ys)  =  sort (xs ++ ys)
+sort (sort xs ++ ys)  =  sort (xs ++ ys)
+insert x (insert y xs)  =  insert y (insert x xs)
+insert x (x:xs)  =  x:x:xs
+insert x [y]  =  insert y [x]
+length (x:xs)  =  length (y:xs)
+length (xs ++ ys)  =  length (ys ++ xs)
+length (x:y:xs)  =  length (z:x':xs)
+length (x:(xs ++ ys))  =  length (y:(ys ++ xs))
+length (xs ++ (ys ++ zs))  =  length (xs ++ (zs ++ ys))
+not (odd x)  =  even x
+not (even x)  =  odd x
+x == x  =  True
+x /= x  =  False
+p == p  =  True
+p /= p  =  False
+f (g x)  =  (f . g) x
+map id xs  =  xs
+map (f . g) xs  =  map f (map g xs)
+f . id  =  f
+id . f  =  f
+(f . g) . h  =  f . (g . h)
+not . not  =  id
+
+(id x :: Int,[(x :: Int,_ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,x :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,0 :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(id x :: Int,[(x :: Int,y :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,1 :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(id x :: Int,[(x :: Int,head _ :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord _ :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(not False :: Bool,[],True :: Bool)
+(not True :: Bool,[],False :: Bool)
+(not (not p) :: Bool,[(p :: Bool,_ :: Bool)],p :: Bool)
+(p || p :: Bool,[(p :: Bool,_ :: Bool)],p :: Bool)
+(id x :: Int,[(x :: Int,z :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,-1 :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(id x :: Int,[(x :: Int,head xs :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head [] :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord c :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord 'a' :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,y :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord _ :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,x :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,0 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id _ :: Int)],y * x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(not (not p) :: Bool,[(p :: Bool,p :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,False :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,True :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not _ :: Bool)],p :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p && p :: Bool,[(p :: Bool,_ :: Bool)],p :: Bool)
+(x == x :: Bool,[(x :: Int,_ :: Int)],True :: Bool)
+(p == p :: Bool,[(p :: Bool,_ :: Bool)],True :: Bool)
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],_ :: [Int])],xs :: [Int])
+([] ++ xs :: [Int],[(xs :: [Int],_ :: [Int])],xs :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+(id x :: Int,[(x :: Int,x' :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,2 :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,z :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,-1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id x) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id 0) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (id _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (negate _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (abs _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (_ + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (head _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (ord _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ * _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,f _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head xs :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head [] :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (_:_) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord c :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord 'a' :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(y +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(1 +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id x +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id 0 +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id (id _) +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(negate _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(abs _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,((_ + _) +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(head _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(ord _ +) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ *) :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,g :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(id x :: Int,[(x :: Int,head ys :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head [0] :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_:xs) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head [_] :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_:_:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (x:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (0:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (id _:_) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (tail _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,head (_ ++ _) :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord d :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,ord ' ' :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,negate :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,abs :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,z :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,-1 :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(x +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(0 +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(id _ +) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ *) :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,f :: Int -> Int),(f :: Int -> Int,(_ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head xs :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,head [] :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,head (_:_) :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord c :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord 'a' :: Int),(x :: Int,_ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(x +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(0 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,y :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,1 :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(id _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,head _ :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,id _ :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,y :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,1 :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,(_ *) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,head _ :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,ord _ :: Int),(x :: Int,_ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,(_ +) :: Int -> Int),(f :: Int -> Int,f :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,y :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,y :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(y +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,1 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(1 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id x :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id x +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id 0 :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id 0 +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,id (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,id (id _) :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id (id _) +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,negate _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,negate _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(negate _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,abs _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,abs _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(abs _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,_ + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,_ + _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,((_ + _) +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,head _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,head _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(head _ +) :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,x :: Int),(x :: Int,ord _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,0 :: Int),(x :: Int,ord _ :: Int)],y + x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(ord _ +) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,x :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,x :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(x *) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,0 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,0 :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(0 *) :: Int -> Int)],(f . g) x :: Int)
+(x * y :: Int,[(y :: Int,x :: Int),(x :: Int,id _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,0 :: Int),(x :: Int,id _ :: Int)],y * x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,(id _ *) :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,g :: Int -> Int)],(f . g) x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,z :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,-1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id y :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id 1 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id x) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id 0) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id (id _)) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (negate _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (abs _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (_ + _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (head _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (ord _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs (id _) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + x :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + 0 :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + id _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,x + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,0 + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,id _ + _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ * _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,f _ :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head xs :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head [] :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,head (_:_) :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord c :: Int)],y + x :: Int)
+(x + y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord 'a' :: Int)],y + x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,y :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,1 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id x :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id 0 :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,id (id _) :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,negate _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,abs _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,_ + _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,head _ :: Int)],y * x :: Int)
+(x * y :: Int,[(y :: Int,_ :: Int),(x :: Int,ord _ :: Int)],y * x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],ys :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[0] :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:xs :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[_] :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],x:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],0:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],id _:_ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],tail _ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ ++ _ :: [Int]),(x :: Int,_ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],xs :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],[] :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_:_ :: [Int]),(x :: Int,id _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,y :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,1 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id x :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id 0 :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,id (id _) :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,negate _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,abs _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,_ + _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,head _ :: Int)],x :: Int)
+(head (x:xs) :: Int,[(xs :: [Int],_ :: [Int]),(x :: Int,ord _ :: Int)],x :: Int)
+(not (not p) :: Bool,[(p :: Bool,q :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not p :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not False :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not True :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,not (not _) :: Bool)],p :: Bool)
+(not (not p) :: Bool,[(p :: Bool,_ || _ :: Bool)],p :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,_ :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,p :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,False :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,True :: Bool)],not p && not q :: Bool)
+(not (p || q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not _ :: Bool)],not p && not q :: Bool)
+(not (p && q) :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ :: Bool)],not p || not q :: Bool)
+(not (odd x) :: Bool,[(x :: Int,_ :: Int)],even x :: Bool)
+(not (even x) :: Bool,[(x :: Int,_ :: Int)],odd x :: Bool)
+(p || q :: Bool,[(q :: Bool,q :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not p :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not False :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not True :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not (not _) :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ || _ :: Bool),(p :: Bool,_ :: Bool)],q || p :: Bool)
+(p || p :: Bool,[(p :: Bool,p :: Bool)],p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || p :: Bool,[(p :: Bool,False :: Bool)],p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || p :: Bool,[(p :: Bool,True :: Bool)],p :: Bool)
+(p || q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,not _ :: Bool)],q || p :: Bool)
+(p || p :: Bool,[(p :: Bool,not _ :: Bool)],p :: Bool)
+(p && q :: Bool,[(q :: Bool,p :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,False :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,True :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,not _ :: Bool),(p :: Bool,_ :: Bool)],q && p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,q :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not p :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not False :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not True :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not (not _) :: Bool)],q || p :: Bool)
+(p || q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,_ || _ :: Bool)],q || p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,p :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,False :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,True :: Bool)],q && p :: Bool)
+(p && q :: Bool,[(q :: Bool,_ :: Bool),(p :: Bool,not _ :: Bool)],q && p :: Bool)
+(tail (x:xs) :: [Int],[(xs :: [Int],xs :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],[] :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_:_ :: [Int]),(x :: Int,_ :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,x :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,0 :: Int)],xs :: [Int])
+(tail (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,id _ :: Int)],xs :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],xs :: [Int])],xs :: [Int])
+([] ++ xs :: [Int],[(xs :: [Int],xs :: [Int])],xs :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],[] :: [Int])],xs :: [Int])
+([] ++ xs :: [Int],[(xs :: [Int],_:_ :: [Int])],xs :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],xs :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+(xs ++ [] :: [Int],[(xs :: [Int],_:_ :: [Int])],xs :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_:_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],xs :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],[] :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_:_ :: [Int]),(x :: Int,_ :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,x :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,0 :: Int)],x:(xs ++ ys) :: [Int])
+((x:xs) ++ ys :: [Int],[(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int]),(x :: Int,id _ :: Int)],x:(xs ++ ys) :: [Int])
+((xs ++ ys) ++ zs :: [Int],[(zs :: [Int],_ :: [Int]),(ys :: [Int],_ :: [Int]),(xs :: [Int],_ :: [Int])],xs ++ (ys ++ zs) :: [Int])
+(sort (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],insert x (sort xs) :: [Int])
+(insert x [] :: [Int],[(x :: Int,_ :: Int)],[x] :: [Int])
+(insert x (x:xs) :: [Int],[(xs :: [Int],_ :: [Int]),(x :: Int,_ :: Int)],x:x:xs :: [Int])
+(id x :: Int,[(x :: Int,y' :: Int)],x :: Int)
+(id x :: Int,[(x :: Int,-2 :: Int)],x :: Int)
+(f (g x) :: Int,[(x :: Int,x' :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,2 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id z :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (-1) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id y) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id 1) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (id x)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (id 0)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (id (id _))) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (negate _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (abs _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (_ + _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (head _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (ord _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (negate x) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (negate 0) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (negate (id _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (abs x) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (abs 0) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (abs (id _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (_ + x) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (_ + 0) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (_ + id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (x + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (0 + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _ + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (_ * _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (f _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (head xs) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (head []) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (head (_:_)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (ord c) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (ord 'a') :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate 1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (id x) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (id 0) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (id (id _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (negate _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (abs _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (_ + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (head _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (ord _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs 1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (id x) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (id 0) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (id (id _)) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (negate _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (abs _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (_ + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (head _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (ord _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + y :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + 1 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + id x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + id 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + id (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + negate _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + abs _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + (_ + _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + head _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + ord _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x + x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x + 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x + id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 + x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 + 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 + id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ + x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ + 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ + id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ * x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ * 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ * id _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,f x :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,f 0 :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,f (id _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,y + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,1 + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id x + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 0 + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id _) + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate _ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs _ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,(_ + _) + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head _ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord _ + _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x * _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 * _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ * _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,g _ :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head ys :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head [0] :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (_:xs) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head [_] :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (_:_:_) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (x:_) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (0:_) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (id _:_) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (tail _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (_ ++ _) :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord d :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord ' ' :: Int),(g :: Int -> Int,id :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,z :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,-1 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id y :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 1 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id x) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id 0) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (id _)) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (negate _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (abs _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (_ + _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (head _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (ord _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate 0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,negate (id _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs 0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,abs (id _) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + x :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + 0 :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ + id _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,x + _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,0 + _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id _ + _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,_ * _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,f _ :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head xs :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head [] :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,head (_:_) :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord c :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,ord 'a' :: Int),(g :: Int -> Int,negate :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,z :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,-1 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id y :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id 1 :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id x) :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id 0) :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+(f (g x) :: Int,[(x :: Int,id (id (id _)) :: Int),(g :: Int -> Int,abs :: Int -> Int),(f :: Int -> Int,id :: Int -> Int)],(f . g) x :: Int)
+
+True
diff --git a/test/triexpr.hs b/test/triexpr.hs
new file mode 100644
--- /dev/null
+++ b/test/triexpr.hs
@@ -0,0 +1,64 @@
+import Test
+import Data.Express.Triexpr (Triexpr)
+import qualified Data.Express.Triexpr as T
+
+
+trie :: Triexpr Expr
+trie  =  T.fromList allRules
+
+
+main :: IO ()
+main  =  mainTest tests 10000
+
+
+tests :: Int -> [Bool]
+tests n =
+  [ True
+
+  , length allRules == 99
+  , all isWellTyped $ map fst allRules
+  , all isWellTyped $ map snd allRules
+
+  , T.lookup zero  trie == []
+  , T.lookup one   trie == []
+  , T.lookup two   trie == []
+  , T.lookup false trie == []
+  , T.lookup true  trie == []
+
+  , T.lookup (one -+- two) trie
+    == [ (xx -+- yy, [(yy, two), (xx, one)], yy -+- xx)
+       ]
+
+  , T.lookup ((one -+- two) -+- three) trie
+    == [ (xx -+- yy, [(yy, three), (xx, one -+- two)], yy -+- xx)
+       , ((xx -+- yy) -+- zz, [(zz, three), (yy, two), (xx, one)], xx -+- (yy -+- zz))
+       ]
+
+  , T.lookup ((false -&&- false) -&&- true) trie
+    == [ (pp -&&- qq, [(qq,true),(pp,false -&&- false)], qq -&&- pp)
+       , (pp -&&- true, [(pp,false -&&- false)], pp)
+       , ((pp -&&- qq) -&&- rr, [(rr,true),(qq,false),(pp,false)], pp -&&- (qq -&&- rr))
+       ]
+
+  , T.lookup (not' true) trie
+    == [ (not' true, [], false) ]
+
+  , T.lookup (true -||- true) trie
+    == [ (pp -||- pp, [(pp,true)], pp)
+       , (pp -||- qq, [(qq,true),(pp,true)], qq -||- pp)
+       , (pp -||- true, [(pp,true)], true)
+       , (true -||- pp, [(pp,true)], true)
+       ]
+
+  , holds n $ \ees -> (sort . T.toList $ T.fromList ees) == sort (ees :: [(Expr,Int)])
+  , holds n $ \ees -> (sort . T.toList $ T.fromList ees) == sort (ees :: [(Expr,Expr)])
+
+  , holds n $ \e ees -> [(e1,ms,e2 :: Expr) | (e1,e2) <- ees, ms <- maybeToList (e `match` e1)]
+                     =$ sort $= T.lookup e (T.fromList ees)
+
+  , holds n $ \e eus -> [(e1,ms,()) | (e1,()) <- sort eus, ms <- maybeToList (e `match` e1)]
+                     == (T.lookup e (T.fromList eus))
+
+  , holds n $ \e -> [(e1,ms,e2) | (e1,e2) <- allRules, ms <- maybeToList (e `match` e1)]
+                 =$ sort $= T.lookup e trie
+  ]
