FSharp.TypeProviders.SDK icon indicating copy to clipboard operation
FSharp.TypeProviders.SDK copied to clipboard

GetUnionCases fails on an option of provided type

Open kerams opened this issue 5 years ago • 1 comments

Description

The following snippet causes an error message box to appear in the VS instance that consumes the type provider.

let typ = ProvidedTypeDefinition ("Blah", Some typeof<obj>)
let optionTyp = ProvidedTypeBuilder.MakeGenericType (typedefof<_ option>, [ typ ])
let cases = FSharp.Reflection.FSharpType.GetUnionCases optionTyp

Expected behavior

Expecting the function call so succeed and return 2 cases.

Actual behavior

A design time error message with The operation 'GetNestedType' on item 'FSharpOption``1' should not be called on provided type, member or parameter of type 'ProviderImplementation.ProvidedTypes.TypeSymbol' and a stack trace.

Is there any workaround for this?

kerams avatar Mar 14 '20 06:03 kerams

I believe this is because GetUnionCases is expecting the providedtype typ to have a member called Tags present which is retrieved via reflection.

It's possible to get around it via some fakery if you really need to: https://github.com/jet/falanx/blob/fe3bfbce4a9ec40aecfd7db6704aaab91283c3a5/src/Falanx.Machinery/ProvidedTypesExtensions.fs#L16-L70

7sharp9 avatar Jun 03 '22 13:06 7sharp9