{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE DeriveDataTypeable         #-}
{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE KindSignatures             #-}
{-# OPTIONS_HADDOCK not-home            #-}

module Data.Vector.Generic.Mutable.Sized.Internal
  ( MVector(..)
  ) where

import GHC.Generics (Generic)
import GHC.TypeLits
import Control.DeepSeq (NFData)
import Data.Data
import Foreign.Storable

-- | A wrapper to tag mutable vectors with a type level length.
--
-- Be careful when using the constructor here to not construct sized vectors
-- which have a different length than that specified in the type parameter!
newtype MVector v (n :: Nat) s a = MVector (v s a)
  deriving ( Generic, Typeable, Data, Storable, NFData )