From msdn :
In F#, parameter arrays can only be defined in methods. They cannot be used in standalone functions or functions that are defined in modules.
So instead of a module, declare a type with a static method.
open System
type Test() =
static member flatten ([<ParamArray>] args: obj[]) =
let flat = seq {
for a in args do
match box a with
| :? int as x -> yield x
| :? seq<int> as sq ->
for s in sq do
yield s
| _ -> failwith "wrong input type"
}
flat
If you have other let bindings you can still declare a module with the same name.
Also note that in the second guard of the match you can avoid the for
loop by doing:
| :? seq<int> as sq -> yield! sq
And box
is not required.