{-# LANGUAGE GADTs #-} data GADT b a where GBool :: b -> GADT b Bool GInt :: GADT b Int -- wingman would prefer to use GBool since then it can use its argument. But -- that won't unify with GADT Int, so it is forced to pick GInt and ignore the -- argument. test :: b -> GADT b Int test _ = GInt