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
small bug in relaxed value restriction #4862
Comments
Comment author: @garrigue Je comprends votre confusion, mais cet exemple n'est pas un bug, meme si il demontre la fragilite de la relaxed value restriction dans certains cas. |
Comment author: lavi Hum ça reste bizarre, parce que le code suivant ne passe pas non plus : # type t = {f: 'a. ('a list -> int) Lazy.t}
let l = { f = let tmp = raise Not_found in tmp };; pour le coup, c'est la première fois que je vois le type changer selon que l'on utilise un "let" ou un "let in"... |
Comment author: lavi oups typo: let l = { f = let tmp = lazy (raise Not_found) in tmp };; mais ça reste vrai: si on sort le "let tmp", ça passe... |
Comment author: @garrigue Je ne vois pas de solution simple: le problème vient du fait qu'on propage le type attendu vers |
Comment author: @garrigue Fixed in version/3.12, revision 10538. |
Original bug ID: 4862
Reporter: lavi
Assigned to: @garrigue
Status: closed (set by @garrigue on 2010-06-08T02:45:58Z)
Resolution: fixed
Priority: normal
Severity: minor
Version: 3.11.1
Fixed in version: 3.12.0+dev
Category: ~DO NOT USE (was: OCaml general)
Bug description
Vraiment pas important, mais il me semble que le programme suivant devrait être accepté:
Le type de f ('a Lazy.t) pourrait pourtant bien être généralisé. D'ailleurs, si l'on passe par une variable intermédiaire, ça passe:
The text was updated successfully, but these errors were encountered: