Мне нравятся другие предложения о том, как потреблять "foo", предполагая, что foo остается фиксированным.
Мне кажется, что код "foo" пахнет. Если разумно преобразовать «foo» в «bar» по линиям
let bar =
let x = ref 10
seq {
x := !x - 1
while !x <> 0 do
yield x
x := !x - 1
}
bar |> Seq.iter print_any
тогда я бы сделал это, но "бар", хотя и несколько лучше, все еще кажется подозрительным. (В «bar» я сохранил странный аспект, который возвращает «int ref», а не просто «int», как это сделал «foo», но, надеюсь, этот аспект был непреднамеренным?)
Я думаю, что вещь, которая так забавна в "foo", - это неявная информация, которая неочевидна из типа данных (вы можете продолжать вызывать ее, пока часть bool верна), что делает последовательность версия немного привлекательнее.