Question

Comment définiriez-vous les signatures de type suivantes en anglais simple:

Ord a => ...

Eq a => ...

Num a => ...

Pouvez-vous décrire la signification de ces derniers et me faire savoir quelles sont les différences (en termes de la façon dont je l'expliquer à quelqu'un d'autre)?

Merci.

Était-ce utile?

La solution

Ce sont tous des exemples de « contraintes de classe »: ils contraignent quels types peuvent être utilisés à la place de la variable de type qui les suit (a dans ce cas), exigeant qu'il appartient à un particulier Type classe. Ord, Eq et Num sont des exemples de classes de type.

Fondamentalement, ces classes de type / contraintes sont une approche à la « surcharge de principe » des fonctions. Nous pouvons utiliser (==) :: Eq a => a -> a -> Bool sur différents types, mais non seulement tous les types . Certaines choses, par exemple des fonctions, ne font pas de sens de comparer l'égalité (peut-être parce que l'égalité n'est pas décidable pour ce type), et jamais est logique de comparer deux choses de différents types pour l'égalité (contraste avec Java, où vous pouvez comparer deux objets de types différents peut-être pour l'égalité).

Pour plus (très accessible) la lecture sur les classes de type et les contraintes, je vous recommande vivement En savoir vous Haskell .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top