module Algebra.NormedSpace.Maximum where
import PreludeBase
import NumericPrelude
import qualified Number.Ratio as Ratio
import qualified Algebra.PrincipalIdealDomain as PID
import qualified Algebra.Real as Real
import qualified Algebra.Module as Module
class (Real.C a, Module.C a v) => C a v where
norm :: v -> a
instance C Float Float where
norm = abs
instance C Double Double where
norm = abs
instance C Int Int where
norm = abs
instance C Integer Integer where
norm = abs
instance (Real.C a, PID.C a) => C (Ratio.T a) (Ratio.T a) where
norm = abs
instance (Ord a, C a v0, C a v1) => C a (v0, v1) where
norm (x0,x1) = max (norm x0) (norm x1)
instance (Ord a, C a v0, C a v1, C a v2) => C a (v0, v1, v2) where
norm (x0,x1,x2) = (norm x0) `max` (norm x1) `max` (norm x2)
instance (Ord a, C a v) => C a [v] where
norm = foldl max zero . map norm