-- | Concatenation of tuples. Requires MPTCs and FunDeps. {-# OPTIONS_GHC -cpp -pgmPcpphs -optP--cpp -optP-ansi -optP--hashes #-} {-# LANGUAGE CPP, MultiParamTypeClasses, FunctionalDependencies #-} module Data.Tup.Tup.Concat where -------------------------------------------------------------------------------- import Data.Tup.Tup.Class import qualified Data.Tup.Tup.Lazy as L import qualified Data.Tup.Tup.Strict as S -------------------------------------------------------------------------------- class (Tup f, Tup g, Tup h) => TupConcat f g h | f g -> h where tupConcat :: f a -> g a -> h a tupConcat x y = tupFromList (tupToList x ++ tupToList y) -------------------------------------------------------------------------------- #define TUPCONCAT(A,B,C) \ instance TupConcat L.Tup##A L.Tup##B L.Tup##C ; \ instance TupConcat S.Tup##A S.Tup##B S.Tup##C -------------------------------------------------------------------------------- TUPCONCAT(0,0,0) TUPCONCAT(0,1,1) TUPCONCAT(0,2,2) TUPCONCAT(0,3,3) TUPCONCAT(0,4,4) TUPCONCAT(0,5,5) TUPCONCAT(0,6,6) TUPCONCAT(0,7,7) TUPCONCAT(0,8,8) TUPCONCAT(0,9,9) TUPCONCAT(1,0,1) TUPCONCAT(1,1,2) TUPCONCAT(1,2,3) TUPCONCAT(1,3,4) TUPCONCAT(1,4,5) TUPCONCAT(1,5,6) TUPCONCAT(1,6,7) TUPCONCAT(1,7,8) TUPCONCAT(1,8,9) TUPCONCAT(2,0,2) TUPCONCAT(2,1,3) TUPCONCAT(2,2,4) TUPCONCAT(2,3,5) TUPCONCAT(2,4,6) TUPCONCAT(2,5,7) TUPCONCAT(2,6,8) TUPCONCAT(2,7,9) TUPCONCAT(3,0,3) TUPCONCAT(3,1,4) TUPCONCAT(3,2,5) TUPCONCAT(3,3,6) TUPCONCAT(3,4,7) TUPCONCAT(3,5,8) TUPCONCAT(3,6,9) TUPCONCAT(4,0,4) TUPCONCAT(4,1,5) TUPCONCAT(4,2,6) TUPCONCAT(4,3,7) TUPCONCAT(4,4,8) TUPCONCAT(4,5,9) TUPCONCAT(5,0,5) TUPCONCAT(5,1,6) TUPCONCAT(5,2,7) TUPCONCAT(5,3,8) TUPCONCAT(5,4,9) TUPCONCAT(6,0,6) TUPCONCAT(6,1,7) TUPCONCAT(6,2,8) TUPCONCAT(6,3,9) TUPCONCAT(7,0,7) TUPCONCAT(7,1,8) TUPCONCAT(7,2,9) TUPCONCAT(8,0,8) TUPCONCAT(8,1,9) TUPCONCAT(9,0,9) --------------------------------------------------------------------------------