I have: type _ t = | Foo1 : 'a * int -> int t | Foo2 : 'a * string -> 'a t but I really want to merge these two cases. I want the return type to be based on the second arg when the second arg is int, and be based on the first arg otherwise. Any way to accomplish that?