Можно ли использовать GADT для доказательства неравенства типов в GHC?

Итак, в моих постоянных попытках наполовину понять Карри-Ховарда с помощью небольших упражнений на Хаскелле, яя застрял в этой точке:

{-# 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 = ???

Ясно типEqual Int Char не имеет (не нижних) жителей, и поэтому семантически должно бытьabsurdEquality :: Equal Int Char -> a функционировать ... но для жизни я могуНе могу придумать способ написать что-либо кроме использования.undefined

Так что либо: я

я что-то упустил, илиЕсть некоторые ограничения в языке, которые делают это невыполнимой задачей, и у меня нетНе удалось понять, что это такое.

Я подозреваю, что ответ примерно такой: компилятор не может использовать тот факт, что нетEqual конструкторы, которые нет есть а = б. Но если это так, что делает это правдой?

Ответы на вопрос(2)

Ваш ответ на вопрос