let f0 (list: int list) = [|for x in list do x|]
let f00 (list: int list) = [|for x in list do yield x|]
let f000 (list: int list) = [|for x in list do let x = x in yield x|]
let f0000 (list: int list) = [|for x in list do let x = x in x|]
let f00000 (list: int list) x y = [|for z in list do let foo = z + x in let bar = z + y in yield z + foo + bar|]
let f000000 (list: int list) x y = [|for z in list do let foo = z + x in let bar = z + y in z + foo + bar|]
let f0000000 (list: int list) f x y = [|for z in list do f (); let foo = z + x in let bar = z + y in z + foo + bar|]
let f00000000 (list: int list) f x y = [|for z in list do let foo = z + x in f (); let bar = z + y in z + foo + bar|]
let f000000000 (list: int list) f x y = [|for z in list do let foo = z + x in let bar = z + y in f (); z + foo + bar|]
let f0000000000 (list: int list) (f : unit -> int) x y = [|for z in list do let foo = z + x in let bar = z + y in f (); z + foo + bar|]

let f1 (list: int list) = [|for x in list -> x|]
let f2 f (list: int list) = [|for x in list -> f x|]
let f3 f (list: int list) = [|for x in list -> f (); x|]
let f4 f g (list: int list) = [|for x in list -> f (); g(); x|]
let f5 (list: int list) = [|for x in list do yield x|]
let f6 f (list: int list) = [|for x in list do f (); yield x|]
let f7 f g (list: int list) = [|for x in list do f (); g (); yield x|]

let f8 f g (list: int list) = [|let y = f () in let z = g () in for x in list -> x + y + z|]
let f9 f g (list: int list) = [|let y = f () in g (); for x in list -> x + y|]
let f10 f g (list: int list) = [|f (); g (); for x in list -> x|]
let f11 f g (list: int list) = [|f (); let y = g () in for x in list -> x + y|]
