-- Un exemple de fonction qui est polymorphique
afficherListe :: (Affichable a) => [a] -> String
afficherListe = intercalate "," . map affiche
Petite remarque pour ceux qui ne lisent pas l'haskell couramment. La fonction afficherListe prend une liste de a et renvoie une String. a marche pour n'importe quel Affichable, mais il faut bien noter que la liste ne peut contenir qu'un seul type et le même.
En gros, si on a foo et bar des valeurs de type Foo et Bar, eux même instances de Affichable, on peut faire afficheListe [foo, foo, foo] ou afficherListe [bar, bar, bar] mais pas afficherListe [foo, bar].
En gros ce n'est pas l'équivalent des appels virtuels en C++ ou de l'héritage en python, tout est résolu à la compilation et une instance spécifique de afficherListe est générée pour chaque a possible. (Ce n'est pas complètement vrai ;)
La notion de polymorphisme à l'execution (i.e. héritage virtuel) est plus complexe en haskell...
[^] # Re: typage statique automatique ?
Posté par Guillaum (site web personnel) . En réponse au journal Typage statique pour Python. Évalué à 3.
Petite remarque pour ceux qui ne lisent pas l'haskell couramment. La fonction
afficherListeprend une liste deaet renvoie une String.amarche pour n'importe quelAffichable, mais il faut bien noter que la liste ne peut contenir qu'un seul type et le même.En gros, si on a
fooetbardes valeurs de typeFooetBar, eux même instances deAffichable, on peut faireafficheListe [foo, foo, foo]ouafficherListe [bar, bar, bar]mais pasafficherListe [foo, bar].En gros ce n'est pas l'équivalent des appels virtuels en C++ ou de l'héritage en python, tout est résolu à la compilation et une instance spécifique de
afficherListeest générée pour chaqueapossible. (Ce n'est pas complètement vrai ;)La notion de polymorphisme à l'execution (i.e. héritage virtuel) est plus complexe en haskell...