Следующий код не работает:
open Microsoft.FSharp.Reflection
open Microsoft.FSharp.Quotations
let (empty,cons) =
FSharpType.GetUnionCases(typeof<List<_>>)
|> (fun cases ->
cases |> Array.find (fun c -> c.Name = "Empty"),
cases |> Array.find (fun c -> c.Name = "Cons"))
let valuesToList values =
values
|> List.map (fun v -> Expr.Value(v))
|> List.fold
(fun l v -> Expr.NewUnionCase(cons, [v;l]))
<@@ List.empty<int> @@>
[1;2;3]
|> valuesToList
с исключением:
System.ArgumentException: Type mismatch when building 'sum': incorrect argument type for an F# union. Expected 'System.Object', but received type 'System.Int32'.
Как указать общий тип параметра для случая Cons union?