假设我们定义了一个 GADT 来比较类型:
data EQT a b where
Witness :: EQT a a
那么是否可以使用以下类型签名声明函数eqt :
eqt :: (Typeable a, Typeable b) => a -> b -> Maybe (EQT a b)
...这样如果typeOf x == typeOf y ---则eqt xy评估为Just Witness ,否则为Nothing?
函数eqt可以将普通的多态数据结构提升为 GADT。