F # эквивалент ключевого слова `is` в С#?

Мой первый день F #. Если у меня есть это:

let cat = Animal()

Теперь, как я могу проверить на более позднем этапе, если cat is Animal?

В С#

bool b = cat is Animal;

В F #?

Ответ 1

@ildjarn заслуживает кредита здесь для ответа сначала, но я подаю ответ здесь, чтобы его можно было принять.

Соответствие F # ключевого слова С# is :?. Например:

let cat = Animal()
if cat :? Animal then
    printfn "cat is an animal."
else
    printfn "cat is not an animal."

Ответ 2

Только для демонстрации (не определяйте функцию is):

let is<'T> (x: obj) = x :? 'T

type Animal() = class end
type Cat() = inherit Animal()

let cat = Cat()
cat |> is<Animal> //true

Ответ 3

Я знаю, что опаздываю. Если вы попытаетесь проверить тип коллекции в fsi с помощью:? он выдаст ошибку, если типы элементов не совпадают. Например.

let squares = seq { for x in 1 .. 15 -> x * x }  
squares :? list<int> ;;   // will give false  
squares :? list<string> ;; // error FS0193: Type constraint mismatch

Обертка в такой функции, как Daniels, работает <T> .