[Haskell-cafe] tricky recursive type instance method

Henning Thielemann schlepptop at henning-thielemann.de
Sat Jan 29 21:50:21 CET 2011


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.




More information about the Haskell-Cafe mailing list