abstract Action : unit -> unit
| ProductA -> { new IA with
member this.Action() = printfn "Product A" }
| ProductB -> { new IA with
member this.Action() = printfn "Product B" }
let creators = [|factory Product.ProductA; factory Product.ProductB|]
creators |> Array.iter (fun x -> x.Action() )