I’m trying to create a print statement that can print any type. I want to use type pattern matching to achieve this.
This doesn’t work:
let print x = match x with | :? int -> printf "INT"; | _ -> None;;
I get the message:
let print x = match x with | 😕 int -> printf “INT”; | _ -> None;;
—————————–^^^^^^stdin(47,30): error FS0008: This runtime coercion or type test from
type
‘a to
int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types.
Further type annotations are needed.
So, i can’t do type matching on an int? What other types can i not do type matching on? What does it mean that further type annotations are needed?
Type test is performed on reference types only. Therefore:
or
would work.
Notice that your function doesn’t type check since
Noneis ofoptiontype which is different fromunittype ofprintf "INT".