Możesz nadal używać extensions: DeriveFunctor
w pliku .cabal. Tak, to nie jest rozszerzenie, które jest obecnie znane Cabal, ale nadal możesz z niego korzystać i dopóki kompilator je rozpozna, to zadziała. Rzeczywiście Cabal sprawdzi, czy kompilator rozpoznaje rozszerzenie, mimo że Cabal sama o tym nie wie.
Istnieje centralny rejestr rozszerzeń w module Language.Haskell.Extension
. Celem tego rejestru jest to, aby różne kompilatory mogły uzgodnić te same nazwy podczas wdrażania tych samych rozszerzeń. W przeszłości mieliśmy przypadki, w których autorzy różnych kompilatorów przypadkowo nadawali różne nazwy tej samej koncepcji rozszerzenia. Nie wszystkie rozszerzenia muszą zostać zarejestrowane. Sensowne jest, aby nie rejestrować rozszerzeń, które są nadal wysoce eksperymentalne, na przykład rozszerzenia DPH "PArr" nadal nie są rejestrowane. Hackage wymaga, aby wszystkie załadowane pakiety używały tylko znanych zarejestrowanych rozszerzeń, co ma sens, ponieważ jeśli rozszerzenie jest wystarczająco przygotowane do użycia w rozproszonym pakiecie, można się zarejestrować.
W tym szczególnym przypadku twórcy GHC zapomnieli zarejestrować rozszerzenie.
Warto również zauważyć, że od wersji Cabal-1.10 pole extensions
jest dzielone na dwie części: default-extensions
i other-extensions
. Odnosi się to do kwestii, którą John wskazuje w swojej odpowiedzi, że poprzednie zachowanie polega na tym, że wszystkie rozszerzenia są aktywne dla wszystkich modułów, co uznajemy za błąd. Pole other-extensions
pozwala na umieszczenie rozszerzeń używanych w niektórych modułach (tj. Z pragma LANGUAGE
). Cabal w końcu wymusi wymuszenie, że wszystkie są wymienione, tak jak wymaga to wszystkich zależności pakietów. Zależności językowe również są zależne.
Którą wersję platformy GHC lub Haskell używasz> –
Dodano więcej informacji o wersji. –
Nie wiem o tym szczególnym ostrzeżeniu, ale myślę, że dodanie do tego pragma LANGUAGE w pliku jest najlepszą opcją. –