en Ocaml, comment fait-on "data Mydata = (etc) deriving (Eq, Ord, Show, Read, Typeable, Data, Generic)
Bonjour,
tout (ou presque 8-)) est dans le titre. Je voudrais me lancer dans un projet perso en Ocaml, dont j'ai trouvé un équivalent embryonnaire en Haskell (ici, mais ce n'est pas vraiment l'important : https://github.com/digitalmentat/org...arse/issues/17)
Ce la me fait penser que j'ai toujours admiré la puissance naturelle du "deriving" en Haskell, qui en trois mot permet de tester l'égalité, d'ordonner, d'imprimer (Eq, Ord, Show) (etc), et et que je voudrais bien savoir comment faire la même chose en Ocaml !
Dans le cas présent :
Code:
1 2
| data Mydata = (...)
deriving (Eq, Ord, Show, Read, Typeable, Data, Generic) |
Euh, vaste question ? ou au contraire, il y a le petit truc qui va bien et que je ne connais pas encore :weird::weird::weird:?
Pas de typeclasses en OCaml
La réponse rapide : on ne peut pas le faire car il n'y a pas de typeclasses.
Toutefois une grande partie des fonctionnalités de ces typeclasses est disponible dans différents modules, notamment les modules Pervasives et Marshal.
En particulier :
- Le symbole == est l'égalité physique, les autres opérateurs de comparaison sont disponibles dans le module Pervasives (opérateurs =, <>, <, >, >=, <= et fonction compare).
- La lecture et l'écriture des données au format binaire (sérialisation) sont disponibles dans le module Marshal.
La lecture et l'impression des données au format texte sont particulières : ces fonctionnalités ne sont disponibles que dans le toplevel (l'interpréteur en ligne de commande). Autrement la sérialisation texte est disponible via Sexpr ou SExpr.
Pour ce qui est des types conteneur générique on a déjà abordé la question dans le sujet Iterateur sur type quelconque.