Дополнительные пояснения по двум отправленным вами формам:
Первый использует прямое понимание последовательности, "seq {...}". Часть «seq» ранее была необязательной, но в будущем она не будет поддерживаться. Я предполагаю, что это усложняет такие вещи, как "async {...}" и синтаксис рабочего процесса или что-то в этом роде.
Теперь второй - чистый список:
> let x = [ for i in 0..3 do yield float i ];;
val x : float list
«seq» также является функцией:
> seq;;
val it : (seq<'a> -> seq<'a>) = <fun:clo@0_1>
И поскольку любой список также является последовательностью, выполнение "seq [1; 2; 3;]" просто применяет функцию seq к списку. Это похоже на приведение к seq из типа списка.
> x;;
val it : float list = [0.0; 1.0; 2.0; 3.0]
> seq x;;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]
Edit: источник для функции seq:
let seq (x : seq<_>) = (x :> seq<_>)
Таким образом, "sorta like casting it" должно читаться как "casting it via helper function". Что касается печати последовательностей внутри скобок, я думаю, что это просто симпатичный артефакт печати.