cmptype 0.1.0.1 → 0.2.0.0
raw patch · 5 files changed
+154/−9 lines, 5 filesdep ~magic-tyfamsPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: magic-tyfams
API changes (from Hackage documentation)
Files
- ChangeLog.md +8/−2
- cmptype.cabal +4/−4
- src/Type/Compare.hs +120/−1
- src/Type/Compare/Plugin.hs +1/−1
- test/ShouldTypecheck.hs +21/−1
ChangeLog.md view
@@ -1,11 +1,17 @@ # Changelog for type-sets +## 0.2.0.0 --- 2019-08-11++- Changed the behavior of `CmpType` on type-level tuples to be lexicographic+- Made usages of `CmpType` produce a compile-time error when the plugin isn't+ enabled+ ## 0.1.0.1 --- 2019-08-06 -Fixed a bug in the cabal metadata+- Fixed a bug in the cabal metadata ## 0.1.0.0 --- 2019-08-06 -Initial release!+- Initial release! ## Unreleased changes
cmptype.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 3b4e66bcfdf70bc5d83e2a5accad1ca013b0205b5677de6a796ed6a3983bec67+-- hash: 1ca86ccc0566be6d8def938f6085c7c5062daa481324ac214e19456e67d4b211 name: cmptype-version: 0.1.0.1+version: 0.2.0.0 synopsis: Compare types of any kinds description: Please see the README on GitHub at <https://github.com/isovector/type-sets/tree/master/cmptype#readme> category: Type@@ -39,7 +39,7 @@ build-depends: base >=4.7 && <5 , ghc >=8.6.3 && <8.8- , magic-tyfams >=0.1.0.0 && <0.2+ , magic-tyfams >=0.1.1.0 && <0.2 default-language: Haskell2010 test-suite test@@ -56,6 +56,6 @@ base >=4.7 && <5 , cmptype , ghc >=8.6.3 && <8.8- , magic-tyfams >=0.1.0.0 && <0.2+ , magic-tyfams >=0.1.1.0 && <0.2 , should-not-typecheck default-language: Haskell2010
src/Type/Compare.hs view
@@ -1,12 +1,20 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} -module Type.Compare where+module Type.Compare+ ( CmpType+ ) where import GHC.TypeLits+import Plugin.MagicTyFam (WhenStuck) ++import Data.Foldable+import Data.List+ ------------------------------------------------------------------------------ -- | Compare two types. For 'Nat's and 'Symbol's, this uses the built-in -- comparisons. For all other types, "Type.Compare.Plugin" will solve it.@@ -17,4 +25,115 @@ CmpType a a = 'EQ CmpType (a :: Nat) b = CmpNat a b CmpType (a :: Symbol) b = CmpSymbol a b++ -- These instances are generated via '_generateCmpType'+ CmpType '(a1, a2) '(b1, b2) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) ('EQ))+ CmpType '(a1, a2, a3) '(b1, b2, b3) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) ('EQ)))+ CmpType '(a1, a2, a3, a4) '(b1, b2, b3, b4) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) ('EQ))))+ CmpType '(a1, a2, a3, a4, a5) '(b1, b2, b3, b4, b5) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) ('EQ)))))+ CmpType '(a1, a2, a3, a4, a5, a6) '(b1, b2, b3, b4, b5, b6) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) ('EQ))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7) '(b1, b2, b3, b4, b5, b6, b7) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) ('EQ)))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8) '(b1, b2, b3, b4, b5, b6, b7, b8) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) ('EQ))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9) '(b1, b2, b3, b4, b5, b6, b7, b8, b9) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) ('EQ)))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) ('EQ))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) ('EQ)))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) ('EQ))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) ('EQ)))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) ('EQ))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) ('EQ)))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) ('EQ))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) ('EQ)))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) ('EQ))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) ('EQ)))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) ('EQ))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) ('EQ)))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) ('EQ))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) ('EQ)))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) ('EQ))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) ('EQ)))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) ('EQ))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) ('EQ)))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) ('EQ))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) ('EQ)))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) ('EQ))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) ('EQ)))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) ('EQ))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) ('EQ)))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) ('EQ))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) ('EQ)))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) ('EQ))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) ('EQ)))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) ('EQ))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) ('EQ)))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) ('EQ))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) ('EQ)))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) ('EQ))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) ('EQ)))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) ('EQ))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) ('EQ)))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) ('EQ))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) (OrderingSemigroup (CmpType a62 b62) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62, b63) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) (OrderingSemigroup (CmpType a62 b62) (OrderingSemigroup (CmpType a63 b63) ('EQ)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+ CmpType '(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64) '(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62, b63, b64) = OrderingSemigroup (CmpType a1 b1) (OrderingSemigroup (CmpType a2 b2) (OrderingSemigroup (CmpType a3 b3) (OrderingSemigroup (CmpType a4 b4) (OrderingSemigroup (CmpType a5 b5) (OrderingSemigroup (CmpType a6 b6) (OrderingSemigroup (CmpType a7 b7) (OrderingSemigroup (CmpType a8 b8) (OrderingSemigroup (CmpType a9 b9) (OrderingSemigroup (CmpType a10 b10) (OrderingSemigroup (CmpType a11 b11) (OrderingSemigroup (CmpType a12 b12) (OrderingSemigroup (CmpType a13 b13) (OrderingSemigroup (CmpType a14 b14) (OrderingSemigroup (CmpType a15 b15) (OrderingSemigroup (CmpType a16 b16) (OrderingSemigroup (CmpType a17 b17) (OrderingSemigroup (CmpType a18 b18) (OrderingSemigroup (CmpType a19 b19) (OrderingSemigroup (CmpType a20 b20) (OrderingSemigroup (CmpType a21 b21) (OrderingSemigroup (CmpType a22 b22) (OrderingSemigroup (CmpType a23 b23) (OrderingSemigroup (CmpType a24 b24) (OrderingSemigroup (CmpType a25 b25) (OrderingSemigroup (CmpType a26 b26) (OrderingSemigroup (CmpType a27 b27) (OrderingSemigroup (CmpType a28 b28) (OrderingSemigroup (CmpType a29 b29) (OrderingSemigroup (CmpType a30 b30) (OrderingSemigroup (CmpType a31 b31) (OrderingSemigroup (CmpType a32 b32) (OrderingSemigroup (CmpType a33 b33) (OrderingSemigroup (CmpType a34 b34) (OrderingSemigroup (CmpType a35 b35) (OrderingSemigroup (CmpType a36 b36) (OrderingSemigroup (CmpType a37 b37) (OrderingSemigroup (CmpType a38 b38) (OrderingSemigroup (CmpType a39 b39) (OrderingSemigroup (CmpType a40 b40) (OrderingSemigroup (CmpType a41 b41) (OrderingSemigroup (CmpType a42 b42) (OrderingSemigroup (CmpType a43 b43) (OrderingSemigroup (CmpType a44 b44) (OrderingSemigroup (CmpType a45 b45) (OrderingSemigroup (CmpType a46 b46) (OrderingSemigroup (CmpType a47 b47) (OrderingSemigroup (CmpType a48 b48) (OrderingSemigroup (CmpType a49 b49) (OrderingSemigroup (CmpType a50 b50) (OrderingSemigroup (CmpType a51 b51) (OrderingSemigroup (CmpType a52 b52) (OrderingSemigroup (CmpType a53 b53) (OrderingSemigroup (CmpType a54 b54) (OrderingSemigroup (CmpType a55 b55) (OrderingSemigroup (CmpType a56 b56) (OrderingSemigroup (CmpType a57 b57) (OrderingSemigroup (CmpType a58 b58) (OrderingSemigroup (CmpType a59 b59) (OrderingSemigroup (CmpType a60 b60) (OrderingSemigroup (CmpType a61 b61) (OrderingSemigroup (CmpType a62 b62) (OrderingSemigroup (CmpType a63 b63) (OrderingSemigroup (CmpType a64 b64) ('EQ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))++ CmpType a b = WhenStuck (CmpTypeImpl a b)+ (TypeError ('Text "The CmpType plugin isn't enabled."+ ':$$: 'Text " Fix: enable '-fplugin=Type.Compare.Plugin'"))++type family OrderingSemigroup (a :: Ordering) (b :: Ordering) :: Ordering where+ OrderingSemigroup 'EQ b = b+ OrderingSemigroup a _ = a++type family CmpTypeImpl (a :: k) (b :: k) :: Ordering where++++------------------------------------------------------------------------------+-- | Constructs the tuple instances for CmpType+_generateCmpType :: IO ()+_generateCmpType = Data.Foldable.for_ [2..64] $ \t -> do+ let ns = fmap show [1 .. t]+ as = fmap ('a' :) ns+ bs = fmap ('b' :) ns+ tupled zs =+ mconcat+ [ "'("+ , intercalate ", " zs+ , ")"+ ]+ rhs =+ foldr (\(a,b) z ->+ mconcat+ [ "OrderingSemigroup (CmpType "+ , a+ , " "+ , b+ , ") ("+ , z+ , ")"+ ]) "'EQ" (zip as bs)+ lhs =+ mconcat+ [ " CmpType "+ , tupled as+ , " "+ , tupled bs+ , " = "+ ]+ putStrLn $ mappend lhs rhs
src/Type/Compare/Plugin.hs view
@@ -17,7 +17,7 @@ -- | This plugin automagically solves 'Type.Compare.CmpType'. Enable the GHC -- flag @-fplugin=Type.Compare.Plugin@ in order to use it. plugin :: Plugin-plugin = magicTyFamPlugin "cmptype" "Type.Compare" "CmpType" $ \[_, a, b] ->+plugin = magicTyFamPlugin "cmptype" "Type.Compare" "CmpTypeImpl" $ \[_, a, b] -> fmap promoteOrdering $ liftA2 compare (hash a) (hash b)
test/ShouldTypecheck.hs view
@@ -2,7 +2,7 @@ {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeFamilies #-} -{-# OPTIONS_GHC -fplugin=Type.Compare.Plugin #-}+{-# OPTIONS_GHC -fplugin=Type.Compare.Plugin #-} module ShouldTypecheck where @@ -97,4 +97,24 @@ -- NOTE(sandy): I don't really understand why this one is so... testType17 :: Proxy (CmpType '[Int, Bool] '[]) -> Proxy 'LT testType17 = id++testType18 :: Proxy (CmpType '(String, Bool, '(Int, Bool, String), Int)+ '(String, Bool, '(Int, Char, String), Int)) -> Proxy 'LT+testType18 = id++testType19 :: Proxy (CmpType '(String, Bool, '(Int, Char, String), Int)+ '(String, Bool, '(Int, Bool, String), Int)) -> Proxy 'GT+testType19 = id++testType20 :: Proxy (CmpType '(String, Bool, '(Int, Char, String), Int)+ '(String, Bool, '(Int, Char, String), Int)) -> Proxy 'EQ+testType20 = id++testType21 :: Proxy (CmpType '(String, Bool, '(Int, "a", String), Int)+ '(String, Bool, '(Int, "b", String), Int)) -> Proxy 'LT+testType21 = id++testType22 :: Proxy (CmpType '(String, Bool, '(Int, "b", String), Int)+ '(String, Bool, '(Int, "b", String), Int)) -> Proxy 'EQ+testType22 = id