One particular practical reason:

# type t = Int : int -> t | Float : float -> t [@@deriving bin_io, compare, sexp];;
Characters 22-23:
  type t = Int : int -> t | Float : float -> t [@@deriving bin_io, compare, sexp];;
                        ^
bin_write_sum: GADTs are not supported by bin_prot

I'm not sure whether it is a real limitation, or it can be fixed, but so far there is a difference. 



On Tue, Mar 29, 2016 at 6:08 AM, Malcolm Matalka <mmatalka@gmail.com> wrote:

I've been learning about GADTs this weekend and I'm wondering if there is any reason to not use them all the time?  Or put another way, should Ocaml have non generalized variants at all (tossing aside the legacy code thing)?