gadt-escape1.hs:19:58: Couldn't match type ‘t’ with ‘ExpGADT Int’ ‘t’ is untouchable inside the constraints: t1 ~ Int bound by a pattern with constructor: ExpInt :: Int -> ExpGADT Int, in a case alternative at gadt-escape1.hs:19:43-50 ‘t’ is a rigid type variable bound by the inferred type of weird1 :: t at gadt-escape1.hs:19:1 Possible fix: add a type signature for ‘weird1’ Expected type: t Actual type: ExpGADT t1 Relevant bindings include weird1 :: t (bound at gadt-escape1.hs:19:1) In the expression: a In a case alternative: Hidden (ExpInt _) a -> a