
Frank Kuehnel schrieb:
Hi folks,
how do I make this work: I want a division algebra over a field k, and I want to define the conjugation of complex numbers, i.e. conj (C 1 2) but also the conjugation of tensors of complex numbers conj (C (C 1 2) (C 1 4))
ghci load that stuff butt barfs on a simple
conj (C 1 2)
with instance Real a => DAlgebra a a -- Defined at Clifford.hs:20:10-31 instance (Real r, Num a, DAlgebra a r) => DAlgebra (Complex a) r
here's the code:
-- for a normed division algebra we need a norm and conjugation! class DAlgebra a k | a -> k where -- need functional dependence because conj doesn't refer to k conj :: a -> a
Since conj does not need type 'k' I would separate it from class DAlgebra.
abs2 :: a -> k
-- real numbers are a division algebra instance Real a => DAlgebra a a where conj = id abs2 x = x*x
-- Complex numbers form a normed commutative division algebra data Complex a = C a a deriving (Eq,Show)
This is the way, we defined Complex in NumericPrelude. We have no RealFloat constraint there in order to allow Gaussian numbers and other types.