]> gitweb.michael.orlitzky.com - numerical-analysis.git/blobdiff - src/Normed.hs
Rename Aliases.hs to BigFloat.hs, now containing numeric-prelude instances for BigFloats.
[numerical-analysis.git] / src / Normed.hs
index b60c2b12fe84d51e0bf83b60ce0f958af55f7c10..8554bd97f2eba0bd66a4b458a05cdb334f2e4f87 100644 (file)
@@ -1,29 +1,53 @@
 {-# LANGUAGE FlexibleInstances #-}
-
+{-# LANGUAGE RebindableSyntax #-}
 -- | The 'Normed' class represents elements of a normed vector
 --   space. We define instances for all common numeric types.
 module Normed
 where
 
-import Data.Number.BigFloat
+import BigFloat
+
+import NumericPrelude hiding (abs)
+import Algebra.Absolute
+import Algebra.Field
+import Algebra.Ring
+import Algebra.ToInteger
+
+-- Since the norm is defined on a vector space, we should be able to
+-- add and subtract anything on which a norm is defined. Of course
+-- 'Num' is a bad choice here, but we really prefer to use the normal
+-- addition and subtraction operators.
+class (Algebra.Ring.C a, Algebra.Absolute.C a) => Normed a where
+  norm_p :: (Algebra.ToInteger.C c,
+             Algebra.Field.C b,
+             Algebra.Absolute.C b)
+            => c -> a -> b
 
-class Normed a where
-  norm_p :: (Integral c, RealFrac b) => c -> a -> b
-  norm_infty :: RealFrac b => a -> b
+  norm_infty :: (Algebra.Field.C b,
+                 Algebra.Absolute.C b)
+                => a -> b
+
+  -- | The "usual" norm. Defaults to the Euclidean norm.
+  norm :: (Algebra.Field.C b, Algebra.Absolute.C b) => a -> b
+  norm = norm_p (2 :: Integer)
 
 -- Define instances for common numeric types.
 instance Normed Integer where
-  norm_p _ = fromInteger
-  norm_infty = fromInteger
+  norm_p _ = abs . fromInteger
+  norm_infty = abs . fromInteger
 
 instance Normed Rational where
-  norm_p _ = fromRational
-  norm_infty = fromRational
+  norm_p _ = abs . fromRational'
+  norm_infty = abs . fromRational'
 
 instance Epsilon e => Normed (BigFloat e) where
-  norm_p _ = fromRational . toRational
-  norm_infty = fromRational . toRational
+  norm_p _ = abs . fromRational' . toRational
+  norm_infty = abs . fromRational' . toRational
+
+instance Normed Float where
+  norm_p _ = abs . fromRational' . toRational
+  norm_infty = abs . fromRational' . toRational
 
 instance Normed Double where
-  norm_p _ = fromRational . toRational
-  norm_infty = fromRational . toRational
+  norm_p _ = abs . fromRational' . toRational
+  norm_infty = abs . fromRational' . toRational