La barre verticale est un séparateur syntaxique sans signification propre, utilisé pour introduire des dépendances fonctionnelles sur une classe de type multiparamétrique, donc techniquement |
ne signifie rien du tout. Il est probable que les |
a été choisi comme analogie visuelle avec l'utilisation du même symbole pour la protecteurs de modèles sur les fonctions.
En ce qui concerne les dépendances fonctionnelles proprement dites, il suffit de lire x -> y
comme "paramètre de type x
détermine de manière unique le paramètre de type y
"ce qui signifie que le fait de connaître x
suffit à trouver la bonne instance. Il existe d'autres complications, en particulier lorsque d'autres extensions de GHC sont activées, mais la plupart du temps, vous n'avez pas à vous en préoccuper.
En revanche, en l'absence de dépendances fonctionnelles, la sélection d'une instance d'une classe de type à paramètres multiples exige que tous les paramètres du type soient connus. Dans un exemple typique, un paramètre est un type de conteneur et un second est le type des éléments contenus ; des fonctions telles que "concatenate" ou "isEmpty" ne doivent pas mentionner le type d'élément, mais seulement le type de conteneur, et seraient donc ambiguës.
De même, si vous écrivez vos propres classes de types, envisagez plutôt d'utiliser les familles types qui constituent une nouvelle approche susceptible de remplacer à terme les dépendances fonctionnelles. D'une manière générale, les familles de types vous permettent d'écrire des définitions des types à l'intérieur d'une instance, et pas seulement les fonctions surchargées.