[Haskell] Conditional typechecking with GADTs