packages feed

vector-space 0.5.1 → 0.5.2

raw patch · 4 files changed

+38/−24 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.AdditiveGroup: data Sum a
+ Data.AdditiveGroup: Sum :: a -> Sum a
+ Data.AdditiveGroup: newtype Sum a
+ Data.AffineSpace: instance (AffineSpace p) => AffineSpace (a -> p)
+ Data.AffineSpace: instance (AffineSpace p, AffineSpace q) => AffineSpace (p, q)
+ Data.AffineSpace: instance (AffineSpace p, AffineSpace q, AffineSpace r) => AffineSpace (p, q, r)
- Data.AffineSpace: (.+^) :: (AffineSpace p) => p -> AVector p -> p
+ Data.AffineSpace: (.+^) :: (AffineSpace p) => p -> Diff p -> p
- Data.AffineSpace: (.-.) :: (AffineSpace p) => p -> p -> AVector p
+ Data.AffineSpace: (.-.) :: (AffineSpace p) => p -> p -> Diff p
- Data.AffineSpace: (.-^) :: (AffineSpace p) => p -> AVector p -> p
+ Data.AffineSpace: (.-^) :: (AffineSpace p) => p -> Diff p -> p
- Data.AffineSpace: alerp :: (AffineSpace p) => p -> p -> Scalar (AVector p) -> p
+ Data.AffineSpace: alerp :: (AffineSpace p, VectorSpace (Diff p)) => p -> p -> Scalar (Diff p) -> p
- Data.AffineSpace: class (VectorSpace (AVector p)) => AffineSpace p where { type family AVector p; }
+ Data.AffineSpace: class (AdditiveGroup (Diff p)) => AffineSpace p where { type family Diff p; }
- Data.AffineSpace: distance :: (AffineSpace p, v ~ (AVector p), InnerSpace v, s ~ (Scalar v), Floating (Scalar v)) => p -> p -> s
+ Data.AffineSpace: distance :: (AffineSpace p, v ~ (Diff p), InnerSpace v, s ~ (Scalar v), Floating (Scalar v)) => p -> p -> s
- Data.AffineSpace: distanceSq :: (AffineSpace p, v ~ (AVector p), InnerSpace v) => p -> p -> Scalar v
+ Data.AffineSpace: distanceSq :: (AffineSpace p, v ~ (Diff p), InnerSpace v) => p -> p -> Scalar v
- Data.VectorSpace: lerp :: (VectorSpace v, s ~ (Scalar v), Num s) => v -> v -> s -> v
+ Data.VectorSpace: lerp :: (VectorSpace v) => v -> v -> Scalar v -> v

Files

