Petite précision : quand j'ai dit qu'il n'est pas possible de parémétrer un type par des valeurs, ce n'est pas tout à fait vrai. C'est possible via des foncteurs, mais la garantie des invariants doit être contrôlée dynamiquement. Michaël en a donné un exemple.
On peut par exemple faire un type d'entier borné ainsi :
moduletypeBound=sigvalmin:intvalmax:intend;;moduletypeRange=sigtypetvalmin:tvalmax:tvalof_int:int->tvalto_int:t->intend;;moduleRange(X:Bound):Range=structtypet=intletmin=X.minletmax=X.maxletto_inti=iletof_int=function|iwheni<min->failwith"out of bound"|iwheni>max->failwith"out of bound"|i->iend;;moduleM=Range(structletmin=1letmax=10end);;leti=M.of_int5;;vali:M.t=<abstr>M.to_inti;;-:int=5M.of_int15;;Exception:Failure"out of bound".
Ici le module X qui paramétrise le foncteur fournit les valeurs min et max qui définisse le segment et paramétrise donc le type t. Néanmoins il faut contrôler dynamiquement que l'on est bien dans les bornes.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Reason
Posté par kantien . En réponse à la dépêche OCaml 4.04 et 4.05. Évalué à 3.
Petite précision : quand j'ai dit qu'il n'est pas possible de parémétrer un type par des valeurs, ce n'est pas tout à fait vrai. C'est possible via des foncteurs, mais la garantie des invariants doit être contrôlée dynamiquement. Michaël en a donné un exemple.
On peut par exemple faire un type d'entier borné ainsi :
Ici le module
Xqui paramétrise le foncteur fournit les valeursminetmaxqui définisse le segment et paramétrise donc le typet. Néanmoins il faut contrôler dynamiquement que l'on est bien dans les bornes.Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.