-- |
-- Module      : Test.FitSpec.Tuples
-- Copyright   : (c) 2015-2017 Rudy Matela
-- License     : 3-Clause BSD  (see the file LICENSE)
-- Maintainer  : Rudy Matela <rudy@matela.com.br>
--
-- ShowMutable instances: septuples up to 12-tuples
--
-- This is partly a Hack that allows those instances to be hidden from Haddock.
-- Otherwise Haddock documentation will look very ugly.
-- It also makes "Test.FitSpec.ShowMutable" more readable.
module Test.FitSpec.ShowMutable.Tuples () where

import Test.FitSpec.ShowMutable

instance (ShowMutable a, ShowMutable b, ShowMutable c, ShowMutable d,
          ShowMutable e, ShowMutable f, ShowMutable g)
      => ShowMutable (a,b,c,d,e,f,g) where
  mutantS (f,g,h,i,j,k,l) (f',g',h',i',j',k',l') = mutantSTuple
                                                    [ mutantS f f'
                                                    , mutantS g g'
                                                    , mutantS h h'
                                                    , mutantS i i'
                                                    , mutantS j j'
                                                    , mutantS k k'
                                                    , mutantS l l' ]

instance (ShowMutable a, ShowMutable b, ShowMutable c, ShowMutable d,
          ShowMutable e, ShowMutable f, ShowMutable g, ShowMutable h)
      => ShowMutable (a,b,c,d,e,f,g,h) where
  mutantS (f,g,h,i,j,k,l,m) (f',g',h',i',j',k',l',m') = mutantSTuple
                                                      [ mutantS f f'
                                                      , mutantS g g'
                                                      , mutantS h h'
                                                      , mutantS i i'
                                                      , mutantS j j'
                                                      , mutantS k k'
                                                      , mutantS l l'
                                                      , mutantS m m' ]

instance (ShowMutable a, ShowMutable b, ShowMutable c, ShowMutable d,
          ShowMutable e, ShowMutable f, ShowMutable g, ShowMutable h,
          ShowMutable i)
      => ShowMutable (a,b,c,d,e,f,g,h,i) where
  mutantS (f,g,h,i,j,k,l,m,n) (f',g',h',i',j',k',l',m',n') = mutantSTuple
    [ mutantS f f'
    , mutantS g g'
    , mutantS h h'
    , mutantS i i'
    , mutantS j j'
    , mutantS k k'
    , mutantS l l'
    , mutantS m m'
    , mutantS n n' ]

instance (ShowMutable a, ShowMutable b, ShowMutable c, ShowMutable d,
          ShowMutable e, ShowMutable f, ShowMutable g, ShowMutable h,
          ShowMutable i, ShowMutable j)
      => ShowMutable (a,b,c,d,e,f,h,g,i,j) where
  mutantS (f,g,h,i,j,k,l,m,n,o) (f',g',h',i',j',k',l',m',n',o') = mutantSTuple
    [ mutantS f f'
    , mutantS g g'
    , mutantS h h'
    , mutantS i i'
    , mutantS j j'
    , mutantS k k'
    , mutantS l l'
    , mutantS m m'
    , mutantS n n'
    , mutantS o o' ]

instance (ShowMutable a, ShowMutable b, ShowMutable c, ShowMutable d,
          ShowMutable e, ShowMutable f, ShowMutable g, ShowMutable h,
          ShowMutable i, ShowMutable j, ShowMutable k)
      => ShowMutable (a,b,c,d,e,f,g,h,i,j,k) where
  mutantS (f,g,h,i,j,k,l,m,n,o,p) (f',g',h',i',j',k',l',m',n',o',p') = mutantSTuple
    [ mutantS f f'
    , mutantS g g'
    , mutantS h h'
    , mutantS i i'
    , mutantS j j'
    , mutantS k k'
    , mutantS l l'
    , mutantS m m'
    , mutantS n n'
    , mutantS o o'
    , mutantS p p' ]

instance (ShowMutable a, ShowMutable b, ShowMutable c, ShowMutable d,
          ShowMutable e, ShowMutable f, ShowMutable g, ShowMutable h,
          ShowMutable i, ShowMutable j, ShowMutable k, ShowMutable l)
      => ShowMutable (a,b,c,d,e,f,g,h,i,j,k,l) where
  mutantS (f,g,h,i,j,k,l,m,n,o,p,q) (f',g',h',i',j',k',l',m',n',o',p',q') = mutantSTuple
    [ mutantS f f'
    , mutantS g g'
    , mutantS h h'
    , mutantS i i'
    , mutantS j j'
    , mutantS k k'
    , mutantS l l'
    , mutantS m m'
    , mutantS n n'
    , mutantS o o'
    , mutantS p p'
    , mutantS q q' ]