GHC skarży się na niewyczerpujące wzorce wymuszane przez sprawdzanie typu

Mam następujący kod

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

Podczas kompilacji lub tłumaczenia z-Wall pojawia się następujące ostrzeżenie:

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

Zazwyczaj należy się tego spodziewać. Zwykle, nawet jeśli rozumiem, że moje wzorce obejmują wszystkie możliwe przypadki, kompilator nie może wiedzieć, że nie uruchamia kodu. Jednak kompletność dostarczonych wzorców jest wymuszana przez sprawdzanie typu, który działa w czasie kompilacji. Dodanie wzorców sugerowanych przez GHC daje błąd czasu kompilacji:

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

Więc moje pytanie brzmi: czy ostrzeżenia GHC po prostu nie grają dobrze z rozszerzeniami GHC? Czy powinni być świadomi siebie nawzajem? Czy ta funkcja (ostrzeżenia uwzględniające rozszerzenia) ma zostać wydana w przyszłości, czy też istnieje jakieś techniczne ograniczenie implementacji tej funkcji?

Wydaje się, że rozwiązanie jest proste; kompilator może spróbować dodać rzekomo niedopasowany wzorzec do funkcji i ponownie zapytać sprawdzającego typ, jeśli sugerowany wzór jest dobrze wpisany. Jeśli tak, to można go zgłosić użytkownikowi jako brakujący wzorzec.

questionAnswers(1)

yourAnswerToTheQuestion