--- 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 (Num a) => Normed a where
- norm_p :: (Integral c, RealFrac b) => c -> a -> b
- norm_infty :: RealFrac b => a -> b
+import NumericPrelude hiding (abs)
+import Algebra.Absolute (abs)
+import qualified Algebra.Absolute as Absolute
+import qualified Algebra.Algebraic as Algebraic
+import qualified Algebra.RealField as RealField
+import qualified Algebra.ToInteger as ToInteger
+
+class Normed a where
+ norm_p :: (ToInteger.C c, Algebraic.C b, Absolute.C b) => c -> a -> b
+ norm_infty :: (RealField.C b) => a -> b