An extensible "universal" variant type.
Every type id (Type_equal.Id.t) corresponds to one branch of the variant type.
does_match t id returns true iff t was created by create id v.
does_match t id
create id v
match_ t id returns Some v if t was created by create id v, and returns None
match_ t id
match_exn t id returns v if t was created by create id v, and raises
match_exn t id
view t provides access to the GADT representation of t. This is currently the
same as the underlying representation, but is put in the View module to make later
changes to the underlying representation easier.