Detecting use-cases for GADTs in OCaml