type Circle() = inherit Shape()
type Square() = inherit Shape()
type IGeometry<'foo when 'foo :> Shape> = interface end
let useAny(baz: IGeometry<'Shape>) = match baz with
| :? IGeometry<Square> -> ()
| :? IGeometry<Circle> -> ()
| _ -> failwith "Not a valid shape yo"
let useCircle(bar: IGeometry<Circle>) = useAny bar