Question

My first F# day. If I have this:

let cat = Animal()

Now how do I check at later stage if cat is Animal?

In C#

bool b = cat is Animal;

In F#?

Was it helpful?

Solution

@ildjarn deserves the credit here for answering first, but I'm submitting the answer here so it can be accepted.

The F# equivalent of the C# is keyword is :?. For example:

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

OTHER TIPS

For demonstration only (don't define an is function):

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

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

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

I know I'm late. If you try to test the type of a collection in fsi with :? it will give an error, if the item types do not match. E.g.

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

Wrapping in a function like Daniels is<'T> works.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top