GHC beschwert sich über nicht vollständige Muster, die von der Typprüfung erzwungen werden

Ich habe den folgenden Code

{-# LANGUAGE DataKinds, GADTs, TypeOperators #-}

data Vect v a where
    Nil :: Vect '[] a
    Vec :: a -> Vect v a -> Vect (() ': v) a 

instance Eq a => Eq (Vect v a) where
    (==) Nil Nil               = True
    (Vec e0 v0) == (Vec e1 v1) = e0 == e1 && v0 == v1

Beim Kompilieren oder Dolmetschen mit-Wall Die folgende Warnung wird ausgegeben:

Pattern match(es) are non-exhaustive
In an equation for `==':
    Patterns not matched:
        Nil (Vec _ _)
        (Vec _ _) Nil

Normalerweise ist dies zu erwarten. Normalerweise gibt es keine Möglichkeit für den Compiler, dies zu wissen, ohne den Code auszuführen, selbst wenn ich davon ausgehen kann, dass meine Muster alle möglichen Fälle abdecken. Die Vollständigkeit der bereitgestellten Muster wird jedoch von der Typprüfung erzwungen, die zur Kompilierungszeit ausgeführt wird. Das Hinzufügen der von GHC vorgeschlagenen Muster führt zu einem Fehler beim Kompilieren:

Couldn't match type '[] * with `(':) * () v1'

Meine Frage lautet also: Spielen GHC-Warnungen mit GHC-Erweiterungen nicht gut? Sollen sie sich gegenseitig bewusst sein? Ist diese Funktionalität (Warnungen unter Berücksichtigung von Erweiterungen) für eine zukünftige Version vorgesehen, oder gibt es technische Einschränkungen bei der Implementierung dieser Funktion?

Es scheint, dass die Lösung einfach ist; Der Compiler kann versuchen, das vermeintlich nicht übereinstimmende Muster zur Funktion hinzuzufügen, und die Typprüfung erneut fragen, ob das vorgeschlagene Muster richtig geschrieben ist. Ist dies der Fall, kann dies dem Benutzer tatsächlich als fehlendes Muster gemeldet werden.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage