{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} module Algebra.VectorSpace where import qualified Algebra.Module as Module import qualified Algebra.Field as Field import qualified Algebra.PrincipalIdealDomain as PID import qualified Number.Ratio as Ratio import qualified Data.Complex as Complex98 -- import NumericPrelude.Numeric import qualified Prelude as P class (Field.C a, Module.C a b) => C a b {-* Instances for atomic types -} instance C P.Float P.Float instance C P.Double P.Double {-* Instances for composed types -} instance (PID.C a) => C (Ratio.T a) (Ratio.T a) instance (C a b0, C a b1) => C a (b0, b1) instance (C a b0, C a b1, C a b2) => C a (b0, b1, b2) instance (C a b) => C a [b] instance (C a b) => C a (c -> b) instance (C a b, P.RealFloat b) => C a (Complex98.Complex b)