FSharp.TypeProviders.SDK
FSharp.TypeProviders.SDK copied to clipboard
GetUnionCases fails on an option of provided type
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?
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