module Data.Yarr.Utils.FixedVector.VecTupleInstances where
import Data.Vector.Fixed
import Data.Yarr.Utils.FixedVector.Arity
import Data.Yarr.Utils.FixedVector.VecTuple
#define DERIV(n,clas) deriving instance clas e => clas (VecTuple (n) e)
#define VEC_TUPLE_INST(N,con,tup) \
makeVecTupleInstance [t|N|] (undefined :: N); \
DERIV(N, Eq); DERIV(N, Ord); DERIV(N, Bounded); \
DERIV(N, Read); DERIV(N, Show)
VEC_TUPLE_INST(N2,VT_2,(e, e))
VEC_TUPLE_INST(N3,VT_3,(e, e, e))
VEC_TUPLE_INST(N4,VT_4,(e, e, e, e))
VEC_TUPLE_INST(N5,VT_5,(e, e, e, e, e))
VEC_TUPLE_INST(N6,VT_6,(e, e, e, e, e, e))
VEC_TUPLE_INST(N7,VT_7,(e, e, e, e, e, e, e))
VEC_TUPLE_INST(N8,VT_8,(e, e, e, e, e, e, e, e))