Zdefiniowałem instancję NumericPreludeRing
dla mojego własnego typu danych, ale nie zdefiniowałem one
ani fromInteger
. Po skompilowaniu programu nie otrzymałem ostrzeżeń, ponieważ klasa Ring
ma domyślne wzajemnie rekursywne implementacje dla one
i fromInteger
. Wynik: przepełnienie stosu, które było bardzo trudne do znalezienia. (W rzeczywistości, przy użyciu -XRebindableSyntax Z fromInteger
na stałych numerycznych nie muszą być jawne, więc było dość trudne, aby dowiedzieć się fromInteger
był sprawcą przepełnienia stosu.)Minimalne pełne adnotacje definicji dla Haskell
Czy istnieje sposób programistom opisywanie klas do wskazać minimalną kompletną definicję? Byłoby bardzo pomocne, gdyby GHC mógł wysłać ostrzeżenie dla instancji, które nie spełniają tej definicji, jednocześnie zezwalając na kompletny zestaw domyślnych implementacji. Jeśli nie, jaka jest tutaj przyjęta praktyka? Czy programiści powinni pozostawić minimalny zestaw metod (a?) Bez wartości domyślnych, aby wygenerować odpowiednie ostrzeżenia lub czy użytkownicy polegają na RTFM?