Согласно спецификации F # (см. §6.5.7), простые для циклов ограничены целым числом (int aka int32 aka System.Int32) start и stop, например
for i = start to stop do
// do sth.
Интересно, почему ограничения итерации для этого типа цикла for должны быть int32. Почему бы не позволить uint32? int64? bigint?
Я знаю, что итерационные выражения последовательности (for ... in ...) могут выполнять итерацию по произвольным последовательностям; что, однако, требует выделения итератора и вызова MoveNext и Current, а что нет и может быть значительно менее эффективным, чем простой цикл (приращение счетчика, сравнение, переход по условию). Чтобы этого избежать, вы застряли с использованием while и счетчиков циклов с добавлением вручную...
Как ни странно, F # разрешает ограничения на int32, если выражение for обернуто в выражение последовательности, например
seq { for i = 0I to 10I do
printfn "%A" i }
Итак, я думаю, вопрос в том, есть ли конкретная причина только для того, чтобы разрешать int32 для циклов? И почему это ограничение не относится к циклам for, заключенным в выражения seq?