Angenommen, definieren wir einen GADT zum Vergleich von Typen:Runtime Vergleich von Typen für das Anheben polymorphe Datenstrukturen in GADTs
data EQT a b where
Witness :: EQT a a
Ist es dann möglich, eine Funktion EQT mit folgenden Art Unterschrift zu erklären:
eqt :: (Typeable a, Typeable b) => a -> b -> Maybe (EQT a b)
... so dass EQT xy zu gerade Zeuge wertet wenn typeOf x == t ypeOf y --- und sonst zu Nichts? Die Funktion eqt würde es ermöglichen, gewöhnliche polymorphe Datenstrukturen in GADTs zu heben.
Das ist ordentlich! Vielen Dank. –
Sicher verpackt, solange niemand eine falsche "Data.Typeable" -Instanz auf etwas gemacht hat. ('Ableiten von Typable' ist immer sicher.) –
Beachten Sie, dass diese Tage' eq' im 'Data.Typeable' Modul als [' eqT' verfügbar sind (https://hackage.haskell.org/package/base-4.9) .0.0/docs/Daten-Typable.html # v: eqT) –