----------------------------------------------------------------------------- -- | -- Module : Data.Packed.Static.Internal.Vector -- Copyright : (c) Reiner Pope 2008 -- License : GPL-style -- -- Maintainer : Reiner Pope <reiner.pope@gmail.com> -- Stability : experimental -- Portability : portable -- -- Vector newtype definition. -- ----------------------------------------------------------------------------- module Data.Packed.Static.Internal.Vector( Vector(..), ) where import qualified Numeric.LinearAlgebra as H -- | A vector with elements of type @t@ and length @n@. -- The type @n@ encodes the vector's length, and will -- usually either be 'Unknown' or will satisfy 'PositiveT'. -- -- Operations which return vectors of length 'Unknown' -- will return vectors whose lengths are determined -- at runtime. All operations which mention 'Unknown' -- lengths will have names ending in an uppercase U, -- for example 'fromListU', 'subVectorU'. -- -- The use of 'Unknown' facilitates manipulation -- of dynamically-lengthed vectors without -- using continuations for each operation, since -- most operations work equally well for lengthed -- as well as unlengthed vectors. When vectors -- of 'Unknown' length are used, runtime length -- mismatches may arise, and the system is as safe -- as hmatrix. -- -- When the length of every vector is known, if -- the code typechecks, then there will be -- no runtime vector length mismatches. Equivalently, -- there will be no runtime vector length mismatches -- if: -- -- * no unsafe functions are used; and -- -- * no functions mentioning 'Unknown' are used, i.e. no functions with suffix U are used. newtype Vector n t = Vector { unVector :: H.Vector t }