open Microsoft.FSharp.Reflection
let Construct<'T> (caseInfo: UnionCaseInfo) =
let fields = caseInfo.GetFields()
FSharpValue.MakeUnion(caseInfo, Array.zeroCreate fields.Length) :?> 'T
let GetUnionCaseInfoAndInstance<'T> (caseInfo: UnionCaseInfo) = (caseInfo, Construct<'T> caseInfo)
FSharpType.GetUnionCases(typeof<'T>)
|> Seq.map GetUnionCaseInfoAndInstance<'T>
let dict = [ for (_, instance) in AllCases<op> do yield instance ]