-
Notifications
You must be signed in to change notification settings - Fork 842
Closed
Closed
Copy link
Labels
BugImpact-Low(Internal MS Team use only) Describes an issue with limited impact on existing code.(Internal MS Team use only) Describes an issue with limited impact on existing code.
Description
In a module that defines a record R and a discriminated union type where one case is called R, type inference is able to distinguish between the 2 types when the module is open, but not when I qualify the type name with the module name.
Repro steps
module Module =
type R = { a: int } with static member New = { a = 1 }
type Choice = | R of R
open Module
// This is accepted, R is inferred to be the record type.
let record1 = R.New
let choice1 v =
match v with
| R r -> r
| _ -> failwith "Nope."
// R is inferred to be of type Choice.R, hence R.New not recognized.
let record2 = Module.R.New
let choice2 v =
match v with
| Module.R r -> r
| _ -> failwith "Nope."
Expected behavior
In record2, I would have expected that Module.R is inferred to be the record type.
Actual behavior
Module.R is inferred to be of type Choice.R
Known workarounds
Open the module.
Related information
Tested in Microsoft (R) F# Interactive version 14.0.23413.0, Windows 10, Visual Studio 2015.
Originally submitted here
Metadata
Metadata
Assignees
Labels
BugImpact-Low(Internal MS Team use only) Describes an issue with limited impact on existing code.(Internal MS Team use only) Describes an issue with limited impact on existing code.