1)
data NombreComplexe = Complexe {reel :: Double, imaginaire :: Double} deriving (Eq)
2)
Complexe 3.2 5.1
Complexe (-2.0) 1.5
3)
Pour pouvoir comparer deux nombres complexes avec les opérateurs == et /=, il faut ajouter la clause deriving (Eq) à la déclaration de type, comme cela a été fait dans la proposition de type ci-dessus. Cela permet de dériver une instance de la classe Eq qui fournit une implémentation par défaut des opérateurs == et /=.
4)
instance de la classe Show pour afficher un nombre complexe :
instance Show NombreComplexe where
show (Complexe a b)
| b >= 0 = show a ++ " + " ++ show b ++ "i"
| otherwise = show a ++ " - " ++ show (abs b) ++ "i"
Cette instance de Show affiche un nombre complexe sous la forme a + bi ou a - bi en fonction du signe de sa partie imaginaire.
5)
instance de la classe Ord pour définir une relation d'ordre entre les nombres complexes :
instance Ord NombreComplexe where
compare (Complexe a b) (Complexe c d)
| a /= c = compare a c
| otherwise = compare b d
Cette instance de Ord compare les nombres complexes en premier lieu sur leur partie réelle, puis sur leur partie imaginaire si les parties réelles sont égales.