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

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

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