Why does this compile:
let (|T|F|) b =
let f (o:int) : obj = null
if b then T else F(f)
while this fails:
let (|T|F|) b =
let f (o:obj) : obj = null
if b then T else F(f)
The difference between the two examples is the argument 'o' is coerced to either an 'int' (compiles) or an 'obj' (fails to compile)