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"]))
drukuje "niepowodzenie" dwa razy, jak przypuszczam, powinien, ponieważ daje mi funkcję obj -> list<String>
, która nie jest obj -> list<obj>
. Czy jest jakiś sposób, żeby je dopasować? Mogłem podnieść każdą listę do postaci list<obj>
, zanim wykonam z niej anonimową funkcję, lub przed opublikowaniem na liście mogę wszystko upchnąć na obj
.F # Dopasowywanie wzorców: Pasujące funkcje/listy podtypów?
Każda z tych prac i sprawia, że pasują, ale myślałem, że to był problem, że kowariancja/contrawariancja miała już rozwiązać? Popraw mnie, jeśli się mylę.
F # nie obsługuje koinicjancji. – Daniel