import Data.Number.BigFloat
-class Normed a where
+-- 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
+ -- | The "usual" norm. Defaults to the Euclidean norm.
+ norm :: RealFrac b => a -> b
+ norm = norm_p (2 :: Integer)
+
-- Define instances for common numeric types.
instance Normed Integer where
norm_p _ = fromInteger