{-# LANGUAGE TemplateHaskell #-}

-- | Provides the infrastructure that is common to all types of parameterized
-- vectors.
module Data.Params.Vector
    (

    -- * Type lenses
    _len
    , _elem

    -- * Classes
    , Param_len (..)
    , Param_elem (..)
    , Def (..)

    )
    where

import Language.Haskell.TH hiding (reify)
import Language.Haskell.TH.Syntax hiding (reify)
import qualified Language.Haskell.TH as TH

import Data.Params

mkParamClass_Config "len" (ConT ''Int)
mkParamClass_Star "elem" 
mkReifiableConstraint "len"
mkTypeLens_Config "len"
mkTypeLens_Star "elem"
mkHasDictionary_Star "elem"
mkHasDictionary_Config "len" (ConT ''Int)