Quels sont les moyens de réaliser en OCaml ce que font les classes de type de Haskell ? Fondamentalement, je veux écrire une fonction polymorphe sans écrire trop de code. La façon typique de faire du polymorphisme est de fournir un argument supplémentaire indiquant à la fonction le type sur lequel elle travaille actuellement. Par exemple, si je veux trier une liste d'ints, je dois passer un comparateur supplémentaire à la fonction.
type comparison = Lesser | Equal | Greater
my_sort : (a' -> a' -> comparison) -> 'a list -> 'a list
Existe-t-il un moyen de dire à OCaml que mon type est comparable sans écrire une fonction de comparaison pour chaque type que je veux trier ? Ce qui signifie que ma fonction de tri ressemblerait à ceci :
my_sort : 'a list -> 'a list