Closed
Description
For example
FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.QuotationToExpression(<@struct(1,1)@>)
outputs
val it : Expression =
new Tuple`2(1, 1) {Arguments = seq [1; 1];
CanReduce = false;
Constructor = Void .ctor(Int32, Int32);
Members = null;
NodeType = New;
Type = System.Tuple`2[System.Int32,System.Int32];}
So things like
let f (struct(a,b)) = (a,b)
FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.QuotationToExpression(<@f struct(1,1)@>)
raises the exception
> System.ArgumentException: Expression of type 'System.Tuple`2[System.Int32,System.Int32]' cannot be used for parameter of type 'System.ValueTuple`2[System.Int32,System.Int32]' of method 'System.Tuple`2[System.Int32,System.Int32] f[Int32,Int32](System.ValueTuple`2[System.Int32,System.Int32])'
at System.Linq.Expressions.Expression.ValidateOneArgument(MethodBase method, ExpressionType nodeKind, Expression arg, ParameterInfo pi)
at System.Linq.Expressions.Expression.ValidateArgumentTypes(MethodBase method, ExpressionType nodeKind, ReadOnlyCollection`1& arguments)
at System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, IEnumerable`1 arguments)
at Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp)
at <StartupCode$FSI_0019>.$FSI_0019.main@()
Stopped due to error