型の比較のために 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 に持ち上げることができます。