Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re variables de type faibles #2642

Closed
vicuna opened this issue Dec 14, 2000 · 3 comments
Closed

Re variables de type faibles #2642

vicuna opened this issue Dec 14, 2000 · 3 comments

Comments

@vicuna
Copy link

vicuna commented Dec 14, 2000

Original bug ID: 248
Reporter: administrator
Assigned to: @Octachron
Status: resolved (set by @Octachron on 2017-07-13T18:56:13Z)
Resolution: fixed
Priority: normal
Severity: feature
Fixed in version: 4.06.0 +dev/beta1/beta2/rc1
Category: typing
Related to: #8079

Bug description

Full_Name: Sylvain Boulme
Version: 3.00
OS: RedHat 6.2
Submission from: cerdon.lip6.fr (132.227.83.56)

Ayant compris ma méprise dans mon message précédent (n 246) (les
variables de type faibles étant anonymes, l'utilisateur ne peut pas en
écrire !), voilà une demande de features.

  1. Serait-il possible d'interdire le symbole "_" dans les
    identificateurs de types tapés par l'utilisateur (comme cela si
    l'utilisateur tape "'_a" dans une expression de type, il n'a pas
    l'impression d'écrire une variable de type faible alors qu'il écrit en
    fait une variable "normale". (Au mieux mettre un "warning"...)

  2. Je trouve pertubant que ocaml donne le même nom à des variables de
    type faibles différentes (de façon interne).

    let f y = fun x -> x
    let blah = f 0
    let splash () = blah (failwith "coucou")
    let blurp = f 0

donne (d'après le toplevel) de signature :

val f : 'a -> 'b -> 'b
val blah : '_a -> '_a
val splash : unit -> '_a
val blurp : '_a -> '_a

Mais en réalité le "'_a" de "splash" est le même que "blah", mais pas
le même que "blurp".

Exemple: après un "blah 1;;"
on a :
blah: int -> int
splash: unit -> int
blurp: '_a -> '_a

Cordialement,

Sylvain.

@vicuna
Copy link
Author

vicuna commented Dec 15, 2000

Comment author: administrator

Full_Name: Sylvain Boulme
Version: 3.00
OS: RedHat 6.2
Submission from: cerdon.lip6.fr (132.227.83.56)

Ayant compris ma méprise dans mon message précédent (n 246) (les
variables de type faibles étant anonymes, l'utilisateur ne peut pas en
écrire !), voilà une demande de features.

  1. Serait-il possible d'interdire le symbole "_" dans les
    identificateurs de types tapés par l'utilisateur (comme cela si
    l'utilisateur tape "'_a" dans une expression de type, il n'a pas
    l'impression d'écrire une variable de type faible alors qu'il écrit en
    fait une variable "normale". (Au mieux mettre un "warning"...)

Ca parait raisonnable. Seul petit probleme, si on fait ca au niveau du
parseur, on perd une propriete' interessante qui est valide actuellement:
tout type imprime' par le typeur est lisible par le parseur

Elle m'est personnellement assez chere, entre autres pour ocamlbrowser.

Une autre solution serait de declencher l'erreur au niveau du typeur,
ce qui est plus logique, et ne met pas en cause le parseur.
(Pour l'utilisateur normal ces deux solutions sont equivalentes.)

  1. Je trouve pertubant que ocaml donne le même nom à des variables de
    type faibles différentes (de façon interne).

    let f y = fun x -> x
    let blah = f 0
    let splash () = blah (failwith "coucou")
    let blurp = f 0

donne (d'après le toplevel) de signature :

val f : 'a -> 'b -> 'b
val blah : '_a -> '_a
val splash : unit -> '_a
val blurp : '_a -> '_a

Mais en réalité le "'_a" de "splash" est le même que "blah", mais pas
le même que "blurp".

Ca c'est un peu plus complique'.
A l'heure actuelle, les noms de variables repartent a ['a] lors de
l'impression de chaque expression. Changer ce comportement obligerait
a donner des noms assez longs a ces variables. Par exemple en
utilisant le compteur de types:
val f : 'a -> 'b -> 'b
val blah : '_10235 -> '_10235
val splash : unit -> '_a
val blurp : '_12326 -> '_12326

Cordialement,

Jacques Garrigue

@vicuna
Copy link
Author

vicuna commented Dec 30, 2011

Comment author: @damiendoligez

As of december 2011, point 1 is done, and we still don't know how to do point 2.

@vicuna
Copy link
Author

vicuna commented Jul 13, 2017

Comment author: @Octachron

Point 2 should been fixed in OCaml 4.06 by #1225: the type of the example is now printed as

val f : 'a -> 'b -> 'b
val blah : '_weak1 -> '_weak1
val splash : unit -> '_weak1
val blurp : '_weak2 -> '_weak2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants