linear 0.8 → 0.9
raw patch · 2 files changed
+12/−8 lines, 2 files
Files
- linear.cabal +1/−1
- src/Linear/Metric.hs +11/−7
linear.cabal view
@@ -1,6 +1,6 @@ name: linear category: Math, Algebra-version: 0.8+version: 0.9 license: BSD3 cabal-version: >= 1.8 license-file: LICENSE
src/Linear/Metric.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE DefaultSignatures #-} ----------------------------------------------------------------------------- -- | -- Module : Linear.Metric@@ -14,21 +15,24 @@ ( Metric(..), normalize ) where -import Control.Applicative+import Data.Foldable as Foldable+import Data.Functor.Apply import Linear.Epsilon+import Linear.Vector -- $setup -- >>> import Linear --- | A free inner product/metric space-class Applicative f => Metric f where+-- | Free and sparse inner product/metric spaces.+class Additive f => Metric f where -- | Compute the inner product of two vectors or (equivalently) -- convert a vector @f a@ into a covector @f a -> a@. -- -- >>> V2 1 2 `dot` V2 3 4 -- 11- dot :: Num a => f a -> f a -> a+ default dot :: (Foldable f, Num a) => f a -> f a -> a+ dot x y = Foldable.sum $ liftF2 (*) x y -- | Compute the squared norm. The name quadrance arises from -- Norman J. Wildberger's rational trigonometry.@@ -37,15 +41,15 @@ -- | Compute the quadrance of the difference qd :: Num a => f a -> f a -> a- qd f g = quadrance (liftA2 (-) f g)+ qd f g = quadrance (f ^-^ g) -- | Compute the distance between two vectors in a metric space distance :: Floating a => f a -> f a -> a- distance f g = norm (liftA2 (-) f g)+ distance f g = norm (f ^-^ g) -- | Compute the norm of a vector in a metric space norm :: Floating a => f a -> a- norm v = sqrt (dot v v)+ norm v = sqrt (quadrance v) -- | Convert a non-zero vector to unit vector. signorm :: Floating a => f a -> f a