Une façon de voir les choses est la suivante Ord a
y Num a
sont des entrées supplémentaires pour la fonction. Il s'agit toutefois d'un type d'entrée particulier : dictionnaires . Lorsque vous utilisez cette fonction avec un type particulier de a
, il doit également y avoir dictionnaires disponible pour le Ord
y Num
les opérations sur le type a
également.
Toute fonction qui utilise une fonction avec des entrées de dictionnaire doit également avoir les mêmes entrées de dictionnaire.
foo :: (Num a, Ord a) => a -> t
foo x = loop x someFunc someT
Toutefois, il n'est pas nécessaire de transmettre explicitement ces dictionnaires. Haskell s'en chargera pour vous, à condition qu'un dictionnaire soit disponible. Vous pouvez créer un dictionnaire à l'aide d'une méthode typeclasse instance .
instance Num MyType with
x + y = ...
x - y = ...
...
Cela crée un dictionnaire pour le Num
les opérations sur MyType
Par conséquent MyType
peut être utilisé partout où Num a
est une entrée obligatoire (à condition qu'elle satisfasse aux autres exigences, bien entendu).