Can GADTs be used to prove type inequalities in GHC?
So, in my ongoing attempts to half-understand Curry-Howard through small Haskell exercises, I've gotten stuck at this point: {-# LANGUAGE GADTs #-} import Data.Void type Not a = a -> Void -- | The type of type equality proofs, which can only be instantiated if a = b. data Equal a b where Refl :: Equal a a -- | Derive a contradiction from a putative proof of @Equal Int Char@. intIsNotChar :: Not (Equal Int Char) intIsNotChar intIsChar = ??? Clearly the type Equal Int Char has no (non-bottom) inhabitants, and thus semantically there ought to be an absurdEquality :: Equal Int Char -> a function..