let f0 f = [|for n in 1..10 do f (); yield n|]
let f00 f g = [|for n in 1..10 do f (); g (); yield n|]
let f000 f = [|for n in 1..10 do f (); yield n; yield n + 1|]
let f0000 () = [|for n in 1..10 do yield n|]
let f00000 () = [|for n in 1..10 do n|]
let f000000 () = [|for n in 1..10 do let n = n in n|]
let f0000000 () = [|for n in 1..10 do let n = n in yield n|]
let f00000000 () = [|for n in 1..10 do let n = n in let n = n in yield n|]
let f000000000 x y = [|for n in 1..10 do let foo = n + x in let bar = n + y in yield n + foo + bar|]
let f0000000000 f g = [|for n in 1..10 do f (); g (); n|]
let f00000000000 (f : unit -> int) (g : unit -> int) = [|for n in 1..10 do f (); g (); n|]
let f1 () = [|for n in 1..10 -> n|]
let f2 () = [|for n in 10..1 -> n|]
let f3 () = [|for n in 1..1..10 -> n|]
let f4 () = [|for n in 1..2..10 -> n|]
let f5 () = [|for n in 10..1..1 -> n|]
let f6 () = [|for n in 1..-1..10 -> n|]
let f7 () = [|for n in 10..-1..1 -> n|]
let f8 () = [|for n in 10..-2..1 -> n|]
let f9 start = [|for n in start..10 -> n|]
let f10 finish = [|for n in 1..finish -> n|]
let f11 start finish = [|for n in start..finish -> n|]
let f12 start = [|for n in start..1..10 -> n|]
let f13 step = [|for n in 1..step..10 -> n|]
let f14 finish = [|for n in 1..1..finish -> n|]
let f15 start step = [|for n in start..step..10 -> n|]
let f16 start finish = [|for n in start..1..finish -> n|]
let f17 step finish = [|for n in 1..step..finish -> n|]
let f18 start step finish = [|for n in start..step..finish -> n|]
let f19 f = [|for n in f ()..10 -> n|]
let f20 f = [|for n in 1..f () -> n|]
let f21 f g = [|for n in f ()..g() -> n|]
let f22 f = [|for n in f ()..1..10 -> n|]
let f23 f = [|for n in 1..f ()..10 -> n|]
let f24 f = [|for n in 1..1..f () -> n|]
let f25 f g h = [|for n in f ()..g ()..h () -> n|]
let f26 start step finish = [|for n in start..step..finish -> n, float n|]
let f27 start step finish = [|for n in start..step..finish -> struct (n, float n)|]
let f28 start step finish = [|for n in start..step..finish -> let x = n + 1 in n * n|]

let f29 f g = [|let y = f () in let z = g () in for x in 1..2..10 -> x + y + z|]
let f30 f g = [|let y = f () in g (); for x in 1..2..10 -> x + y|]
let f31 f g = [|f (); g (); for x in 1..2..10 -> x|]
let f32 f g = [|f (); let y = g () in for x in 1..2..10 -> x + y|]
