-- | Adaptive Tuples with strict fields and unboxed elements.  The equivalent
-- of @data ATuple1 s n = ATuple1 !n@ compiled with @-funbox-strict-fields@.
-- It is usually not necessary to import this module except to make custom
-- reification functions.

{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses, FlexibleInstances, TypeSynonymInstances, DeriveDataTypeable #-}
{-# OPTIONS_GHC -funbox-strict-fields -fno-warn-unused-binds -fno-warn-unused-matches #-}

module Data.AdaptiveTuple.Reps.Strict


import Data.AdaptiveTuple.TH
import Data.AdaptiveTuple.AdaptiveTuple
import Data.TypeLevel.Num
import Language.Haskell.TH (Strict (..))
import Control.Applicative

$(makeDatas IsStrict 20)
$(deriveInstances ''ATuple1 ''D1)
$(deriveInstances ''ATuple2 ''D2)
$(deriveInstances ''ATuple3 ''D3)
$(deriveInstances ''ATuple4 ''D4)
$(deriveInstances ''ATuple5 ''D5)
$(deriveInstances ''ATuple6 ''D6)
$(deriveInstances ''ATuple7 ''D7)
$(deriveInstances ''ATuple8 ''D8)
$(deriveInstances ''ATuple9 ''D9)
$(deriveInstances ''ATuple10 ''D10)
$(deriveInstances ''ATuple11 ''D11)
$(deriveInstances ''ATuple12 ''D12)
$(deriveInstances ''ATuple13 ''D13)
$(deriveInstances ''ATuple14 ''D14)
$(deriveInstances ''ATuple15 ''D15)
$(deriveInstances ''ATuple16 ''D16)
$(deriveInstances ''ATuple17 ''D17)
$(deriveInstances ''ATuple18 ''D18)
$(deriveInstances ''ATuple19 ''D19)
$(deriveInstances ''ATuple20 ''D20)