• [^] # Re: typage statique automatique ?

    Posté par . En réponse au journal Typage statique pour Python. Évalué à 2.

    ce lien n'est pas défini préalablement

    Peut-être est-ce un abus de langage, mais par interface, je voulais dire comme en Java par exemple

    Java includes a concept called interfaces. A Java interface is a bit like a class, except a Java interface can only contain method signatures and fields. An Java interface cannot contain an implementation of the methods, only the signature (name, parameters and exceptions) of the method.

    Suivi de

    Before you can really use an interface, you must implement that interface in some Java class.

    Dans ce document. Dans l'exemple en haskell, il suffit de faire une première substitution classe -> type puis interface -> classe pour avoir quelque chose d'équivalent.

    Ou alors comme les protocols en Objective-C (bien que je ne sois pas sûr que cela représente la même chose).

    (que ta méthode pourrait prendre Num ou Bar)

    En fait, il n'y a pas de surcharge en haskell (ou presque) : deux fonctions qui ont le même nom doivent être dans des espaces de nommage différents, sinon le compilateur râle. Or, si on veut définir une fonction sur les Bar et une fonction sur les Foo il faut deux types différents pour la fonction, et donc on n'y arrivera pas ... (enfin, pas à ma connaissance).

    Pour ne pas parler dans le vide voilà un exemple concret

    class Affichable a where -- Un type « a » est affichable quand ... 
     affiche :: a -> String -- on peut avoir une représentation textuelle
    data UnSuperType = Gauche String | Droite String 
    instance Affichable UnSuperType where
     affiche (Gauche s) = "gauche : " ++ s
     affiche (Droite s) = "droite : " ++ s
    -- Un exemple de fonction qui est polymorphique 
    afficherListe :: (Affichable a) => [a] -> String
    afficherListe = intercalate "," . map affiche

    Dans l'exemple ci-dessus, la fonction polymorphe dit qu'il existe pour le type a une fonction affiche :: a -> String. Si on veut être polymorphe sur plusieurs classes avec des fonctions qui sont communes ... comment choisir ? Soit on crée une classe parente qui regroupe les éléments communs, soit on ne sait pas ce qu'on veut vraiment faire.