src/Data/AdditiveGroup.hs view
@@ -13,7 +13,7 @@  module Data.AdditiveGroup   ( -    AdditiveGroup(..), (^-^), sumV, Sum+    AdditiveGroup(..), (^-^), sumV, Sum(..)   ) where  import Control.Applicative
src/Data/AffineSpace.hs view
@@ -16,6 +16,8 @@     AffineSpace(..), (.-^), distanceSq, distance, alerp   ) where +import Control.Applicative (liftA2)+ import Data.VectorSpace  infix 4 .+^, .-^, .-.@@ -23,53 +25,59 @@ -- TODO: Convert AffineSpace from fundep to associated type, and eliminate -- FunctionalDependencies above. -class VectorSpace (AVector p) => AffineSpace p where+class AdditiveGroup (Diff p) => AffineSpace p where   -- | Associated vector space-  type AVector p+  type Diff p   -- | Subtract points-  (.-.)  :: p -> p -> AVector p+  (.-.)  :: p -> p -> Diff p   -- | Point plus vector-  (.+^)  :: p -> AVector p -> p---- TODO: consider replacing p and v with a type constructor argument:--- --- class VectorSpace' v => AffineSpace p v | p -> v where---   (.-.)  :: p s -> p s -> v s---   (.+^)  :: p s -> v s -> p s--- --- Perhaps with constraints on s.  We couldn't then define instances for--- doubles & floats.+  (.+^)  :: p -> Diff p -> p  -- | Point minus vector-(.-^) :: (AffineSpace p) => p -> AVector p -> p+(.-^) :: AffineSpace p => p -> Diff p -> p p .-^ v = p .+^ negateV v  -- | Square of the distance between two points.  Sometimes useful for -- efficiency.  See also 'distance'.-distanceSq :: (AffineSpace p, v ~ AVector p, InnerSpace v) =>+distanceSq :: (AffineSpace p, v ~ Diff p, InnerSpace v) =>               p -> p -> Scalar v distanceSq = (fmap.fmap) magnitudeSq (.-.)  -- | Distance between two points.  See also 'distanceSq'.-distance :: (AffineSpace p, v ~ AVector p, InnerSpace v+distance :: (AffineSpace p, v ~ Diff p, InnerSpace v             , s ~ Scalar v, Floating (Scalar v))          => p -> p -> s distance = (fmap.fmap) sqrt distanceSq  -- | Affine linear interpolation.  Varies from @p@ to @p'@ as @s@ varies -- from 0 to 1.  See also 'lerp' (on vector spaces).-alerp :: AffineSpace p => p -> p -> Scalar (AVector p) -> p+alerp :: (AffineSpace p, VectorSpace (Diff p)) =>+         p -> p -> Scalar (Diff p) -> p alerp p p' s = p .+^ (s *^ (p' .-. p))  instance  AffineSpace Double where-  type AVector Double = Double+  type Diff Double = Double   (.-.) =  (-)   (.+^) =  (+)  instance  AffineSpace Float where-  type AVector Float = Float+  type Diff Float = Float   (.-.) =  (-)   (.+^) =  (+) --- TODO: pairs & triples.  Functions? +instance (AffineSpace p, AffineSpace q) => AffineSpace (p,q) where+  type Diff (p,q)   = (Diff p, Diff q)+  (p,q) .-. (p',q') = (p .-. p', q .-. q')+  (p,q) .+^ (u,v)   = (p .+^ u, q .+^ v)++instance (AffineSpace p, AffineSpace q, AffineSpace r) => AffineSpace (p,q,r) where+  type Diff (p,q,r)      = (Diff p, Diff q, Diff r)+  (p,q,r) .-. (p',q',r') = (p .-. p', q .-. q', r .-. r')+  (p,q,r) .+^ (u,v,w)    = (p .+^ u, q .+^ v, r .+^ w)+++instance (AffineSpace p) => AffineSpace (a -> p) where+  type Diff (a -> p) = a -> Diff p+  (.-.)              = liftA2 (.-.)+  (.+^)              = liftA2 (.+^)
src/Data/VectorSpace.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE MultiParamTypeClasses, TypeOperators            , TypeFamilies, UndecidableInstances  #-}+{-# OPTIONS_GHC -Wall #-} ---------------------------------------------------------------------- -- | -- Module      :   Data.VectorSpace@@ -62,8 +63,13 @@ (^*) = flip (*^)  -- | Linear interpolation between @a@ (when @t==0@) and @b@ (when @t==1@).-lerp :: (VectorSpace v, s ~ Scalar v, Num s) => v -> v -> s -> v-lerp a b t = (1-t)*^a ^+^ t*^b++-- lerp :: (VectorSpace v, s ~ Scalar v, Num s) => v -> v -> s -> v+lerp :: VectorSpace v => v -> v -> Scalar v -> v+lerp a b t = a ^+^ t *^ (b ^-^ a)++-- lerp :: (VectorSpace v, s ~ Scalar v, Num s) => v -> v -> s -> v+-- lerp a b t = (1-t)*^a ^+^ t*^b  -- | Square of the length of a vector.  Sometimes useful for efficiency. -- See also 'magnitude'.
vector-space.cabal view
@@ -1,5 +1,5 @@ Name:                vector-space-Version:             0.5.1+Version:             0.5.2 Cabal-Version:       >= 1.2 Synopsis:            Vector & affine spaces, linear maps, and derivatives (requires ghc 6.9) Category:            math