дал следующий типРазличные выражения генерируются для «примерно» тот же код котировка
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
. Почему это?
Ну, нет действительно никакой гарантии для особая форма выражения, если это действительно так.Другими словами: почему вы ожидаете, что они будут идентичны? –
@FyodorSoikin хорошо просто потому, что они были идентичными, упростили бы проверку и оценку. Нет? – robkuz