Each subsequent use of a function argument leads to a different type. For instance:
let f1 = printfn "%d %d %d" // f1 : int -> int -> int -> unit let f2 = f1 0 // f2 : int -> int -> unit let f3 = f2 1 // f3 : int -> unit let r = f3 2 // r : unit
Note that f1 , f2 , f3 and r are of different types. Different types mean that you cannot insert them into a general data structure such as a list or sequence.
(honestly, there is a way around this with method overloads, but this tends to break the compiler and is generally not needed for real applications)
I would choose a different route:
for i in 0..2 do printf ".===.===.===.\n|" for j in 0..2 do printf "%c |" cells.[i*3+j] printfn "" printfn ".===.===.===."
source share