|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Ayoub Étudiant Inscription : mars 2012 Messages : 5 ![]() |
Bonjour,
Qu'est-ce qu'un type forcé en Caml? Cordialement |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Valentin RobertÉtudiant Inscription : juin 2004 Messages : 70 ![]() |
Bonjour,
Où as-tu lu ça ? Dans quel contexte ? Le terme ne m'évoque pas quelque chose en particulier. On peut parler de forcer le type d'un terme quand on écrit une signature de type pour essayer de forcer le polymorphisme ou le monomorphisme. On peut parler de forcer une valeur paresseuse, auquel cas le type forcé serait le type normal, non-paresseux. Mais peut-être qu'il y a un autre usage de l'adjectif forcé qui m'échappe.
__________________
Apprendre Haskell vous fera le plus grand bien ! |
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Victor SantetÉtudiant Inscription : juillet 2012 Messages : 4 ![]() |
Voici un exemple simple pour comprendre facilement :
Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
On peut ajouter des annotations à un terme pour obtenir un type moins général qu'il ne serait inféré sinon. Mais quelle est ta question, au juste ?
|
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() ![]() Phrene Caco Inscription : janvier 2009 Messages : 525 ![]() |
Bonsoir,
Et une question subsidiaire : si, éventuellement, tu souhaites réduire le niveau de généralité du typage d'un code OCaml, c'est que tu dois avoir de bonnes raisons de le faire. Je dis ça parce que, de façon générale, on essaie justement de gagner en généralité pour factoriser le code. Cordialement, Cacophrène
__________________
Blog OCaml de pied en cap Tuto Implémentation d'un lexique avec OCaml Projets OCamlBoggle MazeML OCamlTeX |
|
00
|
|
|
#6 | |||
|
Invité régulier
![]() Victor SantetÉtudiant Inscription : juillet 2012 Messages : 4 ![]() |
Citation:
- utiliser des types "abréviations". Par exemple : Code :
- garantir des données valides, sur un module en amont En effet, si on souhaite écrire un module contenant des fonctions qui opèrent sur des éléments donnés par un code en aval, on souhait avoir la garantie d'une bon typage. Ce cas de figure est arrivé lorsque je voulais faire un module qui appelait deux autres modules : ces modules étaient écrits par des candidats qui implémentaient une IA à travers des fonctions appelées depuis mon module, qui s'occupe d'héberger la partie et de faire confronter les deux IA. Bien sûr, l'intérêt du typage forcé ne s'arrête pas là, mais sont exposés ci-dessus les deux cas qui m'arrivent personnellement le plus souvent |
|||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
En général on fait plutôt ces vérifications-là au niveau de l'interface du module (le fichier .mli ou la signature d'un sous-module), plutôt qu'en utilisant des annotations dans les termes.
|
|
|
00
|
|
|
#8 | ||||||
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Comme Cacophrène, j'essaie de gagner en généralité pour factoriser le code.
Comme gasche, je préfère placer les restrictions de type au niveau de l'interface du module. Comme Ptival et gasche j'annote une variable/expression à l'aide d'un type ou bien je fourni un type explicite. Je force un type (transtypage) quand je programme dans un langage à typage laxiste. Malgré toutes ces précautions, dans le top-level, il peut rester encore deux cas où le typage doit être explicite. Cas n°1: OCaml ne voit pas une certaine propriété "évidente" OCaml ne voit pas que cmp est un ordre total sur 'a : Code OCaml :
Cas n°2: les nested-datypes et autre récursion polymorphe Ce qu'il ne faut pas faire : Code OCaml :
Ce qu'il faut faire : Code OCaml :
D'ailleurs voilà pourquoi il y a un mot clé rec : parce qu'il ne faut pas en abuser.
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
||||||
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
Je ne comprends pas le cas 1. On gagne en flexibilité en laissant "lexicographical" utiliser deux types différents, d'ailleurs on utilise dans certaines situations un ordre lexicographique comme un produit de deux ordres différents.
Enfin, ça permet de repérer des bugs. Si tu avais écrit (cmp h1 h1) par erreur, tu aurais repéré un typage plus restreint qu'attendu. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com