type Foo () = class end
type Bar () = inherit Foo ()
type FooCollection () = class end // not really necessary
type Test1 () =
static member AddRange (col: FooCollection) = () // could be an int or anything instead
static member AddRange (foos: Foo []) = ()
type Test2 () = static member AddRange (foos: Foo []) = ()
// won't compile
//Test1.AddRange [|Bar ()|] // error: have to explicitely cast => [|Bar () :> Foo|]
Test2.AddRange [|Bar ()|] // works
dHlwZSBGb28gKCkgPSBjbGFzcyBlbmQKdHlwZSBCYXIgKCkgPSBpbmhlcml0IEZvbyAoKQoKdHlwZSBGb29Db2xsZWN0aW9uICgpID0gY2xhc3MgZW5kIC8vIG5vdCByZWFsbHkgbmVjZXNzYXJ5Cgp0eXBlIFRlc3QxICgpID0KICBzdGF0aWMgbWVtYmVyIEFkZFJhbmdlIChjb2w6IEZvb0NvbGxlY3Rpb24pID0gKCkgLy8gY291bGQgYmUgYW4gaW50IG9yIGFueXRoaW5nIGluc3RlYWQKICBzdGF0aWMgbWVtYmVyIEFkZFJhbmdlIChmb29zOiBGb28gW10pID0gKCkKCnR5cGUgVGVzdDIgKCkgPSBzdGF0aWMgbWVtYmVyIEFkZFJhbmdlIChmb29zOiBGb28gW10pID0gKCkKCi8vIHdvbid0IGNvbXBpbGUKLy9UZXN0MS5BZGRSYW5nZSBbfEJhciAoKXxdIC8vIGVycm9yOiBoYXZlIHRvIGV4cGxpY2l0ZWx5IGNhc3QgPT4gW3xCYXIgKCkgOj4gRm9vfF0KClRlc3QyLkFkZFJhbmdlIFt8QmFyICgpfF0gLy8gd29ya3MK