учитывая следующий тип
type Foo = { foo: string; bar: int };;
и следующая цитата кода
<@fun v x -> { x with foo = v; bar = 99 } @>;;
это приведет к
val it : Quotations.Expr<(string -> Foo -> Foo)> =
Lambda (v, Lambda (x, NewRecord (Foo, v, Value (99))))
Что ожидается. Также следующая цитата кода
<@fun v x -> { x with bar = v;foo = "foo" } @>;;
дает ожидаемый результат.
val it : Quotations.Expr<(int -> Foo -> Foo)> =
Lambda (v, Lambda (x, NewRecord (Foo, Value ("foo"), v)))
Однако это (изменение порядка и присвоение значения второму полю)
<@fun v x -> { x with bar = 66;foo = v } @>;;
урожаи
val it : Quotations.Expr<(string -> Foo -> Foo)> =
Lambda (v, Lambda (x, Let (bar, Value (66), NewRecord (Foo, v, bar))))
let
. Но в коде нет let
. Почему это?