C'est vraiment des interfaces, en haskell cela se nomme des typeclass. Sauf qu'elles sont définie de façon découplée du type associé, mais l'association est explicite.
Par example, si je définis :
classShapetwherearea::t->Float
Et que j'ai le type :
dataSquare=Square{side::Float}
Alors je peux associer la typeclass au type avec :
D'autre part, et c'est là que je me suis fourvoyé, je pensais que tu n'avais pas besoin de définir d'interface Num (que ta méthode pourrait prendre Num ou Bar), mais pour ça je présume qu'il faut explicitement dire qu'elle prend l'un ou l'autre.
Tu n'as pas besoin de définir que la fonction prend un Num ou un Bar, c'est l'inférence de type qui le fait tout seul (mais tu peux lui forcer la main en faisant quelque chose de plus restrictif). Donc en effet c'est en quelque sort du duck-typing statiquement typé. Example :
foos=areas*2
aura comme type foo :: Shape t => t -> Float
Ici n'importe quelle type qui implémente l'interface Shape fonctionne avec foo`.
[^] # Re: typage statique automatique ?
Posté par Guillaum (site web personnel) . En réponse au journal Typage statique pour Python. Évalué à 2.
C'est vraiment des interfaces, en haskell cela se nomme des
typeclass. Sauf qu'elles sont définie de façon découplée du type associé, mais l'association est explicite.Par example, si je définis :
Et que j'ai le type :
Alors je peux associer la typeclass au type avec :
Tu n'as pas besoin de définir que la fonction prend un
Numou unBar, c'est l'inférence de type qui le fait tout seul (mais tu peux lui forcer la main en faisant quelque chose de plus restrictif). Donc en effet c'est en quelque sort du duck-typing statiquement typé. Example :aura comme type
foo :: Shape t => t -> FloatIci n'importe quelle type qui implémente l'interface
Shapefonctionne avec foo`.