Followup question:
Given I have:
type foo = [`A | `B of int | `C of char]
type bar = [`B of int | `C  of char| `D]

and a function
let f (x : foo) : bar =
match x with
    `A -> `D
   |`B _
   |`C _ -> (x : bar)

Is there any way to properly coerce this using the restricted variant information of x? Or do I have to duplicate code and reconstruct x?

--
Seth Fogarty             sfogarty@[gmail.com|rice.edu|livejournal]
Neep-neep at large    AIM: Sorrath
"I know there are people in this world who do not love their fellow
human beings - and I hate people like that" --Tom Lehrer.