{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE DeriveFoldable #-}

{-# OPTIONS_GHC -funbox-strict-fields #-}

-- | Strict vectors of doubles to length == 30
module Data.RingBuffer.SVec

where

import Prelude hiding (length)
import Data.RingBuffer.Class
import Data.RingBuffer.TGen
import Language.Haskell.TH (Type(..),mkName, TyVarBndr(..))

import Data.Foldable

$(mkVecFromTo 1 30 (ConT ''Double) [] "")

-- | Generate a 32-element polymorphic vector, maybe I should just use
-- Data.Vector?
$(mkVecFromTo 32 32 (VarT (mkName "a")) [PlainTV (mkName "a")] "Vec")

deriving instance Show a => Show (TVec32 a)
deriving instance Eq a => Eq (TVec32 a)
deriving instance Ord a => Ord (TVec32 a)
deriving instance Foldable (TVec32)