X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FLinear%2FVector.hs;h=9d43bfac3122e82824d6a6921b6b33d69ba821a2;hb=d8dc884aa9b16c7bbd88c4c107ddd684a339a191;hp=e4f622588bbd01ee5657465a78daf2d46aa4c7de;hpb=cc93d648089344338030a9b79cd7bea7c6e8c997;p=numerical-analysis.git diff --git a/src/Linear/Vector.hs b/src/Linear/Vector.hs index e4f6225..9d43bfa 100644 --- a/src/Linear/Vector.hs +++ b/src/Linear/Vector.hs @@ -1,31 +1,40 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} -module Linear.Vector +module Linear.Vector ( + module Data.Vector.Fixed.Boxed, + Vec1, + (!?), + delete, + element_sum ) where +import qualified Algebra.Additive as Additive ( C ) +import qualified Algebra.Ring as Ring ( C ) import Data.Vector.Fixed ( Dim, N1, - N4, - N5, S, Vector(..), fromList, - toList, - ) + toList ) import qualified Data.Vector.Fixed as V ( (!), - length, - ) -import Data.Vector.Fixed.Boxed + foldl, + length ) +import Data.Vector.Fixed.Boxed ( + Vec, + Vec2, + Vec3, + Vec4, + Vec5 ) +import NumericPrelude hiding ( abs ) type Vec1 = Vec N1 -type Vec4 = Vec N4 -type Vec5 = Vec N5 @@ -66,3 +75,17 @@ delete v1 idx = where (lhalf, rhalf) = splitAt idx (toList v1) rhalf' = tail rhalf + + +-- | We provide our own sum because V.sum relies on a Num instance +-- from the Prelude that we don't have. +-- +-- Examples: +-- +-- >>> import Data.Vector.Fixed (mk3) +-- >>> let b = mk3 1 2 3 :: Vec3 Int +-- >>> element_sum b +-- 6 +-- +element_sum :: (Additive.C a, Ring.C a, Vector v a) => v a -> a +element_sum = V.foldl (+) (fromInteger 0)