let recordType = ... // omitted
let resultTypeRaw = typedefof<Result<_,_>>
let resultType = resultTypeRaw.MakeGenericType([|recordType.AsType();typeof<string list>|])
Expr.NewUnionCase(
(* behavior changes between using resultTypeRaw versus resultType on the next line *)
FSharpType.GetUnionCases(resultType) |> Array.pick (function | x when x.Name = "Ok" -> Some x | _ -> None),
[
Expr.NewRecord(
recordType,
[
Expr.Value(5)
]
)
]
)
When I attempt to use resultType with GetUnionCases I get the following exception: Specified method is not supported.. I presume some F# metadata is lost via the call to MakeGenericType.
When I attempt to use resultTypeRaw, GetUnionCases succeeds but the subsequent NewUnionCase fails with the following exception: Type mismatch when building 'sum': incorrect argument type for an F# union. Expected 'T', but received type
How can I construct a union type with dynamic generic arguments or use the result of MakeGenericType with the FSharpType/Expr functions?
Aucun commentaire:
Enregistrer un commentaire