{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {- | Copyright : (c) Henning Thielemann 2005 License : GPL Maintainer : numericprelude@henning-thielemann.de Stability : provisional Portability : requires multi-parameter type classes Abstraction of normed vector spaces -} 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 (Ring.C a, Algebra.Module a a) => C a a where norm = abs -} 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 -- norm = maximum . map norm