You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 6852 Reporter:@Drup Status: closed (set by @alainfrisch on 2015-04-28T16:51:46Z) Resolution: duplicate Priority: normal Severity: minor Version: 4.02.1 Category: typing Duplicate of:#6023
Bug description
At the moment, the compiler refuses to disambiguate GADT by telling you explicitly "The GADT constructor must be qualified in this pattern".
It puzzles me a bit, because it means the typechecker actually already found it was a GADT (hence found the type ..) and then refuses to disambiguate.
Also, with ADTs, you can disambiguate one branch of a patter matching and the other branches will not be considered ambiguous. There is no such thing for GADT and the compiler will still refuse to typechecker if only one branch is disambiguated.
For example, I would like to be able to at least write this:
module M = struct
type _ t =
| I : int t
| S : string t
end
let f : type x . x M.t -> x
= function
| M.I -> 3
| S -> "bla"
The text was updated successfully, but these errors were encountered:
Original bug ID: 6852
Reporter: @Drup
Status: closed (set by @alainfrisch on 2015-04-28T16:51:46Z)
Resolution: duplicate
Priority: normal
Severity: minor
Version: 4.02.1
Category: typing
Duplicate of: #6023
Bug description
At the moment, the compiler refuses to disambiguate GADT by telling you explicitly "The GADT constructor must be qualified in this pattern".
It puzzles me a bit, because it means the typechecker actually already found it was a GADT (hence found the type ..) and then refuses to disambiguate.
Also, with ADTs, you can disambiguate one branch of a patter matching and the other branches will not be considered ambiguous. There is no such thing for GADT and the compiler will still refuse to typechecker if only one branch is disambiguated.
For example, I would like to be able to at least write this:
module M = struct
type _ t =
| I : int t
| S : string t
end
let f : type x . x M.t -> x
= function
| M.I -> 3
| S -> "bla"
The text was updated successfully, but these errors were encountered: