Я могу дать только частичный ответ.
:=
определяется в терминах <-
в FSharp.Core \ prim-types.fs:
let (:=) x y = x.contents <- y
В вашемпример
b := // does not work
printfn "%A" a
4. + 8.
printfn "%A" a
, по-видимому, интерпретируется как y
, который нельзя присвоить ячейке int ref (неправильный тип).Группируя все выражение с ( ... )
, y
теперь также содержит 4. + 8.
.Возможно, эти два оператора ведут себя по-разному, потому что <-
кажется внутренним оператором (т. Е. Частью языка, а не библиотеки).