let f (O: obj) =
match O with
| :? (obj -> list<obj>) -> "win"
| :? list<obj> -> "list!"
| _ -> "fail"
Console.WriteLine(f(fun x -> ["lol"]))
Console.WriteLine(f(["lol"]))
imprime "falla" dos veces, como supongo que debería, porque le estoy dando una función obj -> list<String>
, que no es un obj -> list<obj>
. ¿Hay alguna forma de hacerlos coincidir? Pude subir cada lista a list<obj>
antes de hacer una función anónima, o pude subir todo al obj
antes de ponerlo en la lista.F # coincidencia de patrones: funciones coincidentes/listas de subtipos?
Cualquiera de esos trabajos hace que coincida, pero pensé que este era el problema que la covarianza/contravarianza debía haber resuelto ya? Corrígeme si me equivoco
F # no admite co/contravariancia. – Daniel