Według the F# specification, ekspresja sekwencji może być normalne wyrażenie obliczeniowe (jest to przypadek, w którym piszesz do yield
) lub może to być krótki formularz, który jest specyficzny dla sekwencji wyrażeń:
seq { comp-expr }
seq { short-comp-expr }
Obudowa comp-expr
obejmuje Twoje pierwsze i ostatnie działające przykłady. Krótka forma używa ->
i specyfikacja wyraźnie mówi, że dozwolone tylko krótki formularz z in
słów kluczowych:
short-comp-expr :=
for pat in expr-or-range-expr -> expr -- yield result
Istnieje wiele innych krótkich form, które byłyby przydatne w praktyce, ale myślę, że celem jest zapewniają specjalną składnię tylko dla tego, bardzo często, przypadku i w inny sposób utrzymują język w jednakowej formie.
Link do specyfikacji już nie działa, każdy może spojrzeć na [najnowszą specyfikację] (http://fsharp.org/specs/language-spec/), sekcja "6.3.11 Wyrażenie sekwencji". –