From dc53b597a0606da0513ee2b822c0ebe055834c0b Mon Sep 17 00:00:00 2001 From: Martijn Bastiaan Date: Fri, 28 Jun 2019 21:35:05 +0200 Subject: [PATCH] Reliably handle hidden resets in 'withReset' and siblings Before this commit, 'withReset' would behave very surprisingly in combination with 'simulate' or 'sample': >>> rst0 = fromList [True, True, False, False, True, True] >>> rst1 = unsafeFromHighPolarity @System rst0 >>> sig = withReset rst1 (register 'a' (pure 'b')) >>> sampleN @System 6 sig "aabbbb" Even though `rst1` is asserted on the 5th and 6th clock cycle, we never see the reset value, `a`, after the initial two. But even the first two `a`s are suspicious. We'd expect to see three `a`s (one powerup, two reset) instead! It seems that 'sampleN' is generating a default reset value and using that one. Indeed, when we inspect the type of `sig` we see it is as we never applied the reset at all: >>> :t sig (HiddenReset dom, ..) => Signal dom Char To figure out what's going on, let's inspect the type signature of 'withReset': withReset :: KnownDomain dom => Reset dom -> (HiddenReset dom => r) -> r It turns out that GHC is perfectly happy to /only/ resolve `r` when given the following as its second argument: reg :: (HiddenReset dom, ..) => Signal dom Char reg = register 'a' (pure 'b') i.e., `withReset` would actually resolve to something like: withReset* :: forall dom r . KnownDomain dom => Reset dom -> (HiddenReset dom => ((HiddenReset dom0, ..) => Signal dom0 Char)) -> ((HiddenReset dom0, ..) => Signal dom0 Char) thus completely discarding its given reset, and leaving it up to `sample` to actually generate the reset. The reason GHC is free to do this, is that nothing in `r` ties `dom` to the "dom inside `r`" simply because it's not mentioned in the type signature. To solve this, this commit introduces a typeclass `HasDomain` that forces a link between the given `dom` and the "dom inside `r`". The type signature of 'withReset' changes only slightly: withReset :: (KnownDomain dom, HasDomain r, GetDomain r ~ dom) => Reset dom -> (HiddenReset dom => r) -> r With this patch, 'withReset' behaves exactly like we expect it would: >>> rst0 = fromList [True, True, False, False, True, True] >>> rst1 = unsafeFromHighPolarity rst0 >>> sig = withReset rst1 (register 'a' (pure 'b')) >>> sampleN @System 6 sig "aaabaa" We haven't got a good answer for bundled types yet. _Ideally_ we'd be able to write something like instance HasDomain (Unbundled dom a) where type GetDomain (Unbundled dom a) = dom but we can't, as _Unbundled_ in itself is an associated type. To those wondering why this issue didn't rear its head the moment we introduced hidden clocks: this issue has only been introduced a few days ago after merging PR #527 (configurable initial register values). Before that PR, only a single hidden clock/register could be used - a fact that GHC allowed to resolve the constraint early. Co-Authored-By: Leon Schoorl --- clash-prelude/clash-prelude.cabal | 1 + clash-prelude/src/Clash/Class/HasDomain.hs | 216 ++++++++++++++++++ .../src/Clash/Class/HasDomain/CodeGen.hs | 22 ++ clash-prelude/src/Clash/Signal.hs | 91 ++++---- 4 files changed, 283 insertions(+), 47 deletions(-) create mode 100644 clash-prelude/src/Clash/Class/HasDomain.hs create mode 100644 clash-prelude/src/Clash/Class/HasDomain/CodeGen.hs diff --git a/clash-prelude/clash-prelude.cabal b/clash-prelude/clash-prelude.cabal index b72b75468b..118d84c14c 100644 --- a/clash-prelude/clash-prelude.cabal +++ b/clash-prelude/clash-prelude.cabal @@ -113,6 +113,7 @@ Library Clash.Class.BitPack Clash.Class.Exp + Clash.Class.HasDomain Clash.Class.Num Clash.Class.Resize diff --git a/clash-prelude/src/Clash/Class/HasDomain.hs b/clash-prelude/src/Clash/Class/HasDomain.hs new file mode 100644 index 0000000000..9c00ddc508 --- /dev/null +++ b/clash-prelude/src/Clash/Class/HasDomain.hs @@ -0,0 +1,216 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} + +module Clash.Class.HasDomain (HasDomain(..)) where + +import Clash.Sized.Vector (Vec) +import Clash.Sized.RTree (RTree) +import Clash.Signal.Internal (Signal, Domain) +import Clash.Signal.Delayed.Internal (DSignal) + +class HasDomain r where + type GetDomain r :: Domain + +instance HasDomain (DSignal dom delay a) where + type GetDomain (DSignal dom delay a) = dom + +instance HasDomain (Signal dom a) where + type GetDomain (Signal dom a) = dom + +instance HasDomain a => HasDomain (a -> b) where + type GetDomain (a -> b) = GetDomain a + +instance HasDomain a => HasDomain (Vec n a) where + type GetDomain (Vec n a) = GetDomain a + +instance HasDomain a => HasDomain (RTree d a) where + type GetDomain (RTree d a) = GetDomain a + +-- Tuple instances. Generated with 'HasDomain/CodeGen.hs". +instance (HasDomain a1, HasDomain a2, GetDomain a1 ~ GetDomain a2) => HasDomain (a1, a2) where + type GetDomain (a1, a2) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3) => HasDomain (a1, a2, a3) where + type GetDomain (a1, a2, a3) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4) => HasDomain (a1, a2, a3, a4) where + type GetDomain (a1, a2, a3, a4) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5) => HasDomain (a1, a2, a3, a4, a5) where + type GetDomain (a1, a2, a3, a4, a5) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6) => HasDomain (a1, a2, a3, a4, a5, a6) where + type GetDomain (a1, a2, a3, a4, a5, a6) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7) => HasDomain (a1, a2, a3, a4, a5, a6, a7) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24) => HasDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) where + type GetDomain (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, HasDomain a58, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57, GetDomain a57 ~ GetDomain a58) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, HasDomain a58, HasDomain a59, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57, GetDomain a57 ~ GetDomain a58, GetDomain a58 ~ GetDomain a59) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, HasDomain a58, HasDomain a59, HasDomain a60, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57, GetDomain a57 ~ GetDomain a58, GetDomain a58 ~ GetDomain a59, GetDomain a59 ~ GetDomain a60) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, HasDomain a58, HasDomain a59, HasDomain a60, HasDomain a61, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57, GetDomain a57 ~ GetDomain a58, GetDomain a58 ~ GetDomain a59, GetDomain a59 ~ GetDomain a60, GetDomain a60 ~ GetDomain a61) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, HasDomain a58, HasDomain a59, HasDomain a60, HasDomain a61, HasDomain a62, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57, GetDomain a57 ~ GetDomain a58, GetDomain a58 ~ GetDomain a59, GetDomain a59 ~ GetDomain a60, GetDomain a60 ~ GetDomain a61, GetDomain a61 ~ GetDomain a62) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + +instance (HasDomain a1, HasDomain a2, HasDomain a3, HasDomain a4, HasDomain a5, HasDomain a6, HasDomain a7, HasDomain a8, HasDomain a9, HasDomain a10, HasDomain a11, HasDomain a12, HasDomain a13, HasDomain a14, HasDomain a15, HasDomain a16, HasDomain a17, HasDomain a18, HasDomain a19, HasDomain a20, HasDomain a21, HasDomain a22, HasDomain a23, HasDomain a24, HasDomain a25, HasDomain a26, HasDomain a27, HasDomain a28, HasDomain a29, HasDomain a30, HasDomain a31, HasDomain a32, HasDomain a33, HasDomain a34, HasDomain a35, HasDomain a36, HasDomain a37, HasDomain a38, HasDomain a39, HasDomain a40, HasDomain a41, HasDomain a42, HasDomain a43, HasDomain a44, HasDomain a45, HasDomain a46, HasDomain a47, HasDomain a48, HasDomain a49, HasDomain a50, HasDomain a51, HasDomain a52, HasDomain a53, HasDomain a54, HasDomain a55, HasDomain a56, HasDomain a57, HasDomain a58, HasDomain a59, HasDomain a60, HasDomain a61, HasDomain a62, HasDomain a63, GetDomain a1 ~ GetDomain a2, GetDomain a2 ~ GetDomain a3, GetDomain a3 ~ GetDomain a4, GetDomain a4 ~ GetDomain a5, GetDomain a5 ~ GetDomain a6, GetDomain a6 ~ GetDomain a7, GetDomain a7 ~ GetDomain a8, GetDomain a8 ~ GetDomain a9, GetDomain a9 ~ GetDomain a10, GetDomain a10 ~ GetDomain a11, GetDomain a11 ~ GetDomain a12, GetDomain a12 ~ GetDomain a13, GetDomain a13 ~ GetDomain a14, GetDomain a14 ~ GetDomain a15, GetDomain a15 ~ GetDomain a16, GetDomain a16 ~ GetDomain a17, GetDomain a17 ~ GetDomain a18, GetDomain a18 ~ GetDomain a19, GetDomain a19 ~ GetDomain a20, GetDomain a20 ~ GetDomain a21, GetDomain a21 ~ GetDomain a22, GetDomain a22 ~ GetDomain a23, GetDomain a23 ~ GetDomain a24, GetDomain a24 ~ GetDomain a25, GetDomain a25 ~ GetDomain a26, GetDomain a26 ~ GetDomain a27, GetDomain a27 ~ GetDomain a28, GetDomain a28 ~ GetDomain a29, GetDomain a29 ~ GetDomain a30, GetDomain a30 ~ GetDomain a31, GetDomain a31 ~ GetDomain a32, GetDomain a32 ~ GetDomain a33, GetDomain a33 ~ GetDomain a34, GetDomain a34 ~ GetDomain a35, GetDomain a35 ~ GetDomain a36, GetDomain a36 ~ GetDomain a37, GetDomain a37 ~ GetDomain a38, GetDomain a38 ~ GetDomain a39, GetDomain a39 ~ GetDomain a40, GetDomain a40 ~ GetDomain a41, GetDomain a41 ~ GetDomain a42, GetDomain a42 ~ GetDomain a43, GetDomain a43 ~ GetDomain a44, GetDomain a44 ~ GetDomain a45, GetDomain a45 ~ GetDomain a46, GetDomain a46 ~ GetDomain a47, GetDomain a47 ~ GetDomain a48, GetDomain a48 ~ GetDomain a49, GetDomain a49 ~ GetDomain a50, GetDomain a50 ~ GetDomain a51, GetDomain a51 ~ GetDomain a52, GetDomain a52 ~ GetDomain a53, GetDomain a53 ~ GetDomain a54, GetDomain a54 ~ GetDomain a55, GetDomain a55 ~ GetDomain a56, GetDomain a56 ~ GetDomain a57, GetDomain a57 ~ GetDomain a58, GetDomain a58 ~ GetDomain a59, GetDomain a59 ~ GetDomain a60, GetDomain a60 ~ GetDomain a61, GetDomain a61 ~ GetDomain a62, GetDomain a62 ~ GetDomain a63) => HasDomain (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) where + type GetDomain (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) = GetDomain a1 + + diff --git a/clash-prelude/src/Clash/Class/HasDomain/CodeGen.hs b/clash-prelude/src/Clash/Class/HasDomain/CodeGen.hs new file mode 100644 index 0000000000..af23d29c8f --- /dev/null +++ b/clash-prelude/src/Clash/Class/HasDomain/CodeGen.hs @@ -0,0 +1,22 @@ +import Data.List (intercalate) + +commas :: [String] -> String +commas = intercalate ", " + +domainEq :: String -> String -> String +domainEq a b = "GetDomain " ++ a ++ " ~ " ++ "GetDomain " ++ b + +inst :: Integer -> IO () +inst n = do + putStrLn $ "instance (" ++ constraints ++ ") => HasDomain (" ++ tup ++ ") where" + putStrLn $ " type GetDomain (" ++ tup ++ ") = GetDomain a1" + putStrLn "" + where + tup = commas vars + hasdomains = commas (map ("HasDomain "++) vars) + getdomains = commas (zipWith domainEq vars (tail vars)) + constraints = hasdomains ++ ", " ++ getdomains + vars = ['a' : show n | n <- [1..n]] + +main :: IO () +main = mapM_ inst [2..63] diff --git a/clash-prelude/src/Clash/Signal.hs b/clash-prelude/src/Clash/Signal.hs index 716c730014..b200939e5c 100644 --- a/clash-prelude/src/Clash/Signal.hs +++ b/clash-prelude/src/Clash/Signal.hs @@ -77,8 +77,6 @@ Check out 'IntelSystem' and 'XilinxSystem' too! {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} -{-# LANGUAGE FlexibleInstances #-} - {-# LANGUAGE Trustworthy #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} @@ -217,6 +215,7 @@ import Data.Maybe (isJust, fromJust) import Prelude import Test.QuickCheck (Property, property) +import Clash.Class.HasDomain (HasDomain, GetDomain) import qualified Clash.Explicit.Signal as E import Clash.Explicit.Signal (System, resetSynchronizer, systemClockGen, systemResetGen, tbSystemClockGen) @@ -416,7 +415,8 @@ type SystemClockResetEnable = --