module Progwerkstatt where -- 1.1 data Complex1 = Comp1 Float Float deriving(Show) mkComplex1 :: Float -> Float -> Complex1 mkComplex1 r i = Comp1 r i data Complex2 a = Comp2 a a deriving(Show) mkComplex2 :: a -> a -> Complex2 a mkComplex2 r i = Comp2 r i -- 1.2 getReal1 :: Complex1 -> Float getReal1 ( Comp1 r _ ) = r getImag1 :: Complex1 -> Float getImag1 ( Comp1 _ i ) = i getReal2 :: Complex2 a -> a getReal2 ( Comp2 r _ ) = r getImag2 :: Complex2 a -> a getImag2 ( Comp2 _ i ) = i -- 1.3 addComplex1 :: Complex1 -> Complex1 -> Complex1 addComplex1 ( Comp1 r1 i1 ) ( Comp1 r2 i2 ) = Comp1 (r1 + r2) (i1 + i2) addComplex2 :: Num a => Complex2 a -> Complex2 a -> Complex2 a addComplex2 ( Comp2 r1 i1 ) ( Comp2 r2 i2 ) = Comp2 (r1 + r2) (i1 + i2) -- 2 instance Eq Complex1 where (Comp1 r1 i1) == (Comp1 r2 i2) = (r1 == r2 ) && (i1 == i2) instance Num Complex1 where (Comp1 r1 i1) + (Comp1 r2 i2) = Comp1 (r1 + r2) (i1 + i2) (Comp1 r1 i1) - (Comp1 r2 i2) = Comp1 (r1 - r2) (i1 - i2) (Comp1 r1 i1) * (Comp1 r2 i2) = Comp1 (r1 * r2) (i1 * i2) abs (Comp1 r1 i1) = Comp1 (r1 * r1 + i1 * i1) 0