FWIW OCaml (the linked example is using reason, a different syntax for OCaml) doesn't need a syntax extension for GADTs.
On a similar note i find the OCaml syntax easier to read than Reason's. (There is an option to toggle between the two in the linked website)
The example from your post in OCaml:
type 'a restricted_maybe =
| JustInt : int -> int restricted_maybe
| JustString : string -> string restricted_maybe
| Nothing : 'a restricted_maybe