{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE Safe #-}
{-# OPTIONS_GHC -Wall -fno-warn-orphans -Werror #-}

-- |
-- Module      : Data.Tuple.Append
-- Description : A module that contains typeclasses to prepend and append items and tuples into new tuples together with the corresponding instances.
-- Maintainer  : hapytexeu+gh@gmail.com
-- Stability   : experimental
-- Portability : POSIX
--
-- A module that contains typeclasses to prepend and append items and tuples into new tuples together with the corresponding instances.
module Data.Tuple.Append
  ( -- * Add an element to a tuple
    TupleAddL ((<++)),
    TupleAddR ((++>)),

    -- * Append two tuples
    TupleAppend ((+++)),

    -- * Sequence a tuple
    SequenceTuple (sequenceTupleA, sequenceTupleA_),
  )
where

import Data.Tuple.Append.Class (SequenceTuple (sequenceTupleA, sequenceTupleA_), TupleAddL ((<++)), TupleAddR ((++>)), TupleAppend ((+++)))
import Data.Tuple.Append.TemplateHaskell (defineSequenceTupleUpTo, defineTupleAddUpto, defineTupleAppendUpto)

[defineTupleAddUpto|61|]

[defineTupleAppendUpto|19|]

[defineSequenceTupleUpTo|62|]