vector-space 0.8.3 → 0.8.4
raw patch · 3 files changed
+29/−26 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.VectorSpace: instance (InnerSpace a, AdditiveGroup (Scalar a)) => InnerSpace (Maybe a)
- Data.VectorSpace: instance (InnerSpace u, s ~ Scalar u, InnerSpace v, s ~ Scalar v, AdditiveGroup (Scalar v)) => InnerSpace (u, v)
- Data.VectorSpace: instance (InnerSpace u, s ~ Scalar u, InnerSpace v, s ~ Scalar v, InnerSpace w, s ~ Scalar w, AdditiveGroup s) => InnerSpace (u, v, w)
- Data.VectorSpace: instance (InnerSpace u, s ~ Scalar u, InnerSpace v, s ~ Scalar v, InnerSpace w, s ~ Scalar w, InnerSpace x, s ~ Scalar x, AdditiveGroup s) => InnerSpace (u, v, w, x)
- Data.VectorSpace: instance (RealFloat v, InnerSpace v, s ~ Scalar v, AdditiveGroup s) => InnerSpace (Complex v)
+ Data.VectorSpace: instance (InnerSpace u, s ~ Scalar u, InnerSpace v, s ~ Scalar v) => InnerSpace (u, v)
+ Data.VectorSpace: instance (InnerSpace u, s ~ Scalar u, InnerSpace v, s ~ Scalar v, InnerSpace w, s ~ Scalar w) => InnerSpace (u, v, w)
+ Data.VectorSpace: instance (InnerSpace u, s ~ Scalar u, InnerSpace v, s ~ Scalar v, InnerSpace w, s ~ Scalar w, InnerSpace x, s ~ Scalar x) => InnerSpace (u, v, w, x)
+ Data.VectorSpace: instance (RealFloat v, InnerSpace v) => InnerSpace (Complex v)
+ Data.VectorSpace: instance InnerSpace Int
+ Data.VectorSpace: instance InnerSpace Integer
+ Data.VectorSpace: instance InnerSpace a => InnerSpace (Maybe a)
+ Data.VectorSpace: instance VectorSpace Int
+ Data.VectorSpace: instance VectorSpace Integer
- Data.VectorSpace: class VectorSpace v => InnerSpace v
+ Data.VectorSpace: class (VectorSpace v, AdditiveGroup (Scalar v)) => InnerSpace v
Files
- src/Data/AdditiveGroup.hs +11/−7
- src/Data/VectorSpace.hs +17/−18
- vector-space.cabal +1/−1
src/Data/AdditiveGroup.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeOperators, CPP #-} ---------------------------------------------------------------------- -- | -- Module : Data.AdditiveGroup@@ -55,12 +55,16 @@ -- -- instance AdditiveGroup n where {zeroV=0; (^+^) = (+); negateV = negate} -instance AdditiveGroup Int where {zeroV=0; (^+^) = (+); negateV = negate}-instance AdditiveGroup Integer where {zeroV=0; (^+^) = (+); negateV = negate}-instance AdditiveGroup Float where {zeroV=0; (^+^) = (+); negateV = negate}-instance AdditiveGroup Double where {zeroV=0; (^+^) = (+); negateV = negate}-instance Integral a => AdditiveGroup (Ratio a) where- {zeroV=0; (^+^) = (+); negateV = negate}+#define ScalarTypeCon(con,t) \+ instance con => AdditiveGroup (t) where {zeroV=0; (^+^) = (+); negateV = negate}++#define ScalarType(t) ScalarTypeCon((),t)++ScalarType(Int)+ScalarType(Integer)+ScalarType(Float)+ScalarType(Double)+ScalarTypeCon(Integral a,Ratio a) instance (RealFloat v, AdditiveGroup v) => AdditiveGroup (Complex v) where zeroV = zeroV :+ zeroV
src/Data/VectorSpace.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE MultiParamTypeClasses, TypeOperators- , TypeFamilies, UndecidableInstances+ , TypeFamilies, UndecidableInstances, CPP+ , FlexibleContexts #-} {-# OPTIONS_GHC -Wall #-} ----------------------------------------------------------------------@@ -48,7 +49,7 @@ infixr 7 <.> -- | Adds inner (dot) products.-class VectorSpace v => InnerSpace v where+class (VectorSpace v, AdditiveGroup (Scalar v)) => InnerSpace v where -- | Inner/dot product (<.>) :: v -> v -> Scalar v @@ -87,15 +88,16 @@ project :: (InnerSpace v, s ~ Scalar v, Fractional s) => v -> v -> v project u v = ((v <.> u) / magnitudeSq u) *^ u -instance VectorSpace Double where- type Scalar Double = Double- (*^) = (*)-instance InnerSpace Double where (<.>) = (*)+#define ScalarType(t) \+ instance VectorSpace (t) where \+ { type Scalar (t) = (t) \+ ; (*^) = (*) } ; \+ instance InnerSpace (t) where (<.>) = (*) -instance VectorSpace Float where- type Scalar Float = Float- (*^) = (*)-instance InnerSpace Float where (<.>) = (*)+ScalarType(Int)+ScalarType(Integer)+ScalarType(Double)+ScalarType(Float) instance Integral a => VectorSpace (Ratio a) where type Scalar (Ratio a) = Ratio a@@ -106,7 +108,7 @@ type Scalar (Complex v) = Scalar v s*^(u :+ v) = s*^u :+ s*^v -instance (RealFloat v, InnerSpace v, s ~ Scalar v, AdditiveGroup s)+instance (RealFloat v, InnerSpace v) => InnerSpace (Complex v) where (u :+ v) <.> (u' :+ v') = (u <.> u') ^+^ (v <.> v') @@ -126,8 +128,7 @@ s *^ (u,v) = (s*^u,s*^v) instance ( InnerSpace u, s ~ Scalar u- , InnerSpace v, s ~ Scalar v- , AdditiveGroup (Scalar v) )+ , InnerSpace v, s ~ Scalar v ) => InnerSpace (u,v) where (u,v) <.> (u',v') = (u <.> u') ^+^ (v <.> v') @@ -140,8 +141,7 @@ instance ( InnerSpace u, s ~ Scalar u , InnerSpace v, s ~ Scalar v- , InnerSpace w, s ~ Scalar w- , AdditiveGroup s )+ , InnerSpace w, s ~ Scalar w ) => InnerSpace (u,v,w) where (u,v,w) <.> (u',v',w') = u<.>u' ^+^ v<.>v' ^+^ w<.>w' @@ -156,8 +156,7 @@ instance ( InnerSpace u, s ~ Scalar u , InnerSpace v, s ~ Scalar v , InnerSpace w, s ~ Scalar w- , InnerSpace x, s ~ Scalar x- , AdditiveGroup s )+ , InnerSpace x, s ~ Scalar x ) => InnerSpace (u,v,w,x) where (u,v,w,x) <.> (u',v',w',x') = u<.>u' ^+^ v<.>v' ^+^ w<.>w' ^+^ x<.>x' @@ -195,7 +194,7 @@ -instance (InnerSpace a, AdditiveGroup (Scalar a)) => InnerSpace (Maybe a) where+instance InnerSpace a => InnerSpace (Maybe a) where -- dotting with zero (vector) yields zero (scalar) Nothing <.> _ = zeroV _ <.> Nothing = zeroV
vector-space.cabal view
@@ -1,5 +1,5 @@ Name: vector-space-Version: 0.8.3+Version: 0.8.4 Cabal-Version: >= 1.6 Synopsis: Vector & affine spaces, linear maps, and derivatives Category: